Pages: [1]   Go Down
Author Topic: Wortuhr Zeitumstellung (Arduino Due)  (Read 954 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Arduino Forum.

Ich bin ziemlich neu im Forum und brauche eure Hilfe zu einem Projekt.
Ich arbeite seit einiger Zeit an einem Nachbau einer "Wortuhr" die ich mit einem Arduino Due ansteuren möchte.
Ich habe dazu ein ziemlich simples Programm dafür geschrieben.
Die Uhr funktioniert seit einigen Tagen einwandfrei und sehr präzise doch ich weiss leider nicht wie ich sie dazu bringe, die Zeit umzustellen.

Das ganze funktioniert mit der Schedulerfunktion mit der ich 2 Schleifen (In meinem Fall sind es loop2 und loop3) gleichzeitig laufen lasse. Die erste Schleife beinhaltet die 4 Eck-LED`s die die einzelnen Minuten anzeigen. Die andere Schleife ändert im 5 minuten takt die anzuzeigenden Wörter.

Nun meine Frage:
Gibt es eine Möglichkeit 1 Button zu integrieren mit der ich beispielsweise loop3 unterbrechen kann und an einer anderen Stelle innerhalb der Schleife weiterlaufen lassen kann? Soquasi den Code für eine Stunde zu überspringen?

Habe schon verschiedene Youtube- Tutorials angeschaut und das Arduino Tutorial durchgelesen doch irgendwie komme ich einfach nicht weiter.


Ich bedanke mich herzlich im Voraus für jeden Tipp.

Hier noch ein Teil meines Codes:

#include <Scheduler.h>
 

 Scheduler.startLoop(loop2);
  Scheduler.startLoop(loop3);

                 //Dieser Teil zeigt die Minuten an (Eck LED`s)
