Stap 4: Arudino Code
#include "pitches.h" / / bevat de toelichting waarnaar wordt verwezen in deze code.
int tonepin = 3; om te spelen de muzikale tonen
int loadpin = 9;
int clockpin = 7;
int SOpin = 8;
unsigned long idle_time;
byte registerContent = 0;
byte registerContent2 = 0;
lange loWord; voorheen was een integer
int bitContent = 0;
lange idle_millseconds = 0;
Pin verbonden met klink pin (ST_CP) van 74HC595
Const int latchPin_595 = 10; eerder 10
Pin verbonden met klok pin (SH_CP) van 74HC595
Const int clockPin_595 = 12; eerder 12
Pin verbonden met gegevens in (DS) van 74HC595
Const int dataPin_595 = 11; eerder 11
int bitToSet; beetje op 595 verschuiving registreren om in te stellen
int button_Switch1 = 2;
int melodie [] {} =
NOTE_C4, NOTE_G3, NOTE_E7, NOTE_A3, NOTE_G3, NOTE_A4, NOTE_D8, NOTE_B6};
#define white_button 8
#define yellow_button 32
#define blue_button 1
#define red_button 2
#define green_button 16
#define red_led 0 / / bit om op 595 register te schrijven
#define white_led 4
#define blue_led 1
#define green_led 2
#define yellow_led 3
lange joy1_up = 32768;
lange joy1_down = 2048;
lange joy1_left = 8192;
lange joy1_right = 512;
lange joy2_up = 4096;
lange joy2_down = 1024;
lange joy2_left = 16384;
lange joy2_right = 256;
void setup)
{
pinMode (loadpin, OUTPUT);
pinMode (clockpin, OUTPUT);
pinMode (SOpin, INPUT);
pinnen aan output omdat zij zijn gericht in de hoofdlus instellen
pinMode (latchPin_595, OUTPUT);
pinMode (dataPin_595, OUTPUT);
pinMode (clockPin_595, OUTPUT);
pinMode (button_Switch1, INPUT); 5 knop switches met leds
digitalWrite (loadpin, laag);
digitalWrite (clockpin, hoge);
digitalWrite (button_Switch1, laag);
led_check(1); Leds oplichten en spelen een enkele noot... willekeurige
Serial.begin(9600);
idle_time=Millis();
}
void loop)
{
voor (int idx = 0; idx < 16; idx ++)
{
Als (idx == 0)
{
pulseload();
}
bitContent = digitalRead (SOpin);
Als (bitContent == 1 & & idx < 8)
{
bitWrite(registerContent,idx,1);
}
else if (bitContent == 1 & & idx > = 8)
{
bitWrite (registerContent2, idx-8,1);
}
else if (bitContent == 0 & & idx < 8)
{
bitWrite (registerContent, idx, 0);
}
else if (bitContent == 0 & & idx > = 8)
{
bitWrite (registerContent2, idx-8,0);
}
pulseclock();
}
einde van klokcyclus voor 2 shift registers.
loWord = woord (registerContent, registerContent2); omzetten van twee bytes in een woord
Serial.Print ("Output waarde:");
Serial.println(loWord,DEC); het woord als een decimaal getal afdrukken
switch(loWord) {}
Case 36864:
Serial.println ("beide Up");
bitToSet = red_led;
registerWrite (bitToSet, hoge);
playtone(2);
breken;
Case 3072:
Serial.println ("beide Down");
bitToSet = green_led;
registerWrite (bitToSet, hoge);
playtone(2);
breken;
Case 24576:
Serial.println ("beide links");
bitToSet = white_led;
registerWrite (bitToSet, hoge);
playtone(2);
breken;
Case 768:
Serial.println ("beide rechts");
bitToSet = blue_led;
registerWrite (bitToSet, hoge);
playtone(2);
breken;
zaak 8:
Serial.println ("witte Button");
bitToSet = white_led;
registerWrite (bitToSet, hoge);
playtone(1);
breken;
Case 32:
Serial.println ("gele Button");
bitToSet = yellow_led;
registerWrite (bitToSet, hoge);
playtone(1);
breken;
Case 1:
Serial.println ("blauwe knoop");
bitToSet = blue_led;
registerWrite (bitToSet, hoge);
playtone(1);
breken;
Case 2:
Serial.println ("rode knop");
bitToSet = red_led;
registerWrite (bitToSet, hoge);
playtone(1);
breken;
case 16:
Serial.println ("groene knop");
bitToSet = green_led;
registerWrite (bitToSet, hoge);
playtone(1);
breken;
standaard:
niets geduwd of niet-herkende volgorde
voor (int thisPin = 0; thisPin < 16; thisPin ++) {}
registerWrite (thisPin, laag);
}
registerContent = 0;
registerContent2 = 0;
} / / einde van zaak / schakelaar
/ / Capture huidige tijd
check_idle_time(); inactiviteit tijd controleren
Serial.Print ("registreren 1:");
Serial.println (registerContent, BIN);
Serial.Print ("registreren 2:");
Serial.println (registerContent2, BIN);
Serial.println (byte(10));
registerContent = 0;
vertraging (250);
}
VOID pulseload)
{
digitalWrite (loadpin, hoge);
vertraging (5);
digitalWrite (loadpin, laag);
}
VOID pulseclock)
{
digitalWrite (clockpin, laag);
vertraging (5);
digitalWrite (clockpin, hoge);
}
VOID registerWrite (int whichPin, int whichState) {}
de bits die u wilt verzenden
byte bitsToSend = 0;
uitschakelen van de output zodat de pinnen niet oplichten
terwijl u bits verschuiven:
digitalWrite (latchPin_595, laag);
Schakel op de volgende hoogste bit in bitsToSend:
bitWrite (bitsToSend, whichPin, whichState);
verschuiving van de bits uit:
shiftOut (dataPin_595, clockPin_595, MSBFIRST, bitsToSend);
op de uitvoer inschakelen, zodat de LEDs kunnen oplichten:
digitalWrite (latchPin_595, hoge);
}
VOID playtone (int num_of_tones) {}
een willekeurige noot van de melodie speelt
for (int i = 0; ik < num_of_tones; i ++) {}
int rand_note = random(0,7); Kies één opmerking uit melodie array
int. rand_duration = (random(1,2)) * 4; 4 of 8
voor het berekenen van de duur van de opmerking, neem één seconde
gedeeld door het type opmerking.
bijvoorbeeld kwartnoot = 1000 / 4, achtste noot = 1000/8, enz.
int noteDuration = 1000/rand_duration;
Toon (tonepin, melody[rand_note],noteDuration);
om te onderscheiden van de notities, stel een minimuminterval tussen hen.
de nota's duur + 30% schijnt goed te werken:
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
Stop het afspelen van de Toon:
noTone(tonepin);
idle_time=Millis();
}
}
VOID led_check(int tone_count)
{
voor (int led_bit = 0; led_bit < 5; led_bit ++) {}
registerWrite (led_bit, hoge);
playtone (tone_count);
vertraging (250);
registerWrite (led_bit, laag);
idle_time=Millis(); opnieuw instellen van de timer voor het uitschakelen
}
}
ongeldig check_idle_time() {}
Als (millis() > idle_time + 600000) {}
10 minuten van inactiviteit
led_check(2); lichte leds spelen 2 noten
idle_time=Millis();
}
}