Göra det slag! (3 / 4 steg)
Steg 3: Slå klockan!
Vi kallar det "Beat the Clock" istället för "Diffusa the Bomb", men egentligen, det använder samma Arduino Uno tillsammans med en 4 rader av 20 tecken LCD och vi använder knappar (stoppa klockan) i stället för offranden sladdar att klippas för att stoppa klockan.
Arduino Uno är ungefär $20, LCD-skärmen är mindre än $10, kasta in några knappar för mindre än $5 och lysdioder och motstånd för ytterligare $5. Behållaren var fri och vi återanvändas ett första hjälpen kit. Så för ca $40 har du en unik multi syfte spel. Jag säger Multifunktion, eftersom denna samma produkt skulle lätt kunna användas att åter skapa en version av Simon som det föreslogs av massor av människor.
Här är vår kod:
/*
* FDR nedräkningsklockan
2/27 fast LED så det skulle vara ljusare genom att lägga till pinMode (led1, produktionen);
* Lagt till alla LCD lampor
* Lagt till LCD-Clear, nr bakgrundsbelysningen och fördröjning till slut i koden.
* Skriven av Marc Tessier & Chip Thomas
*/
#include < Time.h >
#include < Wire.h >
#include < DS1307RTC.h > / / grundläggande DS1307 bibliotek som returnerar tid som en tid
#include < LiquidCrystal_I2C.h >
LiquidCrystal_I2C lcd(0x3f,20,4); inställd 0x27 LCD adressen för en 20 tecken och 4 raders display
int jag = 0;
int led1 = 12.
int led2 = 11;
int led3 = 10;
int led4 = 8;
int led5 = 7.
int led6 = 6;
CONST int buttonPin = 2;
int buttonState = 0;
void setup() {
pinMode (led1, produktionen);
pinMode (led2, produktionen);
pinMode (led3, produktionen);
pinMode (led4, produktionen);
pinMode (led5, produktionen);
pinMode (led6, produktionen);
pinMode (buttonPin, ingång);
Serial.BEGIN(9600);
LCD.init();
LCD.backlight();
LCD.Clear();
lcd.setCursor(0,0);
LCD.Print ("FDR nedräkningsklockan!");
Delay(1000);
setSyncProvider(RTC.get); funktionen för att få tiden från RTC
IF(timeStatus()! = tidInställning)
Serial.println ("kan inte synkronisera med RTC");
annat
Serial.println ("RTC har angett systemtiden");
}
void loop()
{
medan (jag < 5)
{
digitalClockDisplay();
Delay(1000);
jag = i + 1.
}
LCD.Clear();
LCD.backlight();
lcd.setCursor(0,0);
LCD.Print ("COUNTDOWN INITIATED!");
Delay(1000);
för (int jag = 150; jag > 10; i = i-1)
{
buttonState = digitalRead(buttonPin);
lcd.setCursor(8,2);
printDigits(i-1);
IF(i < 100)
lcd.setCursor(2,2);
LCD.Print(' ');
tonen (9, 4500, 80);
digitalWrite (led1, hög);
fördröjning (jag / 2);
digitalWrite (led1, låg);
fördröjning (jag / 2);
om (buttonState == låg)
{
LCD.Clear();
LCD.Print ("bra jobb!");
bryta;
}
}
lcd.setCursor(0,1);
LCD.Print(0);
för (int jag = 0; jag < 30; i ++)
{
digitalWrite (led1, hög);
tonen (9,5000, 50);
Delay(50);
digitalWrite (led1, låg);
Delay(25);
LCD.Clear();
lcd.setCursor(0,0);
LCD.Print("Sorry");
Delay(25);
digitalWrite (led2, hög);
Delay(25);
digitalWrite (led2, låg);
Delay(25);
lcd.setCursor(5,1);
LCD.Print("Sorry");
Delay(25);
digitalWrite (led3, hög);
Delay(25);
digitalWrite (led3, låg);
Delay(25);
lcd.setCursor(10,2);
LCD.Print("Sorry");
Delay(25);
digitalWrite (led4, hög);
Delay(25);
digitalWrite (led4, låg);
Delay(25);
lcd.setCursor(15,3);
LCD.Print("Sorry");
Delay(25);
digitalWrite (led5, hög);
Delay(25);
digitalWrite (led5, låg);
Delay(25);
lcd.setCursor(15,0);
LCD.Print("Sorry");
Delay(25);
digitalWrite (led6, hög);
Delay(25);
digitalWrite (led6, låg);
Delay(25);
lcd.setCursor(0,3);
LCD.Print("Sorry");
}
LCD.Clear();
lcd.noBacklight();
Delay(10000);
lcd.setCursor(0,0);
LCD.Print("boom");
Delay(2000);
}
void digitalClockDisplay() {
digital klocka av tiden
lcd.setCursor(1,1);
LCD.Print(Month());
LCD.Print("/");
LCD.Print(Day());
LCD.Print("/");
LCD.Print(Year());
LCD.Print("");
LCD.Print(Hour());
LCD.Print(":");
printDigits(minute());
LCD.Print(":");
printDigits(second());
}
void printDigits (int siffror) {
verktyget funktion för digital klocka: utskrifter före kolon och ledande 0
IF(digits < 10)
LCD.Print('0');
LCD.Print(digits);
}