Stap 3: Sla de klok!
Wij noemen het "Beat the Clock" in plaats van "Diffuse the Bomb", maar echt, het gebruikt hetzelfde die Arduino Uno in combinatie met een 4 lijnen door 20 tekens LCD en we zijn met behulp van knoppen (om te stoppen met de klok) in plaats van het aanbieden van draden te snijden om te stoppen met de klok.
De Arduino Uno is ongeveer $20, het LCD-scherm is minder dan 10 dollar, gooien in een paar knoppen voor minder dan $5 en LEDs en weerstanden voor nog eens $5. De container was vrij en gebruikten we opnieuw een EHBO-kit. Dus voor ongeveer $40 heb je een unieke multi purpose game. Ik zeg multi purpose, omdat dit hetzelfde product gemakkelijk kan worden gebruikt om opnieuw een versie van Simon zoals werd gesuggereerd door veel mensen.
Hier is onze code:
/*
* FDR Countdown klok
* 2/27 vaste LED dus het zou helderder door pinMode toe te voegen (led1, OUTPUT);
* Alle LCD verlichting toegevoegd
* Toegevoegd Clear LCD, No Backlight en vertraging aan einde van code.
* Geschreven door Marc Tessier & Chip Thomas
*/
#include < Time.h >
#include < Wire.h >
#include < DS1307RTC.h > / / een elementaire DS1307-bibliotheek die tijd als een time_t retourneert
#include < LiquidCrystal_I2C.h >
LiquidCrystal_I2C lcd(0x3f,20,4); 0x27 het LCD-adres instelt voor een 20 tekens en 4 regelig display
int i = 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, OUTPUT);
pinMode (led2, OUTPUT);
pinMode (led3, OUTPUT);
pinMode (led4, OUTPUT);
pinMode (led5, OUTPUT);
pinMode (led6, OUTPUT);
pinMode (buttonPin, INPUT);
Serial.begin(9600);
LCD.init();
LCD.backlight();
LCD.Clear();
lcd.setCursor(0,0);
LCD.Print ("FDR Countdown klok!");
delay(1000);
setSyncProvider(RTC.get); de functie om de tijd van de RTC
if(timeStatus()! = timeSet)
Serial.println ("Unable to sync met de RTC");
anders
Serial.println ("RTC heeft de systeemtijd instellen");
}
void loop
{
terwijl (ik < 5)
{
digitalClockDisplay();
delay(1000);
i = i + 1;
}
LCD.Clear();
LCD.backlight();
lcd.setCursor(0,0);
LCD.Print ("COUNTDOWN gestart!");
delay(1000);
for (int i = 150; ik > 10; ik = i-1)
{
buttonState = digitalRead(buttonPin);
lcd.setCursor(8,2);
printDigits(i-1);
if(i < 100)
lcd.setCursor(2,2);
LCD.Print(' ');
Toon (9, 4500, 80);
digitalWrite (led1, hoge);
vertraging (ik / 2);
digitalWrite (led1, laag);
vertraging (ik / 2);
Als (buttonState == laag)
{
LCD.Clear();
LCD.Print ("Good Job!");
breken;
}
}
lcd.setCursor(0,1);
LCD.Print(0);
for (int i = 0; ik < 30; i ++)
{
digitalWrite (led1, hoge);
Toon (9,5000, 50);
delay(50);
digitalWrite (led1, laag);
delay(25);
LCD.Clear();
lcd.setCursor(0,0);
LCD.Print("Sorry");
delay(25);
digitalWrite (led2, hoge);
delay(25);
digitalWrite (led2, laag);
delay(25);
lcd.setCursor(5,1);
LCD.Print("Sorry");
delay(25);
digitalWrite (led3, hoge);
delay(25);
digitalWrite (led3, laag);
delay(25);
lcd.setCursor(10,2);
LCD.Print("Sorry");
delay(25);
digitalWrite (led4, hoge);
delay(25);
digitalWrite (led4, laag);
delay(25);
lcd.setCursor(15,3);
LCD.Print("Sorry");
delay(25);
digitalWrite (led5, hoge);
delay(25);
digitalWrite (led5, laag);
delay(25);
lcd.setCursor(15,0);
LCD.Print("Sorry");
delay(25);
digitalWrite (led6, hoge);
delay(25);
digitalWrite (led6, laag);
delay(25);
lcd.setCursor(0,3);
LCD.Print("Sorry");
}
LCD.Clear();
lcd.noBacklight();
delay(10000);
lcd.setCursor(0,0);
LCD.Print("boom");
delay(2000);
}
ongeldig digitalClockDisplay() {}
digitale klokweergave van de tijd
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 cijfers) {}
hulpprogrammafunctie voor digitale klokvertoning: prenten voorafgaand aan de dikke darm en 0 voorsprong
if(digits < 10)
LCD.Print('0');
LCD.Print(digits);
}