DIESE ANLEITUNG IST FÜR DEN ARDUINO
Lichtzeitpegel :
Diese Uhr zeigt die Uhrzeit 19:33:43
→ http://playground.arduino.cc/code/time
→ https://github.com/adafruit/LPD8806
Beide Bibliotheken lassen sich mit Arduino IDE 1.8.3. installieren.
Zusammenführen der Codes aus den Bibliotheken :
#include "LPD8806.h" //Hier wird der Treiber des LED-Strip eingebunden. #include "SPI.h" //Hier wird die SPI-Funkion eingebunden, diese wird zum Ansprechen des LED-Streifens nötig. SPI-Pins des Arduino werden benötigt. #ifdef __AVR_ATtiny85__ // Dies ist ein AVR Microcontroller von Atmel zum Steuern der SPI-Ports #include <avr/power.h> #endif //alternative zur geschlossenen geschweiften Klammer int nLEDs = 45; // Nummer der Leds die sich im Streifen befinden. Die erste LED ist 0. Also betreiben wir 46 LEDs // SPI Pins des Arduino, die genutzt werden. int dataPin = 2; //Hier wird jeder Bit hingesendet int clockPin = 3; //Dieser Pin schaltet zum richtigen Wert (int) um sobald der DatenPin eingestellt ist. // Hier werden dem LPD Strip Parameter übergeben. // Erster Parameter ist für die Anzahl der LED`s im Streifen. // Der Zweite ist für den Daten Pin der genutzt wird. // Der Dritte ist für den Clock Pin der genutzt wird. LPD8806 strip = LPD8806(nLEDs, dataPin, clockPin);
Diesen Code Abschnitt nutzen wir aus LPD8806 und passen ihn auf unsere LED-Streifen an. Die Kommentare sind von uns geschrieben.
#include <Time.h> //Für die Uhrzeit nutzen wir die Bibliothek von Time #include <TimeLib.h> #define TIME_HEADER "T" // Header tag für den seriellen Monitor. Hier gibt man später die Unixzeit an. #define TIME_REQUEST 7 // ASCII bell character requests a time sync message -- Hier wird im seriellen Monitor die Zeit angezeigt.
Hier wird time.h eingebunden.
void setup() { Serial.begin(9600); // 9600 steht für die Übertragungsgeschwindigkeit while (!Serial) ; // Needed for Leonardo only pinMode(13, OUTPUT); //Dieser Pin auf dem Arduino leuchtet, wenn der Code läuft. setSyncProvider( requestSync); //Bei älteren Arduino Versionen konnte man über Prozessing die Uhrzeit des PC`s mit dem Arduino synchronisieren. Serial.println("Waiting for sync message"); //Diese Aussage erscheint im seriellen Monitor, wenn die Uhrzeit noch nicht synchonisiert ist. //Setup zum Anschalten des LED-Strip #if defined(__AVR_ATtiny85__) && (F_CPU == 16000000L) clock_prescale_set(clock_div_1); // Hier wird die Geschwindigkeit auf 16MHZ für die LED-Kette gesetzt. #endif strip.begin(); //Dieser Code startet den LED-Streifen. strip.show(); //Dieser Befehl updated den LED-Streifen. Beim Start sind alle LED`s aus. }
So sollte euer void setup() aussehen wenn ihr das Setup aus LPD8806 und das aus time.h zusammengefügt habt.
void loop(){ if (Serial.available()) { //Wenn die serielle Schnittstelle zwischen PC und Arduino gesetzt ist, kann der Code hier die Uhrzeit vom PC abgreifen, dass geht bei unserem Arduino nicht. processSyncMessage(); } if (timeStatus()!= timeNotSet) { //Wenn die Uhrzeit nicht über die serielle Schnittstelle eingebunden wird, soll dieser Befehl den seriellen Monitor öffnen. digitalClockDisplay(); //Dieser zeigt den Uhrzeitendisplay an. Dort kann man die Unix-Zeit per T Nummer oben im Header eingeben. Dann beginnt die Zeit zu laufen. ledanzeige(); //Hier starten wir schon unseren LED-Anzeige. Da alle 5 Minuten ein [] vor der Uhrzeit im seriellen Monitor erscheint.(Grund noch unbekannt) und die Uhrzeit sonst nicht angezeigt wird. } if (timeStatus() == timeSet) { //Wenn die Uhrzeit gesetzt ist, soll nun die LED-Anzeige gestartet werden. ledanzeige(); } delay(1000); //Jede Sekunde wird diese Schleife wiederholt. }
Void loop haben wir so geschrieben. Damit dies auch läuft braucht ihr natürlich folgende Methoden aus time.h :
ledanzeige() haben wir selbst geschrieben.
void ledanzeige(){ int s; //s steht für Sekunde und ist ein Integer. int s1; //s1 steht für alle Sekunden von 1-9 und ist ein Integer. int m; // m steht für die Minuten und ist ein Integer. int m1; // m1 steht für alle Minuten von 1-9 und ist ein Integer. int h1; // h1 steht für alle Stunden von 1-9 und ist ein Integer. int h; // h steht für Stunde und ist ein Integer. h1=hour() %10; // h1 ist gleich der Methode hour Modulo (Rest): % bsp: 12%10 = 2. So können nacher LEDs für Stunde 1-9 angezeigt werden und auch 11-19. h=hour(); // h ist gleich der Methode hour. m1=minute() %10; //m1 ist gleich minute() %10. So können nacher LEDs für Minute 1-9 angezeigt werden auch wenn gerade Minute = 39 ist können die 9 Minuten berechnet und angezeigt werden. m=minute(); //m ist gleich der Methode minute. s1=second() %10; //s1 ist gleich second%10. So können nacher LEDs für Sekunde 1-9 angezeigt werden auch wenn gerade Sekunde = 39 ist können die 9 Sekunden berechnet und angezeigt werden. s=second(); //s ist gleich der Methode second.
Hier haben wir einige Integer eingebunden und definiert, die wir im Laufe unserer Methode nutzen.
//*************************************SekundenAnzeige**************************************************************** // Hier werden die Sekunden der Uhrenanzeige eingestellt. // oneSecond = {0,1,2,3,4,5,6,7,8} hier habe ich alle LED Nummern aufgezählt die für 1ner Sekunden gedacht sind. if(s1>=1){ //wenn s1 größer oder gleich 1 ist soll die LED mit der Nummer 0 eingeschaltet werden und gelb leuchten. strip.setPixelColor(0, 255, 204, 0); //Gelb strip.show(); // Mit strip.show() wird der LED-Streifen aktualisiert. } if(s1>=2){ //wenn s1 größer oder gleich 2 ist soll die LED mit der Nummer 1 eingeschaltet werden und gelb leuchten. strip.setPixelColor(1, 255, 204, 0); //Gelb strip.show(); } if(s1>=3){ //wenn s1 größer oder gleich 3 ist soll die LED mit der Nummer 2 eingeschaltet werden und gelb leuchten. strip.setPixelColor(2, 255, 204, 0); //Gelb strip.show(); } if(s1>=4){ //wenn s1 größer oder gleich 4 ist soll die LED mit der Nummer 3 eingeschaltet werden und gelb leuchten. strip.setPixelColor(3, 255, 204, 0); //Gelb strip.show(); } if(s1>=5){ //wenn s1 größer oder gleich 5 ist soll die LED mit der Nummer 4 eingeschaltet werden und gelb leuchten. strip.setPixelColor(4, 255, 204, 0); //Gelb strip.show(); } if(s1>=6){ //wenn s1 größer oder gleich 6 ist soll die LED mit der Nummer 5 eingeschaltet werden und gelb leuchten. strip.setPixelColor(5, 255, 204, 0); //Gelb strip.show(); } if(s1>=7){ //wenn s1 größer oder gleich 7 ist soll die LED mit der Nummer 6 eingeschaltet werden und gelb leuchten. strip.setPixelColor(6, 255, 204, 0); //Gelb strip.show(); } if(s1>=8){ //wenn s1 größer oder gleich 8 ist soll die LED mit der Nummer 7 eingeschaltet werden und gelb leuchten. strip.setPixelColor(7, 255, 204, 0); //Gelb strip.show(); } if(s1>=9){ //wenn s1 größer oder gleich 9 ist soll die LED mit der Nummer 8 eingeschaltet werden und gelb leuchten. strip.setPixelColor(8, 255, 204, 0); //Gelb strip.show(); } // Hier werden alle LED`s ausgeschaltet wenn s1 gleich 0 ist. Die Zahl 60 wird auf einer digital Uhr nicht angezeigt, also wird bei 0 ausgeschaltet. Denn 60 sekunden sind gleich 1Minute 00 Sekunden. if(s1==0){ strip.setPixelColor(0, 0, 0, 0); //LED Nummer 0 wird ausgeschaltet. strip.setPixelColor(1, 0, 0, 0); strip.setPixelColor(2, 0, 0, 0); strip.setPixelColor(3, 0, 0, 0); strip.setPixelColor(4, 0, 0, 0); strip.setPixelColor(5, 0, 0, 0); strip.setPixelColor(6, 0, 0, 0); strip.setPixelColor(7, 0, 0, 0); strip.setPixelColor(8, 0, 0, 0); strip.show(); }
Hier seht ihr ein Beispiel mit dem ihr zum Beispiel die Sekunden anschalten könnt und nach 10 Sekunden die LEDs für Sekunde abgeschaltet werden. Viel Spaß beim Rest selber basteln.
— Philida Amas Igharo 2017/06/27 16:20 — Mara van Stiphoudt 2017/06/27 16:20