Étape 3: Arduino Code
Temps
Adafruit_GFX
Adafruit_PCD8544
Le code a été fortement inspiré par la Maker Faire Bay Area à rebours de MaceTech, grâce auquel vous pouvez également obtenir le dernière ChronoDot. Le fichier .ino est attaché (Arduino 1.0 requis) et le raw code est ci-dessous.
Dans cet exemple, la date d’abandon du tabac est 1er avril 2012. En réalité, la date d’abandon du tabac est 14 avril 2012, mais c’est dans le futur. La meilleure façon de tester cela est au fil de tout, mais tester les composants individuels (ChronoDot, LCD) avec leur code d’exemple avant d’essayer de tout mettre ensemble.
/*
Minuterie de succès sans fumée
À l’aide d’un ChronoDot et un écran LCD Nokia 5110.
Bibliothèque, bibliothèques de Adafruit PCD, RTC et fils requis.
Le but de cette esquisse est de montrer un nouveau non-fumeur
Combien de temps ils ont été sans cigarettes en jours et
heures et un nombre sans cesse croissant du montant de
argent économisé en ne fumant.
Une grande partie du code a été inspirée par la Maker Faire Bay
Postée le compte à rebours zone
http://macetech.com/blog/node/115
Avril 2012, Daniel Gentleman, thoughtfix.com
*/
#include < Wire.h >
#include < Time.h >
#include < DS1307RTC.h > / / DS3231/ChronoDot fonctionne comme DS1307
Trucs de LCD :
#include < Adafruit_GFX.h >
#include < Adafruit_PCD8544.h >
Affichage de Adafruit_PCD8544 = Adafruit_PCD8544 (7, 6, 5, 4, 3) ;
Broche 7 - horloge série out (SCLK)
goupille 6 - données sérielles (DIN)
broche 5 - données/commande select (D/C)
broche 4 - puce LCD sélectionnez (CS)
broche 3 - LCD reset (RST)
Définition des variables :
time_t, arrêter de fumer ; Date et heure de la dernière fumée
time_t difftime ; différence entre les temps actuels et de renoncement au tabac
int diff_seconds ;
int diff_minutes ;
int diff_hours ;
int diff_days ;
float PackCost = 6.50 ; Coût par paquet. US $6,50
float PackDay = 1,5 ; Fréquence du tabagisme. 1,5 paquets/jour
float MinutesQuit ;
float CostPerHour ;
float CashSaved ;
Initialiser le CCF et l’écran LCD
void setup() {}
Serial.Begin(9600) ; Set de baud à 9600
Display.Begin() ;
display.setContrast(40) ;
display.clearDisplay() ;
Display.Display() ;
setSyncProvider(RTC.get) ; la valeur sync pour utiliser le ChronoDot
setSyncInterval(10) ; Synchroniser toutes les 10 secondes si possible
vérifier si la synchronisation a travaillé
if(timeStatus()! = timeSet)
Serial.println ("Impossible de synchroniser avec le CCF") ;
d’autre
Serial.println ("CCF a définir l’heure système") ;
tmElements_t quit_elements ; Tableau d’éléments à ce jour de cesser de fumer.
Minuit, le 1er avril 2012
quit_elements. Deuxième = 0 ;
quit_elements. Minute = 0 ;
quit_elements. Heure = 0 ;
quit_elements. WDAY = 7 ;
quit_elements. Jour = 1 ;
quit_elements. Mois = 4 ;
quit_elements. Année = 2012-1970 ;
quitter = makeTime(quit_elements) ; Timestamp UNIX quit date/heure
Delay(1000) ;
}
systime time_t ; détient à l’heure actuelle pour calcul diff
void loop() {}
Si (systime! = now()) {/ / attendre une seconde nouvelle de faire quelque chose
systime = now() ;
difftime = systime - arrêter de fumer ; soustraire de cesser de fumer dès l’heure actuelle
diff_seconds = difftime % 60 ; Obtenez secondes
difftime / = 60 ; convertir en minutes
diff_minutes = difftime % 60 ; obtenir des minutes
difftime / = 60 ; convertir en heures
diff_hours = difftime % 24 ; Obtenez heures
difftime / = 24 ; convertir en jours
diff_days = difftime ; Téléchargez jours
}
DisplayTime() ;
Delay(1000) ;
display.clearDisplay() ;
}
modification de routine de l’exemple de la bibliothèque
void DisplayTime() {}
MinutesQuit = ((systime-quit)/60) ;
CashSaved = ((PackCost * PackDay * MinutesQuit) / 1440) ;
Tout d’abord, l’écran LCD
display.setTextSize(1) ;
display.setTextColor(BLACK) ;
display.setCursor(0,0) ;
Display.Print(diff_days) ;
Display.Print ("d") ;
Display.Print(diff_hours) ;
Display.Print(":") ;
if(diff_minutes < 10)
Display.Print('0') ;
Display.Print(diff_minutes) ;
Display.Print(":") ;
if(diff_seconds < 10)
Display.Print('0') ;
Display.Print(diff_seconds) ;
display.setCursor(0,10) ;
Display.println ("sans fumée!") ;
display.setCursor(0,30) ;
Display.Print("$") ;
Display.Print(CashSaved) ;
Display.println ("sauvegardé") ;
Display.Display() ;
En option : série
Serial.Print(diff_days) ;
Serial.Print ("d") ;
Serial.Print(diff_hours) ;
Serial.Print(":") ;
if(diff_minutes < 10)
Serial.Print('0') ;
Serial.Print(diff_minutes) ;
Serial.Print(":") ;
if(diff_seconds < 10)
Serial.Print('0') ;
Serial.Print(diff_seconds) ;
Serial.println ("sans fumée!") ;
}