WS2812b Tiny Spiegel Uhr

Hallo,
ich versuche mir grade eine Spiegel Uhr mit einer WS2812B und Tiny RTC zu bauen.

Leider funktioniert die Farbzuweisung nicht richtig, ich hoffe ihr könnt mir da weiter helfen.

Der Sketch ist eigentlich Anfänger geeignet lach

Sollte nicht eigentlich in dem Bereich die Farben bestimmt werden?

EEPROM.write(0,255); // Seconds Colour - R-G-B - White
EEPROM.write(1,255);
EEPROM.write(2,255);
EEPROM.write(3,255); // Minutes Colour - R-G-B - Red
EEPROM.write(4,0);
EEPROM.write(5,0);
EEPROM.write(6,0); // Hours Colour - R-G-B - Green
EEPROM.write(7,255);
EEPROM.write(8,0);
EEPROM.write(9,0); // BG Colour - R-G-B - Black
EEPROM.write(10,0);
EEPROM.write(11,0);

Habe die schon geändert, leider ohne Erfolg.

Ich beschränke mich mal auf die Minuten:

CRGB leds[NUM_LEDS],minutes,hours,seconds,l,bg,lines;
RTC_DS1307 rtc;
SerialCommand sCmd;
boolean missed=0, ledState = 1, lastsec=1, multieffects = 0;
byte lastsecond, rain;
int light_low, light_high;
DateTime now;

void setup() {
Wire.begin();
rtc.begin();
rtc.adjust(DateTime(F(DATE), F(TIME)));

Serial.begin(115200);
FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
currentPalette = PartyColors_p;
// currentPalette = RainbowColors_p;
currentBlending = LINEARBLEND;
if (EEPROM.read(99) != 1){ // Check if colours have been set or not
EEPROM.write(0,255); // Seconds Colour - R-G-B - White
EEPROM.write(1,255);
EEPROM.write(2,255);
EEPROM.write(3,255); // Minutes Colour - R-G-B - Red
EEPROM.write(4,255);
EEPROM.write(5,0);
EEPROM.write(6,0); // Hours Colour - R-G-B - Green
EEPROM.write(7,255);
EEPROM.write(8,0);
EEPROM.write(9,0); // BG Colour - R-G-B - Black
EEPROM.write(10,0);
EEPROM.write(11,0);
EEPROM.write(12, 0); // Light sensitivity - low
EEPROM.write(13, 55); // Light sensitivity - high
EEPROM.write(14, 15); // Minutes for each rainbow
EEPROM.write(99,1);
}
// Else read the parameters from the EEPROM
else {
seconds.r = EEPROM.read(0);
seconds.g = EEPROM.read(1);
seconds.b = EEPROM.read(2);
minutes.r = EEPROM.read(3);
minutes.g = EEPROM.read(4);
minutes.b = EEPROM.read(5);
hours.r = EEPROM.read(6);
hours.g = EEPROM.read(7);
hours.b = EEPROM.read(8);
bg.r = EEPROM.read(9);
bg.g = EEPROM.read(10);
bg.b = EEPROM.read(11);
light_low = EEPROM.read(12);
light_high = EEPROM.read(13);
rain = EEPROM.read(14);
}

// ********** Setup the serial commands

sCmd.addCommand(“MULTI”, set_multi);
sCmd.addCommand(“STAT”, clockstatus);
sCmd.addCommand(“SETRAIN”, set_rainbow);
sCmd.addCommand(“HOUR”, set_hour);
sCmd.addCommand(“MIN”, set_minute);
sCmd.addCommand(“SEC”, set_second);
sCmd.addCommand(“BG”, set_bg);
sCmd.addCommand(“LIGHT”, set_light);
sCmd.addCommand(“RAINBOW”, effects);
sCmd.addCommand(“TIME”, set_time);
// sCmd.addCommand(“SETPARA”, set_para);
sCmd.addCommand(“MISSED”, missedCall);
sCmd.addCommand(“MISSEDOFF”, missedOff);
sCmd.addCommand(“RAINBOW”, effects);
sCmd.addCommand(“MISSED”, missedCall);
sCmd.addCommand(“MISSEDOFF”, missedOff);
sCmd.addDefaultHandler(effects);

void set_minute(){
minutes.r = atoi(sCmd.next());
minutes.g = atoi(sCmd.next());
minutes.b = atoi(sCmd.next());
EEPROM.write(3,minutes.r);
EEPROM.write(4,minutes.g);
EEPROM.write(5,minutes.b);
Serial.println(“MINUTE COLOUR SET”);
}

Der Sketch kommt von http://www.instructables.com/id/Infinity-Mirror-Clock/

Hallo,
wäre nicht schlecht, wenn Du für Deinen SketchSchnipsel CodeTag´s (Editor </>) nutzen würdes.
Kannst Du denn Text in verschiedenen Farben darstellen?
Was nützen uns Minuten, wenn sich der Fehler vielleicht schon vorher eingeschlichen hat?
Gruß und Spaß
Andreas

ak79:
Leider funktioniert die Farbzuweisung nicht richtig, …

Wenn die Farben vertauscht sind, kannst Du die Reihenfolge der Buchstaben im Parameter “GRB” ändern.

FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);

