Go Down

Topic: Neopixel Uhr - Hilfe, ich kann es nicht!  (Read 319 times) previous topic - next topic

Angelina80

Hallo!

Ich muss zugestehen, dass ich ein völlige Anfänger bin was Arduino betrifft. Ich habe aber im Netz eine sehr schöne Neopixel-Uhr Code ( Neopixel_Uhr.ino ) gefunden was ich gleich nachgebaut habe. Die Uhr funktioniert tadellos, aber ich wollte ein Effekt ( LightCrawl.ino ) was nach jeder voller Stunde aktiviert werden sollte, in den Code einbauen. Leider übertrifft das mein können. Ich probiere ziemlich lange alles Mögliche aber leider Erfolglos. Könnte jemand so nett sein, mir die zwei Code zusammen bringen?

gregorss

...
Ich probiere ziemlich lange alles Mögliche aber leider Erfolglos. Könnte jemand so nett sein, mir die zwei Code zusammen bringen?
...
Du schreibst, dass die Uhr bereits tadellos läuft. Hast Du denn auch schon einmal probiert, den LightCrawl-Sketch separat (d. h. unabhängig von der Uhr) zum Laufen zu bringen?

Gruß

Gregor
DU MUSST DEIN ÄNDERN LEBEN!

kulturbereicherer

RTC_DS1307 RTC;       :D

Bei dem Code gibt es noch einiges Verbesserungspotential


Mal ganz schlampig kannst ja bei dem da ansetzen

Serial.print(now.minute());


Wenn now.minute() = 0 dann Funktion  

theaterChase(strip.Color(127,   127,   0), 50); // Green
theaterChase(strip.Color(  0,   0, 127), 50); // Blue

ausführen.

Und wenn es nur einmal zur vollen Stunde passieren soll, machst noch eine Hilfsvariable rein

also z.B.

wenn now-minute() = 0  und schongelaufen = 0 dann Funktion


theaterChase(strip.Color(127,   127,   0), 50); // Green
theaterChase(strip.Color(  0,   0, 127), 50); // Blue
schongelaufen = 1

und damit die Hilfsvariable wieder scharf gestellt wird ein

wenn now-minute() >=1 dann schongelaufen = 0


und ganz ganz unten dann die Funktion reinkopieren


void theaterChase(uint32_t c, uint8_t wait) {
...
}



---------

kann auch sein das direktes now.minute() = 0   nicht geht weil der Wert der geliefert wird, z.B. keine Zahl ist sondern als art Buchstabe ausgegeben wird mit dem man nicht so ohne weiteres rechnen kann.

Dann machst eben ganz ganz oben ein

int meinemeinute;

und vor dem IF eben ein meineminute = now.minute()   und die IF selbst machst dann von dieser Krücke abhängig. Oder googelst nach diesen ChartoInt, AscitoInt und wie die alle so heißen.

Angelina80

Du schreibst, dass die Uhr bereits tadellos läuft. Hast Du denn auch schon einmal probiert, den LightCrawl-Sketch separat (d. h. unabhängig von der Uhr) zum Laufen zu bringen?

Gruß

Gregor
Ja , die laufen alle beide tadellos! Aber leider nicht zusammen!

Gruß

Angelina

HotSystems

Ich muss zugestehen, dass ich ein völlige Anfänger bin was Arduino betrifft.
Und dann nimmst du dir gleich solch ein Projekt vor ?

Warum lernst du nicht erst Grundlagen und versuchst es dann ?

P.S.
Damit alle deinen Sketch lesen können:

Setze den bitte in Code-Tags.

Verwende dazu die Schaltfläche </> oben links im Editorfenster.
Das kannst du auch nachträglich machen.
Dazu den Sketch markieren und die Schaltfläche klicken.


Damit wird dieser für alle lesbar, auch an mobilen Geräten.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

postmaster-ino

Hi

Wenn ich Das richtig sehe, muß doch nur die Funktion aus LightCrawl in den anderen Code kopiert werden.
Die benötigten Variablen müssen natürlich auch mit.

Ein reines C&P düfte an doppelt vorhandenen setup() und loop() scheitern - DAS sollte man aber, spätestens mit den Fehlermeldungen der IDE, heraus bekommen und lösen können.

MfG

kulturbereicherer

Wenn Glück hast, geht es, sonst eben nicht. Hab keine DS1307 hier und auch keine von den den Ring-RGB Pixel.

Grob erklärt: Beim Setup wird die Stundenzeit in einer Variablen gespeichert die einmalig auch Altestundenzeit wird.

Im Loop wird ständig die Stundenzeit geholt und wenn die ungleich der altenstundenzeit ist, wird das unterprogramm ausgelöst und die variable altestundenzeit wird mit jetztstundenzeit gleichgesetzt.


Und bevor da wieder jemand jammert wegen Code ist nicht im Text, der lese das da



The message has the following error or errors that must be corrected before continuing:
    The message exceeds the maximum allowed length (9000 characters).




postmaster-ino

Hi

Und ich wollte gerade schon schrieben, daß doch alle Stunde eine Funktion aufgerufen wird, womit mir das Problem doch nicht klar zu seien scheint - wo kommen wir denn hier hin, wenn Jeder einfach so einen kompletten Sketch hier rein stellt ;)