void loop2() {
   digitalWrite(erstemin, LOW);
  digitalWrite(zweitemin,LOW);
  digitalWrite(drittemin,LOW);
  digitalWrite(viertemin,LOW); 
  delay(60000);               
  digitalWrite(erstemin, HIGH); 
  delay(60000);
  digitalWrite(zweitemin,HIGH);
  delay(60000);
  digitalWrite(drittemin,HIGH);
  delay(60000);
  digitalWrite(viertemin,HIGH);
  delay(60000);
  digitalWrite(erstemin,LOW);
  digitalWrite(zweitemin,LOW);
  digitalWrite(drittemin,LOW);
  digitalWrite(viertemin,LOW);
}
 void loop3() {                           // Hier startet dann die erste Stunde
digitalWrite(esist,HIGH);
 digitalWrite(zwoelf, HIGH);
 digitalWrite(uhr,HIGH);
  delay(300000);
 digitalWrite(uhr,LOW);
digitalWrite(fuenf2,HIGH);
digitalWrite(nach,HIGH);   
  delay(300000);
digitalWrite(fuenf2,LOW);
digitalWrite(zehn2,HIGH);
delay(300000);
digitalWrite(zehn2,LOW);
digitalWrite(viertel,HIGH);
delay(300000);
digitalWrite(viertel,LOW);
digitalWrite(zwanzig,HIGH);
delay(300000);
digitalWrite(zwanzig,LOW);
digitalWrite(nach,LOW);
digitalWrite(zwoelf,LOW);
digitalWrite(fuenf2,HIGH);
digitalWrite(vor,HIGH);
digitalWrite(halb,HIGH);
digitalWrite(eins,HIGH);
delay(300000);
digitalWrite(fuenf2,LOW);
digitalWrite(vor,LOW);
delay(300000);
digitalWrite(fuenf2,HIGH);
digitalWrite(nach,HIGH);
delay(300000);
digitalWrite(fuenf2,LOW);
digitalWrite(nach,LOW);
digitalWrite(halb,LOW);
digitalWrite(vor,HIGH);
digitalWrite(zwanzig,HIGH);
delay(300000);
digitalWrite(zwanzig,LOW);
digitalWrite(viertel,HIGH);
delay(300000);
digitalWrite(viertel,LOW);
digitalWrite(zehn2,HIGH);
delay(300000);
digitalWrite(zehn2,LOW);
digitalWrite(fuenf2,HIGH);
delay(300000);
digitalWrite(fuenf2,LOW);
digitalWrite(vor,LOW);
digitalWrite(uhr,HIGH);
delay(300000);
                      // Hier die 2te Stunde
digitalWrite(uhr,LOW);
digitalWrite(fuenf2,HIGH);
digitalWrite(nach,HIGH);   
  delay(300000);
digitalWrite(fuenf2,LOW);
digitalWrite(zehn2,HIGH);
delay(300000);
digitalWrite(zehn2,LOW);
digitalWrite(viertel,HIGH);
delay(300000);
digitalWrite(viertel,LOW);
digitalWrite(zwanzig,HIGH);
delay(300000);
digitalWrite(zwanzig,LOW);
digitalWrite(nach,LOW);
digitalWrite(eins,LOW);
digitalWrite(fuenf2,HIGH);
digitalWrite(vor,HIGH);
digitalWrite(halb,HIGH);
digitalWrite(zwei,HIGH);
delay(300000);
digitalWrite(fuenf2,LOW);
digitalWrite(vor,LOW);
delay(300000);
digitalWrite(fuenf2,HIGH);
digitalWrite(nach,HIGH);
delay(300000);
digitalWrite(fuenf2,LOW);
digitalWrite(nach,LOW);
digitalWrite(halb,LOW);
digitalWrite(vor,HIGH);
digitalWrite(zwanzig,HIGH);
delay(300000);
digitalWrite(zwanzig,LOW);
digitalWrite(viertel,HIGH);
delay(300000);
digitalWrite(viertel,LOW);
digitalWrite(zehn2,HIGH);
delay(300000);
digitalWrite(zehn2,LOW);
digitalWrite(fuenf2,HIGH);
delay(300000);
digitalWrite(fuenf2,LOW);
digitalWrite(vor,LOW);
digitalWrite(uhr,HIGH);
delay(300000);
Logged

Germany
Offline Offline
Edison Member
*
Karma: 48
Posts: 2337
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Der arme Due wird bald das Zeitliche segnen, verstorben an akuter Langeweile. smiley-wink
Wir hatten hier im Forum neulich einen Vergleich, da hieß es in etwa so: "Das ist, als würdest du mit dem 7,5-Gönner Brötchen holen fahren." Du setzt noch einen oben drauf und fliegst gleich mit dem Jumbojet... smiley-grin

Wie auch immer, die Benutzung von delays sind kontraproduktiv: Zum einen sind sie nur so genau wie der Referenztakt, zum anderen blockieren sie den Programmablauf. Die Nutzung der Scheduler-Library ist dann nur der Versuch, einen ungünstigen Programmieransatz auszubügeln.

Noch was: Bitte immer den Code in die entsprechenden Code-Tags setzen.
Logged

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Wien
Offline Offline
Edison Member
*
Karma: 28
Posts: 1923
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hi,

kontraproduktiv deshalb, weil Du knöpfe drücken kannst, soviele Du willst. Du wirst praktisch immer grade in einer der 300000 mS-phasen sein und dann ist dem arduino das wurst. schau mal bei Examples>Blinkwithoutdelay nach und bau Deinen code um, vorher macht das keinen sinn.

gruß stefan
Logged

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 270
Posts: 21850
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wie hast Du die LED angesteuert?

Wieso verwendest Du keinen RTC-Baustein und dann einen DCF77 Empfänger oder einen UKW Radio-Empfänger mit RDS? Mit beiden kannst Du den RTC synchronisieren und hast eine hochgenaue Zeitanzeige mit automatischer Umschaltung zur Sommerzeit.

Grüße Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke für die schnellen hilfreichen Tipps.

Ich hatte es mir schon gedacht, dass das Programm grundlegend anderst geschrieben werden muss:) funktioniert fürs erste jedoch auch so ganz gut smiley

