LCD Display zur Anzeige von Dimmstand / Uhrzeit

Hallo Zusammen,

bin neu in der Arduino Welt und habe mich nun endlich zum ersten Schritt durchgekämpf (1-10V Dimmung meiner Aquariumbeleuchtung) :sweat_smile:

Ich besitze derzeit:

1x Arduino Nano
1x Breadboard
1x RTC DS1307
1x IRF540N
diverse Kabelbrücken

Anschlussplan anbei, am IRF540N sind noch die beiden Anschlüsse vom LED Netzteil dran http://www.shop-meeresaquaristik.de/images/product_images/popup_images/12616_1.jpg

Den Sketch habe ich nun soweit fertig, die RTC läuft auch einwandfrei.

Aufbau als Schaltplan anbei.

Nun meine Frage, besteht die Möglichkeit folgende Infos auf einem LCD Display darzustellen (2x 16 o.ä):
(Alternativen in Klammern)

Zeile 1: aktuelle Uhrzeit
Zeile 2: aktuelle Dimmphase (Dimmstufe / Prozent)

Hier mein Code:

#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h>

void setup()
{
  Serial.begin(9600);
  while (!Serial) ; // wait for serial
  delay(200);
  setSyncProvider(RTC.get);   // the function to get the time from the RTC
  pinMode(11, OUTPUT); //Defniert den dimmbaren Ausgang
  digitalWrite(11,LOW);
}

void loop()
{
  tmElements_t tm; //Dient als Variable
  
  if(RTC.read(tm)) //Liest immer die aktuelle Zeit aus 
  {
    
     delay(750);
    Serial.println(RTC.get());
    Serial.print(tm.Hour);
    Serial.print(":");
    Serial.print(tm.Minute);
    Serial.print(":");
    Serial.println(tm.Second);

    
    if(tm.Hour == 8 && tm.Minute == 45) /*Immer wenn if( ... == Zeit && ... == Zeit) angegeben ist könnt ihr eure eigene Wunschzeit festlegen, dafür üsst ihr nur die  Zahlen ändern.*/
    {
        dimmHochMorgens(); //Sorgt fuer ein er helles Becken um 9:15 Uhr
    }
    
    if(tm.Hour == 11 && tm.Minute == 45)
    {
         dimmRunterMittags(); //Und um 12 ist Mittagsruhe
    }
    
    if(tm.Hour == 14 && tm.Minute == 0)
    {
         dimmHochMittags(); //und um 14:15 Uhr ist es wieder hell
    }
    
    if(tm.Hour == 22 && tm.Minute == 0)
    {
         dimmRunterAbends(); //Somit ist es um 11 dunkel
    }
    
  }
}


void dimmHochMorgens()
{
   for(int i=255;i>=0;i--)
   {
     analogWrite(11,i); //Schreibt den aktuellen Wert auf den Ausgang
     Serial.print("Ich dimme Hoch morgens");
     delay(7000); /*Regelt die Schleifendauer, hierdurch bestimmt ihr wie lange es dauert bis fertig gedimmt ist. Die Zeit wird dabei in millisek angegeben. Dieser Dimmvorgang dauert somit 255*7 Sekunden. Hier könnt ihr eure eigene Wunschdauer reinschreiben, das könnt ihr bei allen delay(..) machen*/
   }
}

void dimmRunterAbends()
{
   for(int i=0;i<=255;i++)
   {
     analogWrite(11,i);
     Serial.print("Ich dimme Runter abends");
     delay(14000);
   }
}

void dimmRunterMittags()
{
   for(int i=0;i<=255;i++)
   {
     analogWrite(11,i);
     Serial.print("Ich dimme Hoch mittags");
     delay(3500);
   }
}

void dimmHochMittags()
{
   for(int i=255;i>=0;i--)
   {
     analogWrite(11,i);
     Serial.print("Ich dimme Runter mittags");
     delay(3500);
   }
}

Danke vorab für eure Infos :slight_smile:

LG
Pascal

Untitled Sketch_Steckplatine.pdf (802 KB)

Hallo,
ich sage es einmal einfach:
alles was Du über Serial.print ausgibst, das läßt sich auch auf einem
Display darstellen.

