-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathadvent_calendar.ino
85 lines (58 loc) · 3.15 KB
/
advent_calendar.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/**************************************************************************
* *
NeoPixel / WS2812b Adventskalender
created by Tim! / 54696d21
rev 1 10.12.2017
* *
**************************************************************************/
// benötigte Bibilotheken
#include <ESP8266WiFi.h> //standard library
#include <TimeLib.h> //TimeLib.h by Paul Stoffregen
#include <Wire.h> //I2C
#include <NTPClient.h> //NTP Zeit
#include <WiFiUdp.h> //Netzwerkprotokoll für NTP
#include <Adafruit_NeoPixel.h> //LED-Treiber
#define LED_INPUT_DATA D1 //Datenpin leds
#define BRIGHTNESS 10 // Helligkeit
#define PIXELS 24 //Anzahl der Leds
WiFiUDP ntpUDP; //Protokoll für NTP auf UDP festlegen
NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 3600, 20000); //festlegen der NTP-Einstellungen
const char *ssid = "**********************"; //WLAN daten zum stellen der Uhr via NTP
const char *password = "**********************";
Adafruit_NeoPixel leds = Adafruit_NeoPixel(PIXELS, LED_INPUT_DATA, NEO_GRB + NEO_KHZ800); // led treiber definitionen
void setup () {
WiFi.begin(ssid, password); //aufbauen der WLAN-Verbindung
Serial.begin(115200); //Serielle Schnittstelle initialisieren zur Textausgabe
Wire.begin(); // I2C initialisieren
pinMode(LED_INPUT_DATA, OUTPUT); //festlegen des Datenpins der NeoPixel
leds.begin(); //leds initialisieren
leds.setBrightness(BRIGHTNESS); // leds auf oben definierten Hellgikeitswert setzen
}
void loop () {
timeClient.update(); //Zeitverwaltung via NTP
setTime(timeClient.getEpochTime()); //NTP-Zeit übergeben, zur verwaltung in einem human-readable-format
Serial.print("Tag im Monat: ");
Serial.println(day());
for(int i=0;i<=(day()-1);i++){ //leds pixelweise einschalten bis jeweiliger Tag erreicht ist
Serial.print("loop hochzählen: ");
Serial.println(i); //ausgabe der nummer der aktuellen led
leds.setPixelColor(i, leds.Color(150,0,0)); // reines rot.
leds.show(); //der zuletzt auf leds geschriebene zustand wird angezeigt
delay(300); //Wartezeit der Animation
}
leds.show(); //anzeigen bei austritt aus der schleife (sollte nicht notwendig sein)
Serial.print("Zeige aktuellen Tag im Monat: ");
Serial.println(day()); //ausgabe des tages im monat
Serial.println("Warte...");
delay(5000); //zeitdauer in der alle leds des jeweiligen tages an sind
for(int l=(day()-1); l>=0 ;l--){ //day-1, denn die NeoPixelbeginnen bei 0; leds gehen nacheinander aus, ausgehend von tagesmaxium bis zur 0
Serial.print("loop runterzählen: ");
Serial.println(l); //ausgabe des tages im monat
leds.setPixelColor(l, leds.Color(0,0,0)); //Schwarzwert
leds.show(); //der zuletzt auf leds geschriebene zustand wird angezeigt
delay(300); //Dauer der Animation
}
leds.show(); //anzeigen bei austritt aus der schleife (sollte nicht notwendig sein)
Serial.println("Warte...");
delay(1000); //zeitdauer in der alle leds aus sind
}