Étape 3: Battre l’horloge !
Nous l’appelons « Beat the Clock » au lieu de "Diffuser the Bomb", mais vraiment, il utilise les mêmes Qu'arduino Uno couplé avec un 4 lignes de 20 caractères LCD et nous utilisons des boutons (pour arrêter l’horloge) au lieu d’offrir des fils à couper pour arrêter l’horloge.
L’Arduino Uno est d’environ 20 $, l’écran LCD est moins de $10, jeter dans quelques boutons pour moins de $5 et des LEDs et des résistances pour un autre 5 $. Le conteneur était libre et nous ré-utilisé une trousse de premiers soins. Pour environ 40 $, vous avez un jeu de but unique multi. Je dis multi usage, parce que ce même produit pourrait facilement être utilisé pour recréer une version de Simon comme il a été suggéré par beaucoup de gens.
Voici notre code :
/*
* Compte à rebours RAD
* 2/27 ch LED donc il serait plus clair en ajoutant pinMode (led1, sortie) ;
Ajouté de tous les ACL
* Ajouté Clear LCD, sans RETRO-ECLAIRAGE et retard à la fin du code.
* Écrit par Marc Tessier & puce Thomas
*/
#include < Time.h >
#include < Wire.h >
#include < DS1307RTC.h > / / une base bibliothèque DS1307 qui retourne le temps comme un time_t
#include < LiquidCrystal_I2C.h >
LiquidCrystal_I2C lcd(0x3f,20,4) ; mettre l’adresse de LCD sur 0 x 27 pour un 20 caractères et affichage de la ligne 4
int i = 0 ;
led1 int = 12 ;
led2 int = 11 ;
led3 int = 10 ;
led4 int = 8 ;
DEL5 int = 7 ;
led6 int = 6 ;
const int buttonPin = 2 ;
buttonState int = 0 ;
void setup() {}
pinMode (led1, sortie) ;
pinMode (led2, sortie) ;
pinMode (DEL3, sortie) ;
pinMode (led4, sortie) ;
pinMode (DEL5, sortie) ;
pinMode (led6, sortie) ;
pinMode (buttonPin, entrée) ;
Serial.Begin(9600) ;
LCD.init() ;
LCD.backlight() ;
LCD.Clear() ;
lcd.setCursor(0,0) ;
LCD.Print ("FDR compte à rebours!") ;
Delay(1000) ;
setSyncProvider(RTC.get) ; la fonction permettant d’obtenir le temps du CCF
if(timeStatus()! = timeSet)
Serial.println ("Impossible de synchroniser avec le CCF") ;
d’autre
Serial.println ("CCF a définir l’heure système") ;
}
void loop()
{
tandis que (j’ai < 5)
{
digitalClockDisplay() ;
Delay(1000) ;
i = i + 1 ;
}
LCD.Clear() ;
LCD.backlight() ;
lcd.setCursor(0,0) ;
LCD.Print ("compte à rebours lancé!") ;
Delay(1000) ;
pour (int i = 150 ; j’ai > 10; i = i-1)
{
buttonState = digitalRead(buttonPin) ;
lcd.setCursor(8,2) ;
printDigits(i-1) ;
if(i < 100)
lcd.setCursor(2,2) ;
LCD.Print(' ') ;
ton (9, 4500, 80) ;
digitalWrite (led1, HIGH) ;
retard (i / 2) ;
digitalWrite (led1, faible) ;
retard (i / 2) ;
Si (buttonState == faible)
{
LCD.Clear() ;
LCD.Print ("Good Job!") ;
rupture ;
}
}
lcd.setCursor(0,1) ;
LCD.Print(0) ;
pour (int i = 0; i < 30; i ++)
{
digitalWrite (led1, HIGH) ;
ton (9,5000, 50) ;
Delay(50) ;
digitalWrite (led1, faible) ;
Delay(25) ;
LCD.Clear() ;
lcd.setCursor(0,0) ;
LCD.Print("Sorry") ;
Delay(25) ;
digitalWrite (led2, HIGH) ;
Delay(25) ;
digitalWrite (led2, faible) ;
Delay(25) ;
lcd.setCursor(5,1) ;
LCD.Print("Sorry") ;
Delay(25) ;
digitalWrite (DEL3, HIGH) ;
Delay(25) ;
digitalWrite (DEL3, faible) ;
Delay(25) ;
lcd.setCursor(10,2) ;
LCD.Print("Sorry") ;
Delay(25) ;
digitalWrite (led4, HIGH) ;
Delay(25) ;
digitalWrite (led4, faible) ;
Delay(25) ;
lcd.setCursor(15,3) ;
LCD.Print("Sorry") ;
Delay(25) ;
digitalWrite (DEL5, HIGH) ;
Delay(25) ;
digitalWrite (DEL5, faible) ;
Delay(25) ;
lcd.setCursor(15,0) ;
LCD.Print("Sorry") ;
Delay(25) ;
digitalWrite (led6, HIGH) ;
Delay(25) ;
digitalWrite (led6, faible) ;
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() {}
affichage de l’horloge numérique du temps
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 chiffres) {}
fonction d’utilité pour l’affichage de l’horloge numérique : tirages précédents du côlon et menant 0
if(digits < 10)
LCD.Print('0') ;
LCD.Print(digits) ;
}