Deine Dimmstufe sollte "analogWrite(11,i);" sein?
der Wert der "Dimmung" ist also "i"
Ich würde aus dem "i" für die Zeiten:
Morgens = mo
Mittags = mi
Abends = ab
machen. analogWrite(11,mo);
Dann hast Du einen eindeutigen Wert.
Wenn Du das in "%" haben möchtest, dann nutze die "map" Funktion.
http://arduino.cc/de/pmwiki.php?n=Reference/Map
Gruß und Spaß
Andreas

Hallo Andreas,

Danke für deine schnelle Rückmeldung.

Gibt es irgendwie eine Möglichkeit diese ganzen Funktionen (und evtl weiter folgende) in einen Sketch zu packen?
Habe leider nichts genaues gefunden wie das funktionieren soll :frowning:

PS: Wenn ich die RTC einmal eingestellt habe muss ich den Sketch ja neu aufspielen (in meinem Fall den o.g) ist das richtig?

Geht der RTC nicht dann die Uhrzeit/Datum verloren?

Bin leider noch zu neu auf dem Gebiet daher die vielen Fragen :frowning:

LG
Pascal

Die RTC hat eine Batterie. Die läuft weiter egal was du auf dem Arduino machst. Das ist ja der Hauptgrund weshalb man RTCs verwendet.

Gibt es irgendwie eine Möglichkeit diese ganzen Funktionen (und evtl weiter folgende) in einen Sketch zu packen?

Natürlich. Du programmierst das und dann erscheint es auf dem Display :slight_smile:

Bei den LCD Displays gibt man die Start-Koordinate an und wenn man kann man genauso mit lcd.print(...) auch auf das Display schreiben.

Hallo,
Du hast doch schon etwas geschafft. Wie erwähnt, die Uhr läuft weiter.
Zum Display- besorge Dir gleich ein 4x20, das ist komfortabler.
Wie man so etwas anschließt steht hier:

http://arduino.cc/en/pmwiki.php?n=Tutorial/LiquidCrystal

Um etwas auf dem Display darzustellen benutzt man:
lcd.setCursor();
lcd.print();

also:
lcd.setCursor(0,0); // setzt den Cursor an die erste Stelle in der ersten Zeile

und z.B.
lcd.print(Time); // hier wird dann die Zeit geschrieben

Am Anfang der ersten Zeile steht also:
22:37:43

zur Uhr gibt es hier etwas:
http://playground.arduino.cc/Code/Time

Deinen Sketch kannst Du so weiter verwenden, tausche einfach das "Serial.print"
aus, (bei der Gelegenheit gewöhne Dir gleich "delay()" ab) dann schaust Du mal weiter.
Das, was Du da vor hast ist noch nicht schwer, das schaffst Du.
Gruß und Spaß dabei
Andreas
P.S.
Falls Du MICH nach einem Display fragst, ich nutze dieses:

http://www.conrad.de/ce/de/product/181657/LC-Display-Weiss-Blau-B-x-H-x-T-98-x-60-x-136-mm-Anag-Vision-AV2040BNBW-WJ?ref=list

Vergesse nicht, Dir einen Trimmer/Poti für den Kontrast zu besorgen.
Möchtest Du etwas anderes, frage andere.

Warum gleich ein 20x4? Finde die 16x2 persönlich viel besser. Vorteil ist, der Rahmen trägt deutlich weniger auf. Des weiteren sind diese deutlich günstiger zu bekommen. Des weiteren, gab es bei den 20x4 nicht das Problem, dass die Zeilenanordnung wie folgt ist

Zeile 1
Zeile 3
Zeile 2
Zeile 4

Ich habe hier noch 2 Stk 20x4 hier rumliegen. EInes wurde mit einem Verarbeitungsfehler in der Displayscheibe geliefert. Von den 16x2 hab ich mir vor einem Monat mal eine größere Charge geholt. 10 Stk für 12€ inkl. Versand. Jedoch ohne I2C Adapter. Diesen brauch ich idR auch nicht. Display ist immer in der Nähe von Attiny/Atmega. Wenn es aber etwas kompatker sein soll, zB wenn das Board ~20-30cm entfernt ist, dann kannste auch I2C Adapter problemlos einsetzen. Sind 16x2 und 20x4 kompatibel. Wird von der LiquidCrystal_I2C unterstützt.

Hallo,
was meinst Du mit Zeilenanordnung, die ist bei mir:
0,0
0,1
0,2
0,3
Spalte:
0,0 bis 19,0
Gruß und Spaß
Andreas

16x2 reicht für diese Anwendung locker. Es gibt aber auch Sachen bei deinen 20x4 praktisch ist. Kommt immer darauf an was man macht.