Das Bibliotheksbeispiel RGBCalibrate.ino hilft dabei, die richtige Reihenfolge zu finden.

ak79:
Habe die schon geändert, leider ohne Erfolg.

Wenn schon mal was ins EEPROM geschrieben wurde, mußt Du den markierten Wert verändern:

if (EEPROM.read(99) != 1){ // Check if colours have been set or not

EEPROM.write(99,1);

Was machst Du mit der EEPROM?

Hast du mal ein beispielhaftes Bild der Uhr?

staivoup:
Hast du mal ein beispielhaftes Bild der Uhr?

Am Ende von #0 ist ein Link, da gibt es auch Bilder.

Sehr schön. Vielen Dank.

Hallo,
ich arbeite mit dem Arduino IDE 1.8.1. Farben?? Ne glaube das geht da nicht.

Ne, ein Bild habe ich leider nicht.

Ich beschreibe das ganze mal, die scheint auch eigentlich richtig zu funktionieren.

Die vollen Stunden sind Blau.
for (byte i = 0; i < 60; i += 5) {
leds = CRGB(0, 0, 50);

  • }*
    links / rechts da neben grün
    void set_hour() {
  • hours.r = atoi(sCmd.next());*
  • hours.g = atoi(sCmd.next());*
  • hours.b = atoi(sCmd.next());*
  • EEPROM.write(6, hours.r);*
  • EEPROM.write(7, hours.g);*
  • EEPROM.write(8, hours.b);*
  • Serial.println(“HOUR COLOUR SET”);*
    }
    siehe oben grün
    Minute rot Sekunde weiß, so weit richtig! Nur wenn ich das ändere leider ohne Effekt.
    Müsste er denn EEprom nicht bei jedem beschreiben durch den IDE ändern?!
    Den kompletten Sketch gibt es auf https://raw.githubusercontent.com/dushyantahuja/Smart-Infinity-Mirror/master/Infinity_Mirror_v1/Infinity_Mirror_v1.ino
    Ich habe nix außer die "“BLEND” gegen “LINEARBLEND” erstezt und den DATA Pin geändert.
    Leider bin ich nur Informationselektroniker ( Anfänger ). Also bitte ruhig und Anfängergerecht.

ak79:
Leider bin ich nur Informationselektroniker ( Anfänger ). Also bitte ruhig und Anfängergerecht.

Wow den Beruf gibts noch?! :slight_smile:

Scherheinz:
Wow den Beruf gibts noch?! :slight_smile:

Ne, manchmal glaube ich auch den gab es nie g Nennt irgendwie jeder anders. So kennt den kaum wer.

Das stimmt, hatte das auch mal gelernt, Fachrichtung Gerät- und Systemtechnik. Bin dann aber doch in die Industrie abgewandert... :slight_smile:

ak79:
Müsste er denn EEprom nicht bei jedem beschreiben durch den IDE ändern?!

Nein, da steckt Dein gedanklicher Fehler.

Das hatte ich in #2 am Ende versucht, deutlich zu machen. Ein unbeschriebenes EEPROM enthält 0xFF. Dann wird es beschrieben und in Adresse 99 steht dann 0x01, auch nach dem Ausschalten. Wenn das da steht, wird nicht erneut geschrieben.

Wenn Du die Abfrage nun auf 0x02 änderst, werden die neuen Daten ins EEPROM geschrieben.

Ob das Nutzen des EEPROMs sinnvoll ist, wäre noch eine eigene Frage.

Welche Hardware nutzt Du? Ich verwende einen Nano mit APA102 und IR-Fernbedienung. Meine LEDs leuchten allerdings nach außen.

Hallo,
tut mir leid viel um die Ohren.

Ich werde das mal testen.

Die Nachtabschaltung hast du da:

LEDS.setBrightness(constrain(light_low,0,100));
fill_solid(leds, NUM_LEDS, bg);
if(now.hour() < 6) LEDS.setBrightness(constrain(light_low,0,100)); // Set brightness to light_low during night - cools down LEDs and power supplies.

if(now.houer()<6

einfach mal auf <0 ändern dann lief sie bei mir auch nachts.