Étape 4: Arudino Code
#include « pitches.h » / / contient les notes référencés dans le présent code.
int tonepin = 3 ; pour jouer des sonneries musicales
int loadpin = 9 ;
int clockpin = 7 ;
int SOpin = 8 ;
unsigned long idle_time ;
registerContent octets = 0 ;
registerContent2 octets = 0 ;
loWord long ; était auparavant un entier
int bitContent = 0 ;
long idle_millseconds = 0 ;
Broche reliée à la broche de verrouillage (ST_CP) de 74HC595
const int latchPin_595 = 10 ; déjà 10
Broche reliée à la broche d’horloge (SH_CP) de 74HC595
const int clockPin_595 = 12 ; déjà 12
Broche reliée aux données de 74HC595 (DS)
const int dataPin_595 = 11 ; déjà 11
int bitToSet ; bit sur 595 Maj Registre pour définir
int button_Switch1 = 2 ;
la mélodie d’int [] = {}
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 / / bits pour écrire sur le registre 595
#define white_led 4
#define blue_led 1
#define green_led 2
#define yellow_led 3
joy1_up long = 32768 ;
joy1_down long = 2048 ;
joy1_left long = 8192 ;
joy1_right long = 512 ;
joy2_up long = 4096 ;
joy2_down long = 1024 ;
joy2_left long = 16384 ;
joy2_right long = 256 ;
installation Sub ()
{
pinMode (loadpin, sortie) ;
pinMode (clockpin, sortie) ;
pinMode (entrée, SOpin) ;
Réglez de façon strictement à la sortie parce qu’elles sont adressées dans la boucle principale
pinMode (latchPin_595, sortie) ;
pinMode (dataPin_595, sortie) ;
pinMode (clockPin_595, sortie) ;
pinMode (button_Switch1, entrée) ; 5 commutateurs de bouton avec LED
digitalWrite (loadpin, basse) ;
digitalWrite (clockpin, HIGH) ;
digitalWrite (button_Switch1, basse) ;
led_check(1) ; Leds s’allument et jouer une seule note... au hasard
Serial.Begin(9600) ;
Idle_time=Millis() ;
}
void loop ()
{
pour (idx int = 0; idx < 16 ; idx ++)
{
Si (idx == 0)
{
pulseload() ;
}
bitContent = digitalRead (SOpin) ;
Si (bitContent == 1 & & idx < 8)
{
bitWrite(registerContent,idx,1) ;
}
ElseIf (bitContent == 1 & & idx > = 8)
{
bitWrite (registerContent2, idx-8,1) ;
}
ElseIf (bitContent == 0 & & idx < 8)
{
bitWrite (registerContent, idx, 0) ;
}
ElseIf (bitContent == 0 & & idx > = 8)
{
bitWrite (registerContent2, idx-8,0) ;
}
pulseclock() ;
}
fin de cycle d’horloge pour 2 registres à décalage.
loWord = mot (registerContent, registerContent2) ; convertir les deux octets dans un mot
Serial.Print ("valeur de sortie:") ;
Serial.println(loWord,DEC) ; imprimer le mot sous forme décimale
{Switch(loWord)}
cas 36864 :
Serial.println ("les deux Up") ;
bitToSet = red_led ;
registerWrite (bitToSet, HIGH) ;
Playtone(2) ;
rupture ;
cas 3072 :
Serial.println ("les deux Down") ;
bitToSet = green_led ;
registerWrite (bitToSet, HIGH) ;
Playtone(2) ;
rupture ;
cas 24576 :
Serial.println ("les deux gauche") ;
bitToSet = white_led ;
registerWrite (bitToSet, HIGH) ;
Playtone(2) ;
rupture ;
cas 768 :
Serial.println (« les deux « droit ») ;
bitToSet = blue_led ;
registerWrite (bitToSet, HIGH) ;
Playtone(2) ;
rupture ;
cas 8 :
Serial.println "(bouton blanc") ;
bitToSet = white_led ;
registerWrite (bitToSet, HIGH) ;
Playtone(1) ;
rupture ;
No 32 :
Serial.println "(bouton jaune") ;
bitToSet = yellow_led ;
registerWrite (bitToSet, HIGH) ;
Playtone(1) ;
rupture ;
cas 1 :
Serial.println "(bouton bleu") ;
bitToSet = blue_led ;
registerWrite (bitToSet, HIGH) ;
Playtone(1) ;
rupture ;
cas 2 :
Serial.println ("bouton rouge") ;
bitToSet = red_led ;
registerWrite (bitToSet, HIGH) ;
Playtone(1) ;
rupture ;
case 16 :
Serial.println ("bouton vert") ;
bitToSet = green_led ;
registerWrite (bitToSet, HIGH) ;
Playtone(1) ;
rupture ;
par défaut :
rien n’a poussé ou séquence non reconnu
pour (int thisPin = 0; thisPin < 16 ; thisPin ++) {}
registerWrite (thisPin, basse) ;
}
registerContent = 0 ;
registerContent2 = 0 ;
} / / fin de cas / switch
saisir l’heure actuelle
check_idle_time() ; Vérifiez le délai d’inactivité
Serial.Print ("enregistrer 1:") ;
Serial.println (registerContent, BIN) ;
Serial.Print ("enregistrer 2:") ;
Serial.println (registerContent2, BIN) ;
Serial.println (byte(10)) ;
registerContent = 0 ;
retard (250) ;
}
Sub pulseload ()
{
digitalWrite (loadpin, HIGH) ;
retard (5) ;
digitalWrite (loadpin, basse) ;
}
Sub pulseclock ()
{
digitalWrite (clockpin, basse) ;
retard (5) ;
digitalWrite (clockpin, HIGH) ;
}
void registerWrite (int whichPin, int whichState) {}
les morceaux que vous souhaitez envoyer
bitsToSend octets = 0 ;
désactiver la sortie afin que les tiges ne s’allument pas
alors que vous êtes décalage de bits :
digitalWrite (latchPin_595, basse) ;
activer le bit plus élevé suivant dans bitsToSend :
bitWrite (bitsToSend, whichPin, whichState) ;
déplacer les bits sur :
shiftOut (dataPin_595, clockPin_595, MSBFIRST, bitsToSend) ;
activer la sortie si les LED peuvent s’allumer :
digitalWrite (latchPin_595, HIGH) ;
}
void playtone (int num_of_tones) {}
Jouez une note au hasard de mélodie
pour (int i = 0; i < num_of_tones; i ++) {}
int rand_note = random(0,7) ; choisir une note de tableau de mélodie
int rand_duration = (random(1,2)) * 4 ; 4 ou 8
pour calculer la durée de la note, prendre une seconde
divisé par le type de note.
par exemple la note noire = 1000 / 4, note croche = 1000/8, etc..
int noteDuration = 1000/rand_duration ;
ton (tonepin, melody[rand_note],noteDuration) ;
pour distinguer les notes, fixer une durée minimale entre eux.
Durée + 30 % de la note semble bien fonctionner :
int pauseBetweenNotes = noteDuration * 1.30 ;
Delay(pauseBetweenNotes) ;
arrêter la lecture de ton :
noTone(tonepin) ;
Idle_time=Millis() ;
}
}
Sub led_check(int tone_count)
{
pour (int led_bit = 0; led_bit < 5; led_bit ++) {}
registerWrite (led_bit, HIGH) ;
Playtone (tone_count) ;
retard (250) ;
registerWrite (led_bit, basse) ;
Idle_time=Millis() ; réinitialiser la minuterie d’inactivité
}
}
void check_idle_time() {}
Si (millis() > idle_time + 600000) {}
10 minutes d’inactivité
led_check(2) ; LED lumière joue 2 notes
Idle_time=Millis() ;
}
}