SkobyMobil:
http://www.conrad.de/ce/de/product/181657/LC-Display-Weiss-Blau-B-x-H-x-T-98-x-60-x-136-mm-Anag-Vision-AV2040BNBW-WJ?ref=list

Für den Preis bekommst du auch eines fertig mit I2C Adapter:

Wobei eBay da wesentlich billiger ist:
http://www.ebay.de/itm/2004-LCD-Display-Module-Serial-IIC-I2C-TWI-204-20X4-Character-HD44780-Controller-/281377512483?pt=Bauteile&hash=item4183681c23
http://www.ebay.de/itm/SainSmart-IIC-I2C-TWI-Serial-20x4-LCD-2004-Module-For-Arduino-UNO-MEGA2560-R3-/221248403103?pt=Wissenschaftliche_Geräte&hash=item33836eb69f
http://www.ebay.de/itm/IIC-I2C-TWI-2004-Serial-Blue-LCD-Module-For-Arduino-und-Raspberry-Pi-CP02015-J72-/281353509316?pt=Bauteile&hash=item4181f9d9c4

Versand dauert etwas wenn man nicht in DE bestellt.

Oder hier ein 16x2 + I2C:

Man kann auch Display und Adapter getrennt kaufen.

SkobyMobil:
Hallo,
was meinst Du mit Zeilenanordnung, die ist bei mir:
0,0
0,1
0,2
0,3
Spalte:
0,0 bis 19,0
Gruß und Spaß
Andreas

Ja, ich mein, dass es früher so war, dass die Zeilen nicht untereinander sich befanden. So dass der Versatz reinkommt. Oder aber es kam bei bestimmten Steuerbefehlen, bei denen man in die nächste Zeile springt. print(\n), weiß aber gerade nicht, ob das überhaupt ging, oder ob da nur ein kryptisches Steuerzeichen rauskam. Habe gerade keines verdrahtet, sonst würd ich es schnell testen.

Hallo,
ja ich weiß jetzt was Du meinst. Danke.

Und jaa, Display´s gibt es auch günstiger.
Gruß und Spaß
Andreas

Habe jetzt mal bisschen rumprobiert aber bekomme es nicht auf die Kette :frowning:

Wäre jemand so nett und könnte mir bei Gelegenheit den Code entsprechend anpassen :confused: ?

Habe mal das gewünscht Muster angehängt.

Bin leider absolut nicht für solche Programmierungen geschaffen :frowning:

Besten Dank vorab für eure Hilfe!

LG
Pascal

