Stap 3: Arduino Code
Tijd
Adafruit_GFX
Adafruit_PCD8544
De code is sterk geïnspireerd op de Maker Faire Bay Area countdown-timer door MaceTech, door wie kan je ook de nieuwste ChronoDot. Het Ino bestand is bijgevoegd (Arduino 1.0 vereist) en de raw code is hieronder.
In dit voorbeeld is de quit datum 1 April 2012. In werkelijkheid, de quit datum is 14 April 2012, maar dat is in de toekomst. De beste manier om dit te testen is aan kabellengte tot alles, maar de afzonderlijke onderdelen (ChronoDot, LCD) testen met hun voorbeeldcode voordat je probeert om het allemaal samen.
/*
Rook-vrij succes timer
Met behulp van een ChronoDot en een Nokia 5110 LCD.
Tijd library, Adafruit PCD Bibliotheken, RTC en draad nodig.
Het doel van deze schets is om te laten zien van een nieuwe niet-roker
Hoe lang ze geweest zonder sigaretten in dagen en
uren en een voortdurend groeiend aantal de hoeveelheid
geld bespaard door niet roken.
Veel van de code werd geïnspireerd door de Maker Faire baai
Gebied countdown klok geplaatst op
http://macetech.com/blog/node/115
April 2012, Daniel Gentleman, thoughtfix.com
*/
#include < Wire.h >
#include < Time.h >
#include < DS1307RTC.h > / / DS3231/ChronoDot werkt als DS1307
LCD spullen:
#include < Adafruit_GFX.h >
#include < Adafruit_PCD8544.h >
Adafruit_PCD8544 display = Adafruit_PCD8544 (7, 6, 5, 4, 3);
pin 7 - seriële klok uit (SCLK)
pin 6 - seriële gegevens uit (DIN)
pin 5 - opdracht/gegevens selecteren (D/C)
pin 4 - LCD chip select (CS)
pin 3 - LCD reset (RST)
De variabelen van de instelling:
time_t stoppen; Dag/tijd van de laatste rook
time_t difftime; verschil tussen huidige en af te sluiten
int diff_seconds;
int diff_minutes;
int diff_hours;
int diff_days;
zweven PackCost = 6,50; Kosten per pack. US $6,50
zweven PackDay = 1.5; Rookvrije frequentie. 1.5 packs/dag
float MinutesQuit;
float CostPerHour;
float CashSaved;
Initialiseren van RTC en LCD
VOID Setup {}
Serial.begin(9600); set baud tot 9600
display.begin();
display.setContrast(40);
display.clearDisplay();
display.display();
setSyncProvider(RTC.get); sync te gebruiken de ChronoDot instellen
setSyncInterval(10); elke 10 seconden indien mogelijk synchroniseren
Controleer of sync werkte
if(timeStatus()! = timeSet)
Serial.println ("Unable to sync met de RTC");
anders
Serial.println ("RTC heeft de systeemtijd instellen");
tmElements_t quit_elements; de matrix van de elementen aan de datum van stoppen met roken.
Middernacht op 1 April 2012
quit_elements. Tweede = 0;
quit_elements. Minuten = 0;
quit_elements. Uur = 0;
quit_elements. Wdag = 7;
quit_elements. Dag = 1;
quit_elements. Maand = 4;
quit_elements. Jaar = 2012-1970;
stoppen = makeTime(quit_elements); UNIX timestamp stoppen datum/tijd
delay(1000);
}
time_t systime; huidige tijd voor diff berekening houdt
void loop {}
Als (systime! = now()) {/ / wait voor nieuwe tweede om iets te doen
systime = now();
difftime = systime - stoppen; aftrekken afsluiten tijd van de huidige tijd
diff_seconds = difftime % 60; krijgen seconds
difftime / = 60; converteren naar minuten
diff_minutes = difftime % 60; Ontvang minuten
difftime / = 60; omzetten in uren
diff_hours = difftime % 24; uren krijgen
difftime / = 24; omzetten in dagen
diff_days = difftime; dagen te krijgen
}
DisplayTime();
delay(1000);
display.clearDisplay();
}
routine van Time Library voorbeeld gewijzigd
VOID DisplayTime() {}
MinutesQuit = ((systime-quit)/60);
CashSaved = ((PackCost * PackDay * MinutesQuit) / 1440);
Ten eerste, het LCD-scherm
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 ("rook vrij!");
display.setCursor(0,30);
display.Print("$");
display.Print(CashSaved);
display.println ("opgeslagen");
display.display();
Optioneel: seriële
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 ("rook vrij!");
}