Mynta-stora framgång mätaren (sluta röka!) med Arduino (3 / 8 steg)

Steg 3: Arduino kod



Det finns tre ytterligare bibliotek som krävs för att få detta Spring:
Tid
Adafruit_GFX
Adafruit_PCD8544

Koden var starkt inspirerad av Maker Faire Bay Area countdown tidtagare av MaceTech, genom vilka du kan också få de senaste ChronoDot. Den .ino filen är bifogad (Arduino 1,0 krävs) och rå koden är nedan.

I det här exemplet är avsluta April 1, 2012. Avsluta datum är 14 April 2012 i verkligheten, men det är i framtiden. Det bästa sättet att testa detta är att koppla upp allt, men testa de enskilda komponenterna (ChronoDot, LCD) med deras exempelkod innan du försöker sätta ihop det hela.

/*
Rökfri framgång timer
Med hjälp av en ChronoDot och en Nokia 5110 LCD.

Tid biblioteket, Adafruit PCD bibliotek, RTC och tråd krävs.

Syftet med denna skiss är att visa en ny icke-rökare
Hur länge de har varit utan cigaretter i dagar och
timmar och ett ständigt växande antal mängden
pengar som kan sparas genom att inte röka.

Mycket av koden var inspirerad av Maker Faire Bay
Område nedräkningsklockan postat på
http://macetech.com/blog/Node/115

April 2012, Daniel Gentleman, thoughtfix.com
*/

#include < Wire.h >
#include < Time.h >
#include < DS1307RTC.h > / / DS3231/ChronoDot fungerar som DS1307

LCD grejer:
#include < Adafruit_GFX.h >
#include < Adafruit_PCD8544.h >

Adafruit_PCD8544 display = Adafruit_PCD8544 (7, 6, 5, 4, 3);

stift 7 - seriell klocka ut (SCLK)
stift 6 - seriell data ut (DIN)
stift 5 - Data/kommandot Välj (D/C)
stift 4 - LCD chip Välj (CS)
stift 3 - LCD reset (RST)

Ställa in variabler:
tid avsluta; Dag och tid för senaste röken
tid difftime; skillnaden mellan nuvarande och sluta tid
int diff_seconds;
int diff_minutes;
int diff_hours;
int diff_days;
flyta PackCost = 6,50; Kostnad per pack. US $6,50
flyta PackDay = 1,5; Rökning frekvens. 1.5 förpackningar/dag
float MinutesQuit;
float CostPerHour;
float CashSaved;

Initiera RTC och LCD
void setup() {
Serial.BEGIN(9600); Ange baud till 9600
display.BEGIN();
display.setContrast(40);
display.clearDisplay();
display.display();
setSyncProvider(RTC.get); ställa in synkronisering till att använda ChronoDot
setSyncInterval(10); Synkronisera var 10 sekunder om möjligt

Kontrollera om sync arbetat
IF(timeStatus()! = tidInställning)
Serial.println ("kan inte synkronisera med RTC");
annat
Serial.println ("RTC har angett systemtiden");

tmElements_t quit_elements; element array till datum för att sluta röka.

Midnatt den 1 April, 2012
quit_elements. För det andra = 0;
quit_elements. Minut = 0;
quit_elements. Timme = 0;
quit_elements. WDAY = 7.
quit_elements. Dag = 1;
quit_elements. Månad = 4;
quit_elements. År = 2012-1970;
avsluta = makeTime(quit_elements); Unix-tidsstämpel avsluta datum/tid
Delay(1000);
}
tid systime; innehar aktuell tid för diff beräkning

void loop() {

om (systime! = now()) {/ / vänta på nya andra att göra något
systime = now();
difftime = systime - avsluta; subtrahera avsluta tid från aktuell tid
diff_seconds = difftime % 60. få sekunder
difftime = 60. konvertera till minuter
diff_minutes = difftime % 60. få minuter
difftime = 60. konvertera till timmar
diff_hours = difftime % 24. få timmar
difftime = 24. konvertera till dagar
diff_days = difftime; få dagar
}
DisplayTime();
Delay(1000);
display.clearDisplay();
}

modifierade rutin från Time Library exempel
void DisplayTime() {
MinutesQuit = ((systime-quit)/60);
CashSaved = ((PackCost * PackDay * MinutesQuit) / 1440);
Första, 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 ("rök fri!");
display.setCursor(0,30);
display.Print("$");
display.Print(CashSaved);
display.println ("sparade");
display.display();
Valfritt: seriell
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 ("rök fri!");
}

Se Steg
Relaterade Ämnen

Hur jag mata kamelior med stor framgång

Åh kamelior, hur prålig din blom är! Jag var en trädgårdsdesigner och professionell trädgårdsmästare i San Francisco Bay-området i många år. Kamelior är mycket populära växter det och jag tog över många konton med chlorotic och sjuklig ser buskar. Ja...

Styra en stor linjära ställdon med Arduino

Denna Arduino linjära ställdon handledning visar hur man gör grundläggande manuell kontroll av en stor linjära ställdon med hjälp av en Arduino och två knappar. I den första uppsättningen av koden, den första knappen utökar manöverdonet och den andra...

Stor, auto dim, rum klocka (med arduino och WS2811)

Första Hej instructables.Detta är min första kontakt med:InstructablesArduinoenProgrammerbara lysdioderSå du inte trow stenar på mig för noobish misstag.Att hålla det i åtanke jag väntar att läsa dina kommentarer med riv intresse och jag är öppen för...

Inbrottslarm i ett mynt bank kanin med Arduino

Denna handledning är presenteras av ALP elektroniska InnovationVår mynt bank Rabbit utrustad med ultraljud avstånd.Ladda ner vår gratis Arduino projektkod här.Steg 1: Förbered alla komponenter Krav:HC-SR04 Ultrasonic Sensor4N35 OptocouplerArduino Uno...

Hemma termostat med Arduino och stora LCD

Ersätta en vanlig termostat (SIEMENS-RAA30 16GR) med en self made, arduino-baserad, stor LCD-skärm är ett roligt projekt.DISCLAIMER: Elnätet används båda styra ugnen och för arduino power så du inte går vidare om du inte är bekväm att arbeta med näts...

Mynt samlare med Arduino och bearbetning

Mynt insamlare "CH-926 mynt insamlare" tillverkades av företaget mynt Selector och kan konfigureras för att känna igen upp till tre olika mynt.Efter konfigurationen returnerar mynt insamlare vissa förkonfigurerade pulsvärden för varje mynt typer...

El, vatten och centralvärme mätaren avläsning använder Arduino, WR703N router och Linux webbkameror

filer beskriva hur man gå mot smarta hem och göra avläsning system för energi och vattenmätare.-Optisk sensor läsa ut El meter disk. Fungerar bra. Live på http://barbara320.gotdns.com:8083 /-Webcam föreställande varmvatten mätare. LCD-skärmkontrasten...

Göra stora skala horn för mindre än $10 med aluminium folie & silvertejp

ett super enkelt och super billiga sätt göra imponerande, storskaliga horn för din Halloween, cosplay eller andra tillbehör behöver. Ingen rörig papier-maché, lim eller carving verktyg behövs!...

Stora iPod Inline Remote för användning med någon huvud telefoner/örat knoppar

vi har alla sett den instructables som ta ett befintligt nyckelpar med örat knoppar med i linje med remote och hacka dem med 1/8"-uttag så att du kan använda din favorit uppsättning hörlurar samtidigt som mikrofon och fjärrkontroll. Även om det är en...

Stor jul Wall Decor gjorde med Arduino

Flera dagar sedan, jag drömde att mitt hus blivit "en värld av is och snö", som ser riktigt härlig och vacker. Santa driver hans rådjur längs isiga vägen som byggs av hjorthorn av jul EIK, ger bort hans presenter. Det finns färgglada road tecken...

Enkel strömförsörjning

jag slår vad om några av er hade samma problem. Jag arbetade på denna krets på bakbord och jag upptäckte jag inte har medel att driva denna krets. Batterier är för dyra för att testa en krets. Till slut kunde jag bygga litet nätaggregat som löste mit...

Arduino-baserad blå ruta (telefon Phreaking)

Historia och historiaPå 1950-talet, 1960-talet, 1970-talet 1980-talet och ända upp till 1990-talet telefon phreaking var en himla cool sätt att utforska en okänd värld av telefonen byter nätverk. Till "phreak" en telefonväxel, kan göras med hjäl...

Intro till modell flygplan Autopilot!

Hi All!Jag är tjugo år gammal. Jag plockade upp min arduino för första gången i jul, och jag har hållit upptagen på min arduino program så att jag kan ge dig detta instructable. Jag hoppas att det hjälper!Syftet med detta projekt var att bygga en spr...

Hur man gör en Mini båge och pilar

såg detta på Pintrest: http://almostunschoolers.blogspot.com/search/label/craft%20projects?updated-max=2010-11-27T14%3A36%3A00-08%3A00&max-results=20 (scrolla ner mot botten). För mig var det en bra idé för Cub Scouts, särskilt för Pack möte. Min son...

Upcycle metall mat burkar i förvaringskärl

jag fick nyligen ett nytt hantverk område, och jag har arbete att göra det ganska och funktionella. Lägg till detta en katt som älskar att äta någon form av tråd eller filt kvar ute i fria, och jag verkligen behövde några anständiga lagring och snabb...

Raspberry Samba fil serverprogramvara

Samba Inledning:I 1991 australiska Mr ville Andrew Tridgell tillåta DOS-maskiner och UNIX maskin att dela filer. För att uppnå detta skrev han SMB-protokollet programvaran på UNIX-system. Efter en period var det officiellt bytt namn Samba. Samba var...

"Jag ser ljuset" lampskärm

Detta är ett roligt projekt som är lätt att göra men kan ta lite tid. Det är perfekt för dig och dina vänner att göra under ett par veckor och den slutliga produkten är fantastiskt! Det är den perfekta båten för Tangled/Rapunzel eller Disney fans! Ja...

Montera en Super Mario Brothers mynt blocket lampa

uppdatering: ett antal åtgärder har förändrats, sedan vi har börjat att få professionellt producerade kretskort och screentryck designen på insidan av rutan. Alla gamla bilder är fortfarande här i referenssyfte.Ah, mynt den klassiska Super Mario bloc...

Bygga en stor själv vattna trädgården & växthusgaser från återanvända material

Detta instructable visar hur jag byggde en mångsidig och låg underhåll ovan mark trädgård & växthus. Denna trädgård planter själv vattning, fukt reglering, själv fyllning, själv skyddade och bärbara (med hjälp eller utrustning). Även om inte helt gra...