Schritt 3: Software Überlegungen
Ich wird nicht bieten voll skizzieren hier weil, Erstens, es wurde für bestimmte benutzerdefinierte Hardware entwickelt und so mit Ihrem Gerät funktioniert nicht und zweitens, weil es kein Hexenwerk drin gibt – die grundlegende RGB-Uhr ist ziemlich einfach zu (Bitte zögern tun, Fragen zu stellen, wenn Sie Probleme haben). Allerdings gibt es einige Überlegungen erwähnenswert.
(1) RGB richtig zu tun.
Die RGB-Uhr zeigt Zeit durch nur grundlegende Farben – rot, grün und Blau mischen. Wenn man bedenkt, dass jede Grundfarbe angetrieben wird durch eine eigene Daten-Kanal die Möglichkeit, dieses Programm scheint ziemlich einfach – nur Rotweine für Stunden, dann grün und blau für entsprechende Minuten einzuschalten. Farbmischung wird durch LEDs selbst erfolgen. Ganz einfach, oder?
Falsch!
Während diese Lösung ausgezeichnet von Programmierung Sicht ist es nicht sieht so gut, wenn visuelle Ästhetik und Stromverbrauch angesehen werden. Eine RGB-LED ist im Wesentlichen drei LEDs in einem Paket. Dies bedeutet, dass wenn rot angezeigt wird, nur eine LED funktioniert. Schaltet sie auf gelb, zwei LEDs eingeschaltet sind, und mit weißen leuchten alle drei. So gelb ist zwei Mal heller als jede Grundfarbe und weiße ist drei Mal heller. Das sieht nicht wirklich gut aus (und das ist einer der Gründe, HSV Modell sollte nie mit LEDs verwendet werden, aber das ist eine andere Geschichte für einen zukünftigen Artikel) und es wird zu viel Strom – in der Tat, wenn alle 15 LEDs weiß (bei 05:30) sind das Gerät verbraucht 900mA und sogar von einem USB-Anschluss funktioniert nicht (500 mA).
Der andere Grund, warum müsst ihr "Hand-die Farben Pick" kann es, was die Tatsache, dass LEDs keine Farbe kalibriert und verschiedenen Trauben in der Weise variieren sie dieselbe Farben ausgegeben. Es ist eine gute Idee zu tun einige Farbkalibrierung von hand, um die genaue Farbtöne zu erhalten möchten, obwohl Sie scheinbar einfachen 7 Farben beschäftigen.
Jedenfalls ist es besser, jede LED einzeln mit sorgfältig ausgearbeiteten Werte aktivieren. In meiner Skizze, die ich zuerst berechnen, welche Farben müssen auf und schreiben Sie es in ein kleines Array von Bytes (mit drei am weitesten rechts liegenden Bits verwendet), dann senden Sie die vorbereitete Werte zu den LEDs entsprechend. Hier werden Code-Schnipsel:
Byte-Zubereitung:
für (k = 0;
k < 15; k ++) disp15 [k] = 0; Deaktivieren Sie alle bytes
für (k = 1; k < 6; k ++)
{
Wenn ((hour%6) >(k-1)) {disp15 [k-1] = B100; disp15 [k + 4] = B100; disp15 [k + 9] = B100;};
}
Wenn (Minute < 16) für (k = 0; k
anderes
Wenn (Minute < 31)
{für (k = 0; k < 16; k ++) disp15 [k] | = B010;
für (k = 0; k <(minute-15); k ++) disp15 [k] | = B001;}
anderes
Wenn (Minute < 46)
{für (k = 0; k < 16; k ++) disp15 [k] | = B001;
für (k=(minute-30); k < 15; k ++) disp15 [k] | = B010;}
für andere (k=(minute-45); k < 15; k ++) disp15 [k] | = B001;
LED einschalten:
for ( k=0; k<15; k++){ switch (disp15[k]) { case B000: setRGBpoint(k, 0, 0, 0); break; case B100: setRGBpoint(k, 3600, 0, 0); break; case B010: setRGBpoint(k, 0, 3000, 0); break; case B001: setRGBpoint(k, 0, 0, 3600); break; case B110: setRGBpoint(k, 1800, 1200, 0); break; case B011: setRGBpoint(k, 0, 2000, 1500); break; case B101: setRGBpoint(k, 1900, 0, 1700); break; case B111: setRGBpoint(k, 1200, 1000, 1000); break; } }
(2) die Uhr
Verwenden Sie nicht die Bibliothek Time.h. Während es die Zeit aus dem externen RTC-Chip bekommen kann, ist es mit unnötigen Dingen überfüllte: es verwandelt Ihre Arduino in eine Uhr auch Essen, Ressourcen und Speicher (etwa 5 Kb es in der Tat!). Einfach bekommen Sie die benötigten Funktionen aus ihm heraus zu und nur wire.h Bibliothek.
Das sind die geretteten Funktionen, die Sie benötigen:
byte bcdToDec(byte val){ return ( (val/16*10) + (val%16) ); }
byte decToBcd(byte val) { return ((val/10*16) + (val%10)); }
void getTime () { Wire.beginTransmission(0x68); Wire.write(byte(0)); Wire.endTransmission(); Wire.requestFrom(0x68, 3); second = bcdToDec (Wire.read()); minute = bcdToDec (Wire.read()); hour = bcdToDec(Wire.read())%12; //12 hour time }
void setTime() { Wire.beginTransmission(0x68); Wire.write(byte(0)); Wire.write(decToBcd(second)); Wire.write(decToBcd(minute)); Wire.write(decToBcd(hour)); Wire.write(byte(0)); Wire.endTransmission(); }
Vergessen Sie nicht, #include und Wire.begin(); im setup() und Sekunde, Minute und Stunde Variablen deklarieren.
(3) eine Schaltfläche
Es wird empfohlen, eine Schaltfläche hinzufügen, um die RGB-Uhr: Es kann für Clock Setup oder Visualisierung Modusänderungen nützlich sein, wenn Sie mehr als eine haben. In meinem Projekt dient die Schaltfläche "Modi ändern (kurze Press), Einrichtung (lange Press, 1 Sekunde) und Helligkeit Setup (noch längere Press, 2 Sekunden). Es gibt auch eine Orientierung-Setup (Auswahl, welche Seite der Uhr auf der Unterseite) – durch zwei kurze Pressen, gefolgt von einem langen eingeschaltet ist. Um die Sache einfacher können Sie erwägen, mehr als eine Taste.
Dies führt zu einer Frage der Kombination von Zeitvisualisierung mit warten auf einen Knopf drückt. Die richtige Programmierung Antwort (die Schaltfläche einen Interrupt zuweisen) ist wiederum nicht unbedingt richtig, in unserem Fall. Was passiert, wenn Sie lesen einige Sensor – zum Beispiel ein Fotowiderstand – um das Gerät Verhalten ändern möchten? Was passiert, wenn Sie das Gerät mit einer IR-Fernbedienung steuern möchten?
Dies ist nicht eng mit bestimmten einfaches RGB Uhr Projekt dieser instructable ich kurz werden. Die Visualisierung Routinen in meinen Projekten sind nicht geloopt an sich selbst: sie nur eine Anzeige einrichten und dann wieder Kontrolle in den wichtigsten loop()-Zyklus, die Sachen wie Check-Tasten oder Sensoren oder irgendetwas anderes, dann Schleifen, und ruft die Visualisierung wieder. Ich benutze eine globale Variable ModeCounter behalten Sie den Überblick der aktuellen Visualisierung Position für animierte Modi (es ist im Grunde das gleiche wie for(,,,), aber ohne die geschlossene Schleife). Die Details sind wirklich die Angelegenheit für einen anderen Artikel, hoffe, dieser kleine Ausschnitt wird helfen (und wieder, fühlen Sie sich frei, Fragen zu stellen).