Solen, Arduino powered design väggklocka (4 / 6 steg)
Steg 4: kod
Nu kan du ladda skissen till Arduino. You´Re också kunna koppla LED band nu. Don´t ansluta modulen BT! Vi vill först ta en titt på koden, du bör veta där du kan justera flera saker...
Hämta Arduino IDE och på bibliotek.
Arduino IDE, AdafruitNeoPixel, tid, DS1307RTC
Installera IDE och sätta bibliotek i mappen bibliotek.
Öppna den bifogade INO filen och ladda upp den till din arduino. Koden som beskrivs här är den samma men med ytterligare kommentarer! Om du gjort allt rätt, kan du nu se "bootanimation". Det är möjligt att ställa in tiden över serialmonitor. Skriv bara t.ex. (10:33).
Känn dig fri att spela med koden...
Här ge sjuk er en kort beskrivning av koden (Setup utan RTC!)
DEFINITIONER:
#define PIN 6 //Hour LED Strip
#define MINPINEN 5 //Singelminute LED
#define NUMPIXELS 12 //Number pixlar i timme
#define MINNUMPIXELS 4 //Number pixlar för minut
#define BAUDVÄRDE 115200 / / Baudrate, ska matcha baudvärde för BT modul
#define utch ' //start BYTE av TimeSync
int tidInställning = 0; flagga för att lagra om tiden sattes efter uppstart
int delayval = 20; fördröjning för blekning animation
int clocktimer = 10000; dags uppdatera
int timebright = 250; ljusstyrkan på timme Strip
int mtimebright = 50; ljusstyrka på singelmin
int initiera = 0; flagga för att anropa funktionen clearpixels efter uppstart
int timmes;
int oldahour = 0; lagra prev. timme
int aminute;
int oldamin = 0; lagrar den tidigare minuten för uppdatering
int aandra;
int aday;
int bland;
int nen;
int mmin;
tmElements_t tm;
Installationsprogrammet för de 2 NeoPixel LED-arrayer (namn = typ (numrera av PIXLAR som PIN, FORMAT RGB eller GRB, FREQ); Se Adafruit guide för mer information.
Adafruit_NeoPixel pixlar = Adafruit_NeoPixel (NUMPIXELS, stift, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel minpixels = Adafruit_NeoPixel (MINNUMPIXELS, MINPINEN, NEO_RGB + NEO_KHZ800);
SETUP:
void setup() {
Serial.BEGIN(BAUDRATE);
Wire.BEGIN();
Initialice band, alla OFF
pixels.BEGIN();
minpixels.BEGIN();
pixels.show();
minpixels.show();
Göra en liten animation
Serial.println("Sunrise");
Sunrise();
Delay(1000);
Serial.println("Sunset");
Sunset();
pixels.show();
Serial.println("ready");
}
SLINGA:
void loop() {
Kontrollera om timesync
medan (Serial.available() > 0) {
char c = Serial.read();
IF(c == utch) //if finns en @ på linjen, läsa de kommande byte / ints
{
readtime();
}
}
initialice lysdioder, tydlig boot animation
IF(Initialize == 0) {
clearpixels();
initiera = 1;
}
timmes = hour();
aminute = minute();
om (tidInställning == 1 || tidInställning == 0) / / här kan du kontrollera om tiden var inställt, kan du stoppa programmet här om tidInställning = FALSE, bara ta bort "|| tidInställning == 0"!
{
om (oldamin < aminute || oldahour < timmes) //check om tiden har ändrats. SANT = refresh -> Ställ in alla av, Visa ny tid
{
clearpixels();
ClockDisplay();
}
}
}
Visa klockan:
void ClockDisplay()
{
oldahour = timmes;
oldamin = aminute;
int xhour, xmin;
om (timmes > = 12) {
xhour = timmes-12. Vi har bara 12 lysdioder för 24h visning
}
annat {
xhour = timmes;
}
skala det i 5min steg
xMin = (aminute / 5);
IF(oldamin < aminute)
{
oldamin = aminute;
clearpixels();
}
ta resten av divisionen dor singelmin LED
mmin = (aminute % 5); modulooperatorn t.ex. 24% 5 = 4! mycket användbart:-P
pixels.setBrightness(timebright);
pixels.setPixelColor (xmin, bildpunkter. Color(5,125,255)); Du kan ändra färgerna här! leka!
pixels.setPixelColor (xhour, bildpunkter. Color(255,50,0));
pixels.show();
Visa singel mins
för (int m = 0; m
minpixels.setBrightness(mtimebright);
minpixels.setPixelColor (m, pixlar. Color(255,255,0));
minpixels.show();
}
}
Läs och bearbeta TIMEinformation från Serial
void readtime() / / om vi redan fått ledande "behandla kommande uppgifter och lagring av tidpunkten för den tid Lib
{
timmes = Serial.parseInt();
aminute = Serial.parseInt();
aandra = Serial.parseInt();
aday = Serial.parseInt();
bland = Serial.parseInt();
nen = Serial.parseInt();
Serial.println("TIMESET");
Serial.Print(ahour);
Serial.Print(":");
Serial.println(aminute);
setTime(ahour,aminute,asecond,aday,amonth,ayear);
}
Rensa alla!
void clearpixels() / / set varje enskild PIXEL off om du vill uppdatera datavisningen
{
pixels.BEGIN();
minpixels.BEGIN();
för (int i=0;ipixels.setPixelColor (i, pixlar. Color(0,0,0));
minpixels.setPixelColor (i, pixlar. Color(0,0,0));
pixels.show();
minpixels.show();
}
}