Frage zu Sketch von Jurs

Hallo Forum
Erst mal ein Hallo in die Runde.
Ich lese hier schon einige Zeit mit und habe auch schon ein paar kleine Sachen mit dem Arduino gemacht.
Jetzt habe ich mir den Time Sketch von jurs mal geladen und erhalte leider einige Warnungen mit denen ich als Anfänger nichts anfangen kann. Kann mir da bitte jemand helfen?

Sketch von jurs:

Link

Warnmeldungen:

In file included from H:\Arduino\Sketch\dateTimeLibEasyDemo\dateTimeLibEasyDemo\dateTimeLibEasyDemo.ino:3:0:

C:\Users\xxx\AppData\Local\Temp\arduino_build_844488\sketch\jursRTCtimeEasy.h: In function ‘int wdayM(sTime&)’:

C:\Users\xxx\AppData\Local\Temp\arduino_build_844488\sketch\jursRTCtimeEasy.h:37:19: warning: value computed is not used [-Wunused-value]

(wdayS(time)+6) % 7;

^

C:\Users\xxx\AppData\Local\Temp\arduino_build_844488\sketch\jursRTCtimeEasy.h:38:1: warning: no return statement in function returning non-void [-Wreturn-type]

}

^

C:\Users\xxx\AppData\Local\Temp\arduino_build_844488\sketch\jursRTCtimeEasy.h: In function ‘boolean summertimeEurope(sTime)’:

C:\Users\xxx\AppData\Local\Temp\arduino_build_844488\sketch\jursRTCtimeEasy.h:105:21: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]

if (time.bMonth==3 && (time.bHour + 24 * time.bDay)>=(1 + time.sTimezone + 24*(31 - (5 * time.iYear /4 + 4) % 7)) || time.bMonth==10 && (time.bHour + 24 * time.bDay)<(1 + time.sTimezone + 24*(31 - (5 * time.iYear /4 + 1) % 7)))

^

H:\Arduino\Sketch\dateTimeLibEasyDemo\dateTimeLibEasyDemo\dateTimeLibEasyDemo.ino: In function ‘void output()’:

H:\Arduino\Sketch\dateTimeLibEasyDemo\dateTimeLibEasyDemo\dateTimeLibEasyDemo.ino:63:10: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

relay=“ON”;

^

H:\Arduino\Sketch\dateTimeLibEasyDemo\dateTimeLibEasyDemo\dateTimeLibEasyDemo.ino:68:10: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

relay=“OFF”;

^

Gruß Smithi

Nimm ne IDE Version aus 2015 und der Sketch sollte laufen. Und sind ja nur Warnungen, vielleicht geht er ja doch so.

Danke für Deine Hilfe
Das könnte ich versuchen. Dann muss ich aber die IDE Version von 2015 aufheben falls ich später mal was ändern will.

Ich wollte aber auf Nummer sicher gehen. Was heute eine Warnung ist könnte ja morgen eine Fehlermeldung sein.

Die ersten drei Warnungen sagen doch genau was nicht sauber ist. Was ist daran nicht verständlich?

1.) value computed is not used (Wert wird nicht verwendet)
2.) no return statement in function returning non-void (Funktion soll einen Wert zurückgeben aber tut es nicht)
3.) suggest parentheses around '&&' within '|| (Klammern um die Teil-Terme)

Die 4. Warnungen ist etwas schlechter verständlich, aber besagt dass String Literale const sein sollen. Kann man mit Google herausfinden

Die 3. und 4. Warnung kann man ignorieren. Die 1. ist eventuell ein Hinweis dass die Funktion nicht alles tut was sie vielleicht soll (etwas wird berechnet, aber nichts zugewiesen). Die 2. Warnung ist auch ein Hinweise darauf dass die Funktion undefiniertes Verhalten haben kann, wenn man deren Rückgabewert verwendet.

Danke Serenifly

Ich stehe halt noch am Anfang mit dem Arduino und verstehe vieles noch nicht. (Sorry)
Dann kommt noch hinzu das meine englisch eher schlecht ist.

Verbesserte Version: https://forum.arduino.cc/index.php?topic=452461.msg3113158#msg3113158

Die Warnung “deprecated conversion from string constant to ‘char*’” kommt aus dem Beispielsketch, das kann man im eigenen Programm anders lösen.

Hallo agmue

Der Sketch läuft Fehlerfrei durch.
Nur die NewliquidCrystal Lib bringt einige Warnungen.
Da dies aber nur Warnungen "unbenutzter Parameter" sind kann ich dies wohl ignorieren.

Vielen Dank für Deine Hilfe
Smithi

Smithi:
Vielen Dank für Deine Hilfe

Gerne :slight_smile:

Im Anhang die Beispieldatei ohne Warnungen (gilt für IDE 1.6.5) und die Bibliothek von jurs.

12.11.2017: Jetzt hier im originalen Thema abgelegt.

Danke
Schaue ich mir morgen an. Muss jetzt leider Weg.
Wünsche Dir ein schönes WE
Gruß Smithi

Smithi:
Nur die NewliquidCrystal Lib bringt einige Warnungen.

Ohne Warnungen sieht es schöner aus, daher für die Kosmetik korrigierte Dateien anbei. Getestet mit IDE 1.6.5.

Quelle meiner Dateien: https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads

Smithi:
Wünsche Dir ein schönes WE

