Arduino - minne spelet (3 / 4 steg)
Steg 3: Steg 3: koden
PIN ansluten till 12(ST_CP) i 74HC595 SKIFT Register
int latchPin = 8; clockPin ansluten till 11(SH_CP) på 74HC595 SKIFT registrera int clockPin = 12; PIN ansluten till DS för 74HC595 SKIFT registrera int dataPin = 11;
Variabel om spelet är över booleska gameover = false;
Matris för shiftregister int ledarray [8] = {1,2,4,8,16,32,64,128}; Variabel för nuvarande nivå int = 4; Reserverad array av de korrekta lysdioderna på varje nivå int randarray1 [8], Antal lysdioder finns int min = 0; int max = 4; Variabel för vilken en av knappen intryckt int buttpr; Variabel för alla LED stift int buttonpins [8] = {2,3,4,5,6,7, A0, A1};
void setup() {/ / Ställ in pinnarna till SKIFT registret pinMode (latchPin, produktionen), pinMode (clockPin, produktionen), pinMode (dataPin, produktionen);
Ställ in alla lysdioder i PULLUP läge för (int buttpin = 0; buttpin < 8; buttpin ++) {pinMode (buttonpins [buttpin], INPUT_PULLUP);} / / Arduino redo för seriell kommunikation Serial.begin(9600); }
void loop() {/ / höja spel nivå om (nivå < 8) {nivå ++;} / / göra nivån så länge det finns ingen Gameover if(!gameover) {/ / generera nya LED kombination för nivån för (int jag = 0; jag < nivå; i ++) {randarray1[i]=random(max);} / / slinga för ljus alla lysdioder på den aktuella nivån för (int numberToDisplay = 0; numberToDisplay < nivå; numberToDisplay ++) {Serial.println(ledarray[randarray1[numberToDisplay]]); / / stänger makt att shiftregister readingPin innan vi väljer ny pin digitalWrite (latchPin LÅG); Markera nästa LED med shiftregister shiftOut (dataPin, clockPin, MSBFIRST, ledarray[randarray1[numberToDisplay]]); Ljust den markerade LED i hälften av en andra digitalWrite (latchPin, hög); Delay(500); Döda ljuset igen digitalWrite (latchPin, låg); Markera den första LED shiftOut (dataPin, clockPin, MSBFIRST, 0); Slå på den första LED digitalWrite (latchPin, hög); Paus 1 sekund innan nästa LED delay(1000); }
Slinga för att läsa buttonpressed för (int lednr = 0; lednr < nivå; lednr ++) {/ / skriva ut vilken är den nästa rätt LED Serial.print("Next led:"); Serial.println(lednr); Vänta en sekund innan nästa Läs delay(1000); Läs knapparna tills man trycker gör {buttpr=whichbuttonpressed();} while(buttpr==9); Skriva ut den aktuella trycks knappen och wich knappen är rätta Serial.print(buttpr); Serial.println(randarray1[lednr]); Spela upp ljud för buttonpressed tone(13,660,200); Om det är på fel knapp, dess Gameover if(buttpr!=randarray1[lednr]) {gameover = sant; / / spela Gameover ljud tone(13,440,1000); Serial.println("GameOver"); Avbryt loop för läsning av knapparna paus; {}} Serial.println ("nivå slutade"); } }
int whichbuttonpressed() {/ / upprepa över alla knappar och läsa för (int buttpin = 0; buttpin < 8; buttpin ++) {/ / om knappen trycks tillbaka värdet på knappen om (digitalRead(buttonpins[buttpin])==0) {return(buttpin); break;}} / / om ingen knapp trycks tillbaka 9 för att fortsätta att läsa knapparna i slingan återvända 9.}