void loop() 
{
static unsigned long lastSecond;

if(lastSecond != second()
{
lastSecond = second();
lcd.setCursor(0,0);
lcd.print("ZEIT: ");
lcd.print(hour());
lcd.print(":");
lcd.print(minute());
lcd.print(":");
lcd.print(second());
lcd.setCursor(0,1);
lcd.print("DIM ");
if(hour() >= 6 && hour() < 12) lcd.print("morgens");
else if(hour() >= 12 &&  hour() <18) lcd.print("mittags);
else if(hour() >= 18 && hour() <24) lcd.print("abends ");
else lcd.print("#######");
lcd.print(print3digits(map(dim, 0, 255, 0, 100)));
}
}


void print3digits(int i) 
{
if(i < 100) lcd.print(" ");
if(i < 10) lcd.print(" ");
lcd.print(i);
}

void print2digits(int i) 
{
if(i < 10) lcd.print(" ");
lcd.print(i);
}

Es würde aber mal Sinn machen, die einfachen Basic zu lernen. Dazu gehört Ansteuerung eines Zeilendisplays defenitv dazu.

Besten Dank!

Leider Blicke ich nicht durch diese ganze Programmiersprache durch auch nicht nach mehreren Versuchen :frowning:

Wenn ich das nochmal fragen darf, ist der Code so korrekt wie ich ihn abgebildet habe um ihn entsprechend auf dem LCD wiederzuspiegeln ?

#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h>
#include <LiquidCrystal.h>

void setup()
{
  Serial.begin(9600);
  while (!Serial) ; // wait for serial
  delay(200);
  setSyncProvider(RTC.get);   // the function to get the time from the RTC
  pinMode(11, OUTPUT); //Defniert den dimmbaren Ausgang
  digitalWrite(11,LOW);
}

void loop()
{
  tmElements_t tm; //Dient als Variable
  
  if(RTC.read(tm)) //Liest immer die aktuelle Zeit aus 
  {
    
     delay(750);
    Serial.println(RTC.get());
    Serial.print(tm.Hour);
    Serial.print(":");
    Serial.print(tm.Minute);
    Serial.print(":");
    Serial.println(tm.Second);

    
    if(tm.Hour == 8 && tm.Minute == 45) /*Immer wenn if( ... == Zeit && ... == Zeit) angegeben ist könnt ihr eure eigene Wunschzeit festlegen, dafür üsst ihr nur die  Zahlen ändern.*/
    {
        dimmHochMorgens(); //Sorgt fuer ein er helles Becken um 9:15 Uhr
    }
    
    if(tm.Hour == 11 && tm.Minute == 45)
    {
         dimmRunterMittags(); //Und um 12 ist Mittagsruhe
    }
    
    if(tm.Hour == 14 && tm.Minute == 0)
    {
         dimmHochMittags(); //und um 14:15 Uhr ist es wieder hell
    }
    
    if(tm.Hour == 22 && tm.Minute == 0)
    {
         dimmRunterAbends(); //Somit ist es um 11 dunkel
    }
    
  }
}


void dimmHochMorgens()
{
   for(int i=255;i>=0;i--)
   {
     analogWrite(11,i); //Schreibt den aktuellen Wert auf den Ausgang
     Serial.print("Ich dimme Hoch morgens");
     delay(7000); /*Regelt die Schleifendauer, hierdurch bestimmt ihr wie lange es dauert bis fertig gedimmt ist. Die Zeit wird dabei in millisek angegeben. Dieser Dimmvorgang dauert somit 255*7 Sekunden. Hier könnt ihr eure eigene Wunschdauer reinschreiben, das könnt ihr bei allen delay(..) machen*/
   }
}

void dimmRunterAbends()
{
   for(int i=0;i<=255;i++)
   {
     analogWrite(11,i);
     Serial.print("Ich dimme Runter abends");
     delay(14000);
   }
}

void dimmRunterMittags()
{
   for(int i=0;i<=255;i++)
   {
     analogWrite(11,i);
     Serial.print("Ich dimme Hoch mittags");
     delay(3500);
   }
}

void dimmHochMittags()
{
   for(int i=255;i>=0;i--)
   {
     analogWrite(11,i);
     Serial.print("Ich dimme Runter mittags");
     delay(3500);
   }
{
static unsigned long lastSecond;

if(lastSecond != second()
{
lastSecond = second();
lcd.setCursor(0,0);
lcd.print("ZEIT: ");
lcd.print(hour());
lcd.print(":");
lcd.print(minute());
lcd.print(":");
lcd.print(second());
lcd.setCursor(0,1);
lcd.print("DIM ");
if(hour() >= 6 && hour() < 12) lcd.print("morgens");
else if(hour() >= 12 &&  hour() <18) lcd.print("mittags”);
else if(hour() >= 18 && hour() <24) lcd.print("abends ");
else lcd.print("#######");
lcd.print(print3digits(map(dim, 0, 255, 0, 100)));
}
}
void print3digits(int i) 
{
if(i < 100) lcd.print(" ");
if(i < 10) lcd.print(" ");
lcd.print(i);
}

void print2digits(int i) 
{
if(i < 10) lcd.print(" ");
lcd.print(i);
}
}

Falsch.

Der Teil was von mir im loop steht, muss auch ins loop rein. Die anderen beiden Funktionen ganz an das Ende des Sketches. LCD wird nirgends initialisiert.

Das ist, was du brauchst, wenn du die Tutorials im Netz nicht verstehst
http://www.amazon.de/elektronische-Arduino-entdecken-OReillys-Basics-ebook/dp/B00BLS4WVI/ref=sr_1_11?ie=UTF8&qid=1406281521&sr=8-11&keywords=arduino

So das sollte es nun sein wenn ich nicht ganz auf den Kopf gefallen bin :. :% :roll_eyes:

#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h>
#include <LiquidCrystal.h>

void setup()
{
  Serial.begin(9600);
  while (!Serial) ; // wait for serial
  delay(200);
  setSyncProvider(RTC.get);   // the function to get the time from the RTC
  pinMode(11, OUTPUT); //Defniert den dimmbaren Ausgang
  digitalWrite(11,LOW);
}

void loop()
{
  tmElements_t tm; //Dient als Variable
  
  if(RTC.read(tm)) //Liest immer die aktuelle Zeit aus 
  {
    
     delay(750);
    Serial.println(RTC.get());
    Serial.print(tm.Hour);
    Serial.print(":");
    Serial.print(tm.Minute);
    Serial.print(":");
    Serial.println(tm.Second);

    
    if(tm.Hour == 8 && tm.Minute == 45) /*Immer wenn if( ... == Zeit && ... == Zeit) angegeben ist könnt ihr eure eigene Wunschzeit festlegen, dafür üsst ihr nur die  Zahlen ändern.*/
    {
        dimmHochMorgens(); //Sorgt fuer ein er helles Becken um 9:15 Uhr
    }
    
    if(tm.Hour == 11 && tm.Minute == 45)
    {
         dimmRunterMittags(); //Und um 12 ist Mittagsruhe
    }
    
    if(tm.Hour == 14 && tm.Minute == 0)
    {
         dimmHochMittags(); //und um 14:15 Uhr ist es wieder hell
    }
    
    if(tm.Hour == 22 && tm.Minute == 0)
    {
         dimmRunterAbends(); //Somit ist es um 11 dunkel
    }
    
{
static unsigned long lastSecond;

if(lastSecond != second()
{
lastSecond = second();
lcd.setCursor(0,0);
lcd.print("ZEIT: ");
lcd.print(hour());
lcd.print(":");
lcd.print(minute());
lcd.print(":");
lcd.print(second());
lcd.setCursor(0,1);
lcd.print("DIM ");
if(hour() >= 6 && hour() < 12) lcd.print("morgens");
else if(hour() >= 12 &&  hour() <18) lcd.print("mittags);
else if(hour() >= 18 && hour() <24) lcd.print("abends ");
else lcd.print("#######");
lcd.print(print3digits(map(dim, 0, 255, 0, 100)));
}
}


void dimmHochMorgens()
{
   for(int i=255;i>=0;i--)
   {
     analogWrite(11,i); //Schreibt den aktuellen Wert auf den Ausgang
     Serial.print("Ich dimme Hoch morgens");
     delay(7000); /*Regelt die Schleifendauer, hierdurch bestimmt ihr wie lange es dauert bis fertig gedimmt ist. Die Zeit wird dabei in millisek angegeben. Dieser Dimmvorgang dauert somit 255*7 Sekunden. Hier könnt ihr eure eigene Wunschdauer reinschreiben, das könnt ihr bei allen delay(..) machen*/
   }
}

void dimmRunterAbends()
{
   for(int i=0;i<=255;i++)
   {
     analogWrite(11,i);
     Serial.print("Ich dimme Runter abends");
     delay(14000);
   }
}

void dimmRunterMittags()
{
   for(int i=0;i<=255;i++)
   {
     analogWrite(11,i);
     Serial.print("Ich dimme Hoch mittags");
     delay(3500);
   }
}

void dimmHochMittags()
{
   for(int i=255;i>=0;i--)
   {
     analogWrite(11,i);
     Serial.print("Ich dimme Runter mittags");
     delay(3500);
   }
}
void print3digits(int i) 
{
if(i < 100) lcd.print(" ");
if(i < 10) lcd.print(" ");
lcd.print(i);
}

void print2digits(int i) 
{
if(i < 10) lcd.print(" ");
lcd.print(i);
}
}

Hallo,
ist es wohl möglich, das Du Dir das einmal zu Gemüte führst:

Gruß und Spaß
Andreas

static unsigned long lastSecond;

Mach aus long mal ein int! War gedanktlich woanders.

Einmal muss ich leider noch nerven :sweat_smile: mein Problem ist das morgen die Dimmung fürs Aquarium laufen muss da die Fische einziehen daher diese Eile mich damit nicht so ausführlich zu beschäftigen :blush:

Besorge mir aber noch einen zweiten Ardu um mit diesem dann üben zu können 8)

Ich würde euch bitten nochmal hier einen Blick drüber zu werfen u ggf. mir freundlicherweise den Sketch zu korregieren :blush: :blush:

#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h>
#include <LiquidCrystal.h>

void setup()
{
  Serial.begin(9600);
  while (!Serial) ; // wait for serial
  delay(200);
  setSyncProvider(RTC.get);   // the function to get the time from the RTC
  pinMode(11, OUTPUT); //Defniert den dimmbaren Ausgang
  digitalWrite(11,LOW);
}

void loop()
{
  tmElements_t tm; //Dient als Variable
  
  if(RTC.read(tm)) //Liest immer die aktuelle Zeit aus 
  {
    
     delay(750);
    Serial.println(RTC.get());
    Serial.print(tm.Hour);
    Serial.print(":");
    Serial.print(tm.Minute);
    Serial.print(":");
    Serial.println(tm.Second);

    
    if(tm.Hour == 8 && tm.Minute == 45) /*Immer wenn if( ... == Zeit && ... == Zeit) angegeben ist könnt ihr eure eigene Wunschzeit festlegen, dafür üsst ihr nur die  Zahlen ändern.*/
    {
        dimmHochMorgens(); //Sorgt fuer ein er helles Becken um 9:15 Uhr
    }
    
    if(tm.Hour == 11 && tm.Minute == 45)
    {
         dimmRunterMittags(); //Und um 12 ist Mittagsruhe
    }
    
    if(tm.Hour == 14 && tm.Minute == 0)
    {
         dimmHochMittags(); //und um 14:15 Uhr ist es wieder hell
    }
    
    if(tm.Hour == 22 && tm.Minute == 0)
    {
         dimmRunterAbends(); //Somit ist es um 11 dunkel
    }
    
{
static unsigned int lastSecond;

if(lastSecond != second()
{
lastSecond = second();
lcd.setCursor(0,0);
lcd.print("ZEIT: ");
lcd.print(hour());
lcd.print(":");
lcd.print(minute());
lcd.print(":");
lcd.print(second());
lcd.setCursor(0,1);
lcd.print("DIM ");
if(hour() >= 6 && hour() < 12) lcd.print("morgens");
else if(hour() >= 12 &&  hour() <18) lcd.print("mittags");
else if(hour() >= 18 && hour() <24) lcd.print("abends ");
else lcd.print("#######");
lcd.print(print3digits(map(dim, 0, 255, 0, 100)));
}
}


void dimmHochMorgens()
{
   for(int i=255;i>=0;i--)
   {
     analogWrite(11,i); //Schreibt den aktuellen Wert auf den Ausgang
     Serial.print("Ich dimme Hoch morgens");
     delay(7000); /*Regelt die Schleifendauer, hierdurch bestimmt ihr wie lange es dauert bis fertig gedimmt ist. Die Zeit wird dabei in millisek angegeben. Dieser Dimmvorgang dauert somit 255*7 Sekunden. Hier könnt ihr eure eigene Wunschdauer reinschreiben, das könnt ihr bei allen delay(..) machen*/
   }
}

void dimmRunterAbends()
{
   for(int i=0;i<=255;i++)
   {
     analogWrite(11,i);
     Serial.print("Ich dimme Runter abends");
     delay(14000);
   }
}

void dimmRunterMittags()
{
   for(int i=0;i<=255;i++)
   {
     analogWrite(11,i);
     Serial.print("Ich dimme Hoch mittags");
     delay(3500);
   }
}

void dimmHochMittags()
{
   for(int i=255;i>=0;i--)
   {
     analogWrite(11,i);
     Serial.print("Ich dimme Runter mittags");
     delay(3500);
   }
}
void print3digits(int i) 
{
if(i < 100) lcd.print(" ");
if(i < 10) lcd.print(" ");
lcd.print(i);
}

void print2digits(int i) 
{
if(i < 10) lcd.print(" ");
lcd.print(i);
}
}

Erhalte folgende Fehler:
sketch_jul25a.ino: In function 'void loop()':
sketch_jul25a:56: error: expected )' before '{' token sketch_jul25a:73: error: expected primary-expression before '}' token sketch_jul25a:73: error: expected ;' before '}' token
sketch_jul25a:77: error: a function-definition is not allowed here before '{' token
sketch_jul25a:127: error: expected }' at end of input sketch_jul25a:127: error: expected }' at end of input

Ich bitte um euer Verständnis das ich den Ardu schon morgen fertig einsetzen muss, werde mich aber nachdem alles im Becken eingefahren ist in Ruhe mit einem zweiten Ardu für weitere Projekte auseinandersetzen.

Ich danke euch vielmals!

Beste Grüße,
Pascal

{              // <--- was soll diese Klammer bewirken?
static unsigned int lastSecond;

if(lastSecond != second()       // <--- hier fehlt eine runde Klammer am Ende

Ganz am Ende scheint auch eine schließende geschweifte Klammer zu viel zu sein.