Werde mich demnächst ans neue Programm rantasten.

Das "taktgefühl" hat der Due übrigens gut im Griff... Hatte zeitgleich eine Stoppuhr laufen lassen. Nach 20 Tagen war die Abweichung kleiner als 0.1 Sekunden. Das sind weniger als 2 Sekunden aufs Jahr.

Für jeden weiteren Tip bin ich natürlich sehr dankbar.



maestro_dom

Logged

Germany
Offline Offline
Full Member
***
Karma: 10
Posts: 230
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke für die schnellen hilfreichen Tipps.

Ich hatte es mir schon gedacht, dass das Programm grundlegend anderst geschrieben werden muss:) funktioniert fürs erste jedoch auch so ganz gut smiley

Werde mich demnächst ans neue Programm rantasten.

Das "taktgefühl" hat der Due übrigens gut im Griff... Hatte zeitgleich eine Stoppuhr laufen lassen. Nach 20 Tagen war die Abweichung kleiner als 0.1 Sekunden. Das sind weniger als 2 Sekunden aufs Jahr.

Für jeden weiteren Tip bin ich natürlich sehr dankbar.

maestro_dom

Also ich habe mal die Wortuhr von hier http://www.mathias-wilhelm.de/arduino/projects/text-clock/ auf den Arduino portiert rödelt auf nen TFT vor sich hin. Sketch füge ich mal an. RTC lib findest du hier https://github.com/MarkusLange/Arduino-Due-RTC-Library. Habe das ganze aber auch mal auf ein LCD gewuchtet neben ein paar anderen Anzeigen, hänge ich auch mal an.

Grundsätzlich hat sth77 recht der Due hat dabei langeweile und viel zu viel Speicher übrig ein AtMega328P reicht da völlig.

Markus

* Text_Clock_om_Due.ino (9.47 KB - downloaded 4 times.)
* DCF_Uhr_fuer_Rainer_final_mit_Sensor_for_Board.ino (14.41 KB - downloaded 4 times.)
Logged

0
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3495
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

20 Tage und dann nur 0.1s Abweichung??? Das wären 57 ppb. Das erreicht man in der Regel nur mit sehr teurem Meßequipment. Hast Du Deine Uhr mal mit einer Funkuhr verglichen?
Logged

Check out my experiments http://blog.blinkenlight.net

AREA COLOGNE
Offline Offline
Edison Member
*
Karma: 21
Posts: 1141
I am 1 of 10 who understands binary
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wie sieht es aus mit der Wortuhr weitere Erfolge?
Ich habe vor einem halben Jahr eine Wortuhr mit hilfe von Microcontoller.net (Frontplatte) gebaut.Die Hardware ist mit zwei MAX7221 über SPI (LED Array 10*11) Als die haupt CPU ist eine Arduino Nano und eine RTC DS1308 und ein Pushbutton mit OneButton Bedienung  (>750ms is Moduswechsel >10ms und <700ms ist +1).
Kann gerne mal den Sketch on stellen wennn Bedarf da.
Logged

So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vielleicht gerade weil ihm "so langweilig" war, war er so genau mit der Zeit. Ich hatte eine Stoppuhr aus der Schule mit integrierter Funkuhr benutzt. Ich nehme an, diese ist schon ziemlich genau da Sie letztes Jahr bei Skirennveranstaltungen gebraucht wurde.

Leider bin ich nicht mehr dazu gekommen das Programm umzuschreibem. Bin neulich auf ein Link gestossen bei dem auf 70 Seiten Schritt-für-schritt der Aufbau einer Wortuhr erklärt wird, inklusiv Sketch. Allerdings wurde der Arduino durch ein RBBB ersetzt.

Wen ich ihn nochmals finde, poste ich ihn hier.


MFG maestro_dom


Logged

Pages: [1]   Go Up
Jump to: