// Et reaksjonsspill på Arduino // Laget av Olympia Circuits int redLED = 10; //RGB-rød int greenLED = 9; //RGB-grønn int buzzerPin = 11; int LED1 = 6; //Spiller 1 - LED int LED2 = 7; //Spiller 2 - LED int SW1 = 3; //Spiller 1 - knapp int SW2 = 4; //Spiller 2 - knapp int winner = 0; //Initialiserer vinnerindikatoren int winnerBeep = 750; //Buzzer-pitchen for vinnerfanfaren int fault = 0; //Initialiserer feilindikatoren int faultBeep = 200; //Buzzer-pitchen for feillyden unsigned long wait = 0; unsigned long now = 0; void setup(){ pinMode(redLED,OUTPUT); pinMode(greenLED,OUTPUT); pinMode(LED1,OUTPUT); pinMode(LED2,OUTPUT); pinMode(SW1,INPUT); pinMode(SW2,INPUT); } void loop(){ digitalWrite(redLED,HIGH); //Slår på RGB-rød //Setter opp den randomiserte forsinkelsen for rød-->grønn i RGB: fault = 0; now = millis(); wait = now + random(300,600); while(millis() < wait && digitalRead(SW1)==HIGH && digitalRead(SW2)==HIGH){ } //Finner ut om vi har en taper: knapp trykket før forsinkelsen løp ut: if(digitalRead(SW1)==LOW)fault = LED1; if(digitalRead(SW2)==LOW)fault = LED2; digitalWrite(redLED,LOW); //Slår av RGB-rød //Hvis forsinkelsen fikk løpe helt ut, dvs. uten feiltrykk: if(fault == 0){ digitalWrite(greenLED,HIGH); //Slår på RGB-grønn. The game is on! //Kjør venteløkke til en spiller har trykt på knappen sin: while(digitalRead(SW1)==HIGH && digitalRead(SW2)==HIGH){ } //Vi har forlatt løkka fordi en knapp ble trykt. Hvem vant? : if(digitalRead(SW1)==LOW){ winner = LED1; } else{ winner = LED2; } //Kjør lys- og lyd-fanfare for vinneren: for(int k = 0; k < 5; k++){ tone(buzzerPin,(winnerBeep+(k*20))); digitalWrite(greenLED,HIGH); digitalWrite(winner,HIGH); delay(50); digitalWrite(winner,LOW); digitalWrite(greenLED,LOW); delay(50); } noTone(buzzerPin); } //Hvis vi hadde feiltrykk, dvs fault ikke == 0, så hadde vi en taper: else{ //Kjør en feillyd i 5 sekunder og blink for taperen: tone(buzzerPin,faultBeep,500); for(int k = 0; k < 10; k++){ digitalWrite(redLED,HIGH); digitalWrite(fault,HIGH); delay(50); digitalWrite(redLED,LOW); digitalWrite(fault,LOW); delay(50); } } }