Code: [Select]
  jetztstunde = now.hour();

  if (jetztstunde != altstunde)
  {
    // Send a theater pixel chase in...
    // theaterChase(strip.Color(127, 127, 127), 50); // White
    theaterChase(strip.Color(127,   127,   0), 50); // Green
    theaterChase(strip.Color(  0,   0, 127), 50); // Blue
    jetztstunde = altstunde;
  }

@TO
In dieser IF-Abfrage rufst Du, statt der theaterChase-Funktion die Crawl-Funktion auf, fertsch.
An Deiner Stelle würde ich die eigentliche Crawl-Funktion ans Ende Deines jetzigen SKetch kopieren (außerhalb der loop() ) und die Funktion nur ganz vorne 'bekannt machen'.

Statt wie bei der eigentlichen Funktion, ähnlich Dem:
void funktionsname(byte variable,char variable2){
schreibst Du ganz vorne im Sketch
void funktionsname(byte variable,char variable2);
Dadurch ist dem Compiler die Funktion (und Deren Aufruf) bekannt und ganz hinten wird Diese dann auch gefunden und eingebaut.

Dann Compilieren klicken und die Fehlermeldungen analysieren - fehlende Variablen oder einen fehlerhaften Aufruf werden Dir dann angemeckert - so lange ausbessern, bis der Compiler Ruhe gibt und: Fertig.

MfG

Angelina80

Hallo kulturbereicherer

Du bist ein Engel! Dein geänderter Code klappt sehr gut! Dafür ein ganz dickes Dankeschön für Dich. Jetzt brauche ich noch ein ganz kleine Hilfe: Die Uhr kommt nicht zurück zu der Uhrzeit. Gedacht war das Ganze das bei volle Stunden einmal oder zweimal LightCrawl gezeigt wird und danach die Uhrzeit normal weiter läuft! Wie gesagt: bin halt ein sehr am Anfang mit meine Kenntnisse.
Wäre sehr nett wenn Du noch einmal mir helfen könntest!
Danke!

agmue

#9
Nov 25, 2017, 12:34 am Last Edit: Nov 25, 2017, 12:36 am by agmue
Code: [Select]
jetztstunde = altstunde;
ändern zu

Code: [Select]
altstunde = jetztstunde;

(ungetestet, da ich keine Stunde gewartet habe ;D

kulturbereicherer

Ich hab erst vor einem Jahr mit Arduino angefangen. Allereinfachste Programmierkenntnisse aus C64 und GW-Basic Zeiten. Programmieren hat mir nie spaß gemacht, in der Arduino Welt ist es anders, vielleicht weil da die Motivation durch praktischen Nutzen erheblich größer ist.

Systematisch hab ich nichts groß gelernt nur eben etwas minimalistisches um so grob zu verstehen was im Code abläuft und wie ich in etwa etwas anpassen kann damit es mir besser gefällt. Bin also auch Anfänger. Wenn alles klappt kannst überlegen ob es weiter verbessern willst... z.B. genauere Uhrzeit über das DS3231 Modul, Sommer-Winterzeit Automatik, Uhrzeit über DCF77, GPS oder Internet. Andere Darstellungsformen mit anderen Farben, Animationen, MP3 Glockenton, irgendwelche Gags zu bestimmten Feiertagen. Da gibt es viel was man da herumbasteln kann und was die Arduinowelt eigentlich so schön macht.

----------

Wenn die Uhr wie blöd die Animation anzeigt dann heißt es wohl das die Bedienung zur anzeige dieses Modus "Altzeit ungleich Jetztzeit" weiter erfüllt ist. Da hab ich als Flüchtigkeitsfehler die falsche variable mit der anderen abgeglichen. Zusätzlich passiert es gern mit diesen pseudozahlen die eher wie Buchstaben sind wo die Ziffer 1 nicht gleich Buchstabe 1 ist. Vielleicht klappt es ja jetzt mit dem richtigen Variablenabgleich + Variablenzahl mit der Hilfskrücke.

----------


agmue war schneller  :D

agmue

Ich bin gerade im Thema, da ich auch eine Uhr mit LEDs gebaut habe. Allerdings habe ich DS3231 als RTC und APA102 (DotStar) anstelle der NeoPixel verwendet, da ich auch noch eine IR-Fernbedienung verwende, um zwischen Uhr und Animation umzuschalten und die Helligkeit einzustellen.

Die Faszination, die von diesen LEDs ausgeht, ist schwer zu beschreiben. Ich freue mich auf jeden Fall, dieses Projekt bis zur Vollendung verfolgt zu haben :smiley-mr-green:

Angelina80

Hallo

Herzlichen Dank an Alle und ein besonders dicken Lob an "kulturbereicherer". Die Uhr läuft jetzt genau nach meiner Vorstellung. Vielleicht werde ich mich in die Materie doch noch reinknien!
Also besten Dank!

agmue

agmue war schneller  :D
Sorry, die grauen Zellen waren gerade warm ;D

Vielleicht werde ich mich in die Materie doch noch reinknien!
Solltest Du, macht Spaß, finde ich :)

Ich wäre noch an einem Foto der Mechanik als Anregung interessiert. LEDs nach vorne, innen oder außen, mit Spiegel, welches Material usw.

Go Up