Dir auch :slight_smile:

LCD.h (18 KB)

LiquidCrystal_I2C_ByVac.cpp (3.25 KB)

kulturbereicherer:
Besonders toll ist es wenn man mit Google was sucht und auf Forumbeiträgen stößt wo das selbe gefragt wurde aber als Antwort auf Google verwiesen wird. :wink:

Ja, das ist das Google-Henne-Ei-Paradoxon. Das bekommt man gelöst, wenn man Google rekursiv aufruft :grin: :smiling_imp: :stuck_out_tongue_closed_eyes:

wenn man Google rekursiv aufruft

Google hat mal herausgefunden, dass das häufigste Stichwort, nach dem gesucht wird, "google" ist.

Der Erfolg von google in den Anfangstagen der Internet-Suchmaschinen beruht darauf, dass tatsächlich relevante Ergebnisse ganz am Anfang kamen. (Das war damals nicht selbstverständlich)

Man kann aber, selbst bei google, durchaus mehr als die ersten 3 Suchergebnisse berücksichtigen.

Hallo agmue
Danke nochmal.
Dein Code funktioniert Perfekt. Bekomme nue noch ein paar Warnungen von der Lib.
https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
Diese enthält ja sehr viele Dinge die ich nicht benötige. Naja egal. Ich habe das was die Warnungen verursacht gelöscht und jetzt läuft alles sauber.
An Alle:
Eine Frage habe ich aber noch. Ich würde gerne die Ein-Zeiten auf dem LCD anzeigen aber nur "Ein".
Die schon eingefügt Funktion kann ich nicht nutzen, da sie nur "relayState" als ON oder OFF abfragt.
Ich frage aber außer der Ein-Zeit noch zwei weitere Fakturen ab und da würde ich gerne wissen was gerade "Ein" und was gerade "Aus" ist.
Kann mir bitte jemand sagen wie ich das Abfragen kann.

Meinst Du sowas?

if (relayState) {
  lcd.print("Ein");
}

Hallo agmue

Meinst Du sowas?

Leider nicht. Ich habe mich aber gestern auch unverständlich Ausgedrückt.
Ich habe bei der Abfrage "relayState" noch zwei Bedingungen hinzugefügt.

relayState = isOnTime(localTime, switchTimes, NUMSWITCHTIMES) && LDRState && VoltState; //Schaltbedingungen

Wenn jetzt eine Bedingung nicht erfüllt ist schaltet das Relais auf "OFF" und dieses wird dann im Serial Monitor angezeigt.
Man kann aber nicht erkennen welche Bedingung nicht erfüllt ist.
Deshalb möchte ich nicht abfragen was das Relais gerade macht, sondern ich möchte die Zeiten abfragen.
Also ob die Zeitbedingung erfüllt ist oder nicht.
In meinem Fall von 06 - 08 Uhr und von 17 - 23 Uhr soll EIN anzeigt werden sonnst Aus
Durch die beiden zusätzlichen Bedingungen kann "relayState" auch OFF sein wenn "LDRState" oder "VoltState" die Bedingung nicht erfüllt.

Hoffentlich habe ich mich heute verständlicher ausgedrückt.
Gruß Smithi

dann sowas:

if ( isOnTime(localTime, switchTimes, NUMSWITCHTIMES) ) {
  lcd.print("Ein wegen Timer");   // oder was du halt willst
}

oder sowas:

timeState = isOnTime(localTime, switchTimes, NUMSWITCHTIMES)
relayState = timeState && LDRState && VoltState;    //Schaltbedingungen
...
if (timeState) {
  lcd.print("Ein");
}

Hallo ElEspanol und agmue

Vielen Dank
Habe es so Versucht und es läuft genau so wie ich wollte!

if ( isOnTime(localTime, switchTimes, NUMSWITCHTIMES) ) {
Serial.println("Ein wegen Timer");
}
else Serial.println("Aus wegen Timer");
{

Jetzt muss ich es nur noch für das LCD aufbereiten. Das sollte aber kein Problem sein.

Nochmals Danke
Smithi

Hi
ich muss den Post noch mal hoch holen.
Bei meinem Projekt habe ich einen Atmega328 in minimal Beschaltung auf der Platine.
Jetzt würde ich gerne bei dem Sketch von jurs/agmue mit zwei Butten die Minuten einstellen
können. Also wenn Butten 1 gedrückt wird soll die Uhr 1Minute dazu zählen. Wenn Butten 2
gedrückt wird 1 Minute abziehen. Ziel ist es die eventuelle Jährliche Abweichung zu korrigieren.
Ist das möglich? Wenn ja könnte mir da jemand sagen wie ich das machen muss?
Link

Smithi:
Ist das möglich?

Ja. Du fragst die entprellten Taster ab und addierst oder subtrahierst Eins von den Minuten in time.bMinute und schreibst die korrigierte Zeit mittels RTCwrite(time); zur RTC.

Etwas problematisch ist die weiterlaufende RTC, die möglicherweise selbst die Minute gerade inkrementiert hat. Außerdem mußt Du -1 und 60 gesondert behandeln. Wie das geht, findest Du in timeAddTimezone und timeSubTimezone.

Die Abweichung von RTC3231 liegt eher im Bereich von Sekunden pro Jahr. Du hast also genügend Zeit für die Ergänzung :slight_smile: