"OK att vakna" klocka för ditt barn (8 / 10 steg)
Steg 8: Kodning staterna i sömn och vaken
Om du lider av sömnbrist på grund av de dåliga nätterna, bära med mig, vi är nästan där och sömn kommer din väg! Detta är nästan det sista hindret att ta. Det viktigaste verktyget för detta steg är kaffe.
Om du vill tänkare med logik eller vill lägga till olika knappar och du inte ännu är det fimiliar med Arduino att du är confidend att beställa delar, föreslår jag att du spela lite med designen på 123d kretsar av Autodesk. Jag ingår ett förslag här nedan för att starta från projektet. Observera att detta förslag inte ingår RTC för tidtagning eftersom 123d miljön stöder det. En trevlig funktion är den emulering som det ger, så du kan spela lite med knappar.
Tillbaka till programmering. Det allmänna konceptet är ett loop()
uttalande som lyssnar på RTC och tryckknapparna varje sekund. Om RTC returnerar en tidsstämpel som motsvarar till läggdags eller morgonen tid kan ändra vi tillståndet. Om tryckknappen för en tupplur skjuts, vi också ändra tillståndet och få luggen motsvarande längd från potentiometern.
Länka alla sensorer och bibliotek och ställa in parametrar: Denna skiss kräver en hel del parametrar för att hålla reda på tid och påstår av lampor, knappar... Ett tips är att hålla reda på pin-koder och dubbelkontroll dem när något inte fungerar korrekt.
bibliotek
#include < Servo.h >
#include < Wire.h >
#include "RTClib.h"
PIN-koder
CONST int potentioPin = 0; analoga A0 pin
CONST int napPin = 3; Digital pin
CONST int lightPin = 4; Digital pin
CONST int servoPin = 8; Digital pin
CONST int dagsljus = 9. Digital pin
CONST int nattlampan = 10; Digital pin
sömn och timer inställningar
sömn och timer inställningar
RTC_DS1307 RTC; RTC datum
DateTime tid; tid föremål för RT
CONST int wake_h = 7. CONST int wake_m = 0; dags att stiga upp
CONST int sleep_h = 19. CONST int sleep_m = 30. dags att gå till sängs
variabler för en tupplur
int napState = 0; tillståndet för knappen
int napBusy = 0; int att indikera om systemet är i nap stat
int napSec = 1800; längd för nap i sekunder
DateTime endNap; tid objekt håller den beräknad sluttiden för nap
variabler för ljusförhållandena
int lightState = 0; delstaten på LED-knappen
int lightsOn = 1; int att indikera om lamporna är på eller av.
variabler för elementet servo, fastställa dessa samtidigt att bygga mekanismen
Servo myservo;
int awakePos = 72.
int sleepPos = 154;
Initieras signalerna som knappar och kommunikation: Digital stiften på Arduino måste få veta om de är ingång eller utgång ska fungera korrekt.
void setup() {
Serial.BEGIN(57600); justerade boud skattesatsen för RTC
Wire.BEGIN();
RTC.begin();
pinMode (napPin, indata); initiera input stiften
pinMode (lightPin, ingång); initiera input stiften
pinMode (dagsljus, produktionen); initiera utgångsstift
pinMode (nattlampa, produktionen); initiera utgångsstift
myservo.attach(servoPin); initiera utgångsstift
}
Starta kontinuerlig slinga: Denna del synes lätt genom användning av hjälpfunktioner. Först läser och anger det lätta tillståndet, andra kontrollerar om NAP-knappen trycks och den tredje en ger rätt signaler till lysdioder och servo baserat på de två föregående knapplägen och tiden.
void {
Time=RTC.Now(); få aktuell tid från RTC
lightsOn=listenToLedPin(); lyssna på LED-knappen
napBusy=listenToNapPin(time,napBusy); lyssna på NAP-knappen
setState(time,napBusy,lightsOn); Ändra ljus och servo
Delay(1000); vänta en sekund, för att undvika studsar.
}
De hjälpande funktionerna: För definitionen av de hjälpande funktionerna, se den fullständiga koden fäst eller skiss i 123studio. Dessa hjälper funktioner består av en massa if-tester och några grundläggande signal inställning och dokumenteras fullt ut. Jag ingår också versionen av RTClib som jag använde för tiden kontroll och kommunikation med den lilla RTC.