Forum: Mikrocontroller und Digitale Elektronik Wird diese if-Schleife jemals ausgeführt?


von Paul-Gerhard S. (paul-g)


Lesenswert?

Hallo zusammen,

ich habe eine kurze Frage.
Wird eine if-Schleife jemals ausgeführt wenn man in den Bedingungen ein 
= vergessen hat und somit eine Zuweisung anstatt einem Vergleich macht?
1
if ( hnow = 21 && mnow >= 30 && mnow <= 39)

eigentlich muss es ja
1
if ( hnow == 21 && mnow >= 30 && mnow <= 39)

heißen.

Vielen Dank!

von Jemand (Gast)


Lesenswert?

Ja

von hin wais geber (Gast)


Lesenswert?

Es gibt keine If-Schleifen!

Paul-Gerhard S. schrieb:
> Vielen Dank!

Gerne geschehen.

von hnow (Gast)


Lesenswert?

1
if ( hnow = 21 && mnow >= 30 && mnow <= 39)
Ist immer wahr, weil die zuweisung mit 21 immer ungleich null ist.

von Paul-Gerhard S. (paul-g)


Lesenswert?

Jemand schrieb:

hin wais geber schrieb:
> Es gibt keine If-Schleifen!

Entschuldigung. Wie nennt man es dann?

Vielen Dank!

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Paul-Gerhard S. schrieb:

> Wird eine if-Schleife

Dass es die nicht gibt, wurde ja schon genannt. ;-)  (Es ist eine 
"if-Anweisung".)

>
1
if ( hnow = 21 && mnow >= 30 && mnow <= 39)

Wenn du dir jetzt die Operatorenreihenfolge zu Gemüte führst, dann weißt 
du hinterher auch, was in "hnow" steht und warum sie ausgeführt wird:
1
if (hnow = (21 && (mnow >= 30) && (mnow <= 39)))

von Jens M. (schuchkleisser)


Lesenswert?

hnow schrieb:
> Ist immer wahr, weil die zuweisung mit 21 immer ungleich null ist.

Sicher?
Was ist wenn mnow 0 ist?
Die If-Abfrage ist dann (true && false && true) und das ergibt False.
Oder?

von Paul-Gerhard S. (paul-g)


Lesenswert?

hnow schrieb:
> if ( hnow = 21 && mnow >= 30 && mnow <= 39)
>> Ist immer wahr, weil die zuweisung mit 21 immer ungleich null ist.

Also unabhängig von mnow? Im Arduino-Compiler auch?

von && (Gast)


Lesenswert?

Paul-Gerhard S. schrieb:
> Also unabhängig von mnow?

natürlich nicht.

mnow wäre bei der Zuweisung (statt Vergleich) die einzige Variable, die 
entscheidet ob die if-Schleife ausgeführt wird oder nicht.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Paul-Gerhard S. schrieb:

> Also unabhängig von mnow?

Nein. Denk doch mal bitte selbst mit. Wie man den Ausdruck so klammern 
muss, wie es der Compiler implizit macht, hatte ich dir geschrieben.

> Im Arduino-Compiler auch?

Auch Arduino benutzt einen C++-Compiler, der dem ganz normalen 
C++-Standard entspricht.

von && (Gast)


Lesenswert?

Paul-Gerhard S. schrieb:
> Im Arduino-Compiler auch?

Darum muss man die Warnungen aktivieren. Erst recht bei Arduino. Dazu 
gab es hier ja kürzlich eine lange Diskussion ;-)

von Paul-Gerhard S. (paul-g)


Lesenswert?

Vielen Dank!
Dann muss mein Fehler woanders liegen.
Den Code hab ich leider zum Großteil nicht selber geschrieben.

Wie ist das wenn ich den Code aus dem großen weiten Internet 
heruntergeladen habe darf ich den dann auch hier veröffentlichen und 
darüber diskutieren?

von Teo (Gast)


Lesenswert?


von Yalu X. (yalu) (Moderator)


Lesenswert?

1
if ( hnow = 21 && mnow >= 30 && mnow <= 39)


kann man auch schreiben als

1
  hnow = ((mnow >= 30) && (mnow <= 39));
2
  if (hnow)

Der erzeugte Code ist der gleiche.

Dabei sind die Klammern in der ersten Zeile optional.

von Ant Wort (Gast)


Lesenswert?

Paul-Gerhard S. schrieb:
> hin wais geber schrieb:
>> Es gibt keine If-Schleifen!
>
> Entschuldigung. Wie nennt man es dann?
>
> Vielen Dank!

Verzweigung

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Paul-Gerhard S. schrieb:
> Wie ist das wenn ich den Code aus dem großen weiten Internet
> heruntergeladen habe darf ich den dann auch hier veröffentlichen und
> darüber diskutieren?

Darüber diskutieren darfst du natürlich.

Inwiefern du den Code selbst veröffentlichen darfst, hängt von dessen 
Lizenz ab.

Für die von dir genannte Zeile greift aber ziemlich unstrittig das 
Zitatrecht, die darfst du also veröffentlicht haben. ;-)

von Paul-Gerhard S. (paul-g)


Angehängte Dateien:

Lesenswert?

Sorry ich habe vergessen das zu sagen da hängt wohl so eine GNU-Lizenz 
vorne dran.
Dann ist das wohl ok.
Also das Programm soll eigentlich ein Gewicht wiegen den Wert auf eine 
SD-Karte speichern und alle 2 Tage eine SMS senden. (SIM800L-Modul)

Ich selber habe nur das mit dem SMS senden geschrieben. Wohl ziemlich 
reingepfuscht das ganze.
Ich weiß das ist ein "ziemlich" umfangreiches Programm und ich habe 
jetzt auch nur eine von vier Dateien angehängt weil in den anderen 
Teilen auch Telefonnummern stehen und so.

Wenn sich das wirklich jemand genauer anschauen will kann ich das auch 
noch umändern und einstellen.
Eigentlich geht es zuerst mal um die eine Code-Zeile mit der 
if-Anweisung.
Ich habe den Aufbau grade noch im Testaufbau und offiziell sollte erst 
heute Abend um ca. 21:30 eine SMS ankommen. Erst als ich das Programm 
heute vorsichtshalber nochmal angeschaut habe ist mir aufgefallen, dass 
das mit dem "=" wohl so nicht passen kann. Wenn aber tatsächlich nur 
mnow ausschlaggebend ist sollte ich ja jede halbe Stunde eine SMS 
bekommen?!
Ach ja das Weckintervall ist in der config datei definiert (aktuell 
10min) wo auch die Telefonnummern drin sind.

&& schrieb:
> Darum muss man die Warnungen aktivieren. Erst recht bei Arduino. Dazu
> gab es hier ja kürzlich eine lange Diskussion ;-)

Veilen Dank für den Hinweis! Das wusste ich nicht.
Da kommt dann die Warnung mit dem "=".

Es kam auch noch eine Meldung zu
1
char File_Name[15] = "beelogger_Lukas_1.csv";
Die String-Länge sei zu kurz.

Reicht es da einfach eine 22 aus der 15 zu machen?

Vielen Dank!

von Stefan F. (Gast)


Lesenswert?

>> Es gibt keine If-Schleifen!


Paul-Gerhard S. schrieb:
> Entschuldigung. Wie nennt man es dann?

http://if-schleife.de/

Beitrag #6686509 wurde von einem Moderator gelöscht.
von Michael D. (nospam2000)


Lesenswert?

Paul-Gerhard S. schrieb:
> char File_Name[15] = "beelogger_Lukas_1.csv";
> Die String-Länge sei zu kurz.
> Reicht es da einfach eine 22 aus der 15 zu machen?

Das hängt davon ab, was du für ein Dateisystem hast und wie die anderen 
Teile des Programms geschrieben sind wo dieser Dateiname verwendet wird. 
Wenn dort auch überall eine Limitierung auf 14 Zeichen drin ist, dann 
solltest du die 15 lieber nicht ändern und besser den Dateinamen kürzen.

Wenn die Länge des Namens egal wäre ich ich dort einfach nur folgendes 
geschrieben:
1
char File_Name[] = "beelogger_Lukas_1.csv";

Wenn dort explizit eine Länge drinsteht könnte das einen guten Grund 
haben.

Ich wäre eher defensiv und würde hier nur 8+3 Zeichen für den Dateinamen 
verwenden.

   Michael

von Schlaumaier (Gast)


Lesenswert?

Es ist immer das Selbe.

Leute "organisieren" sich einen Code aber sind NICHT in der Lagen zu 
debuggen.

Was ist so schwer daran. Man lernt mit den Seriellen Monitor umzugehen, 
Manipuliert die Variablen VOR der if-Then-Abfrage  und lässt sich nach 
der Abfrage an der richtigen Stelle, was anzeigen.

Das ist Coden für Anfänger. Ich bin kein Anfänger aber das habe ich 
schon gleich nach Hello-World gemacht. ;)

von HildeK (Gast)


Lesenswert?

Paul-Gerhard S. schrieb:
> Es kam auch noch eine Meldung zu
> char File_Name[15] = "beelogger_Lukas_1.csv";
> Die String-Länge sei zu kurz.
>
> Reicht es da einfach eine 22 aus der 15 zu machen?

Zunächst ja, je nach dem, ob der String irgend wo hinkopiert wird, muss 
das dort halt auch passen (ich analysiere den Code nicht).

Viel Vertrauen kann man dem Code nach solchen Fehlern bei einer 
Veröffentlichung nicht wirklich entgegen bringen ...

von Paul-Gerhard S. (paul-g)


Lesenswert?

Schlaumaier schrieb:
> Es ist immer das Selbe.

Ich werde mir das schon selber nochmal genauer anschauen. Ich denke ich 
bekomme das auch schon irgendwie in den Griff. Ich wollte nur nicht hier 
eine Frage stellen und den Leuten die freundlich antworten den 
Zusammenhang vorenthalten. Vor allem weil sich das mit dem "=" alles 
entgegen der Meinungen der Leute die mir geantwortet haben verhält. 
(Siehe oben)
Aber es kann natürlich auch irgendwo anders ein Fehler im Programm sein. 
Allerdings ist der dann auf mich zurückzuführen. Ohne meine Abänderungen 
lief nämlich alles wie am Schnürchen.
Ich bin auch nicht wirklich davon ausgegangen dass sich jemand die Mühe 
macht das genau anzuschauen. Würde mich aber trotzdem freuen. :)

HildeK schrieb:
> Viel Vertrauen kann man dem Code nach solchen Fehlern bei einer
> Veröffentlichung nicht wirklich entgegen bringen ...

Ich habe den Name abgeändert und deshalb kam die Warnung. Also mein 
Fehler.
Und außerdem ist es ja eigentlich egal wieviel Warnungen der Compiler 
ausspuckt, wenn das Programm zuverlässig läuft.
Ich würde sagen das ist ausgesprochen nett, dass überhaupt jemand seinen 
Code veröffentlicht und sowieso wenn er im GNU-Satz oben drüber 
schreibt, dass er nicht garantiert ob das läuft oder nicht ist man 
selbst schuld.

Trotzdem Danke an alle!

von Stefan F. (Gast)


Lesenswert?

Paul-Gerhard S. schrieb:
> Und außerdem ist es ja eigentlich egal wieviel Warnungen der Compiler
> ausspuckt, wenn das Programm zuverlässig läuft.

Nein, definitiv nicht. Mit dieser Einstellung wird man bestenfalls eine 
Schlampe, keinesfalls ein Programmierer.

Die Warnungen dienen dazu, Fehler zu vermeiden - vor allem Fehler die 
der Compiler nicht eindeutig erkennen kann. In allen Firmen, wo ich 
Software entwickelte gab es die strikte Regel, dass Programme nur dann 
abgeliefert werden dürfen, wenn sie ohne Warnungen compilieren. 
Teilweise wurden sogar zusätzliche Tools zur statischen Code-Analyse 
hinzugenommen, die noch mehr Warnungen erzeugen.

von Dirk B. (dirkb2)


Lesenswert?

Paul-Gerhard S. schrieb:
> Und außerdem ist es ja eigentlich egal wieviel Warnungen der Compiler
> ausspuckt, wenn das Programm zuverlässig läuft.

Nein!
Nein, nein, nein!
Tu‘ dir das nicht an!
Nein,nein, nein!

von Schlaumaier (Gast)


Lesenswert?

Paul-Gerhard S. schrieb:
> Und außerdem ist es ja eigentlich egal wieviel Warnungen der Compiler
> ausspuckt, wenn das Programm zuverlässig läuft.

Warnungen bedeutet immer, das was der Name sagt. Sie WARNEN vor 
möglichen Problemen.

Erst mit jahrelanger Erfahrung mit den Compiler und seinen 
Programmierkünsten kann man selbstständig entscheiden welche Warnungen 
man ignorieren kann, und welche nicht.

Ein einfaches Beispiel :
Die Warnung "Variable MC wurde nicht deklariert".

Wenn man sicher ist, das am die Variable noch nicht benutzt hat, kann 
man diese Warnung ignorieren da der Compiler sie selbst deklariert.

ABER. Diese Warnung kann auch auf ein Tippfehler hindeutet, wenn der 
wirkliche Name MV ist. Und man sich dann wundert wieso die Variable 
falsche Werte hat.

Wie erwähnt, nur ein einfaches Beispiel was nicht einmal bei allen 
Compilern/IDE so funktionieren tut. Aber es erläutert das Problem mit 
Warnungen.

Anfängern rate ich aber dringend so wenige Warnungen wie möglich zu 
erzeugen und immer über JEDE Warnung nachzudenken. Sie hat halt einen 
Grund.

Es kann sogar sein, das die Warnung darauf heraus läuft das das Prg. in 
DIESER Version des Compilers läuft aber in einer neueren Version nicht 
mehr.  Grund : Der verwendete Befehl wird in der neuen Version ersetzt.

von Stefan F. (Gast)


Lesenswert?

Ich finde es übrigens ein Unding, dass beim gcc die Option -Wall nicht 
standardmäßig aktiv ist.

Noch verwerflicher finde ich, dass bei Arduino standardmäßig alle 
Warnungen unterdrückt werden. Sollte das nicht eine Plattform zum Lernen 
sein? So lernt man es definitiv nicht richtig.

von Hugo H. (hugo_hu)


Lesenswert?

Jörg W. schrieb:
> Es ist eine
> "if-Anweisung"

Ich kenne das als "Bedingte Verarbeitung". "Verzweigung" hört sich so 
an, als mache man nebenbei noch etwas Anderes - dem ist aber nicht so. 
Man geht den einen oder den anderen Weg.

Manchmal sind Flussdiagramme oder "Nassi-Shneidermann"-Diagramme gar 
nicht so verkehrt :-)

von Paul-Gerhard S. (paul-g)


Lesenswert?

Vielen Dank für die Hinweise mit den Warnungen!
Ich werde das in Zukunft berücksichtigen.

Hat jemand noch eine Idee zu der if-Anweisung?
Im Programm wird ja die aktuelle Uhrzeit abgefragt und nur wenn es 
zwischen 21.30 und 21.39 ist soll eine SMS gesendet werden. Der uC soll 
ja schlafen und nur wenn er in dieser Zeit aufwacht und laut unix-time 
ein gerader Tag ist soll eine SMS gesendet werden.
Das komische ist, dass ich den Test jetzt schon mindestens einen Tag im 
Betrieb hatte der nach unix-time gerade ist. Und wenn die stunden mit 21 
nicht ausschlaggebend sind sollte ich ja alle Stunde eine SMS bekommen 
immer zwischen der halben Stunde und 10 nach halb. Das ist aber 
definitiv nicht so. Deshalb bin ich mir irgendwie unsicher ob ich das 
mit der if jetzt immer noch nicht richtig verstanden habe oder ob etwas 
anderes noch nicht passt.
Das SMS senden an sich und auch das unberührte Original-Programm ist 
schon problemlos gelaufen. Ich wollte das eigentlich nur kurz 
zusammenfügen. :)

Heute ist der erste Abend an dem ich tatsächlich eine SMS erwarte und 
deshalb werde ich heute vor 21.40 keine weiteren debug-Versuche 
unternehmen.
Allerdings habe ich morgen Berufsschulabschlussprüfungen (EGS) und weiß 
deshalb nicht ob da heute Abend noch was läuft.

Die if steht übrigens in der Arduino-Setup. Die Variable SMS_senden wird 
bei beschriebener if Anweisung und einer weiteren if die jeden zweiten 
Tag true sein soll auf 1 gesetzt und dann in der Funktion 
Daten_per_SMS_senden() die in der relativ schlanken Arduino-loop 
aufgerufen wird verarbeitet.

von Hugo H. (hugo_hu)


Lesenswert?

Paul-Gerhard S. schrieb:
> Die if steht übrigens in der Arduino-Setup. Die Variable SMS_senden wird
> bei beschriebener if Anweisung und einer weiteren if die jeden zweiten
> Tag true sein soll auf 1 gesetzt und dann in der Funktion
> Daten_per_SMS_senden() die in der relativ schlanken Arduino-loop
> aufgerufen wird verarbeitet.

Sehr gut - sehe ich gerade vor mir. Leider erschwert ein dichter Nebel 
die Durchsicht. Ich warte auf Wind.

von Paul-Gerhard S. (paul-g)


Lesenswert?

Hugo H. schrieb:
> Sehr gut - sehe ich gerade vor mir. Leider erschwert ein dichter Nebel
> die Durchsicht. Ich warte auf Wind.

Verstehe ich jetzt nicht ganz. Soll ich den ganzen Code einstellen oder 
nur die erwähnten Teile? Dann ist doch wieder alles aus dem Zusammenhang 
gerissen.
Die .ino habe ich vorhin schonmal angehängt.

von Stefan F. (Gast)


Lesenswert?

Paul-Gerhard S. schrieb:
> Die if steht übrigens in der Arduino-Setup

Setup wird nur einmal nach Programmstart ausgeführt.

von Paul-Gerhard S. (paul-g)


Lesenswert?

Ja er soll nach dem Aufwachen nur kurz schauen ob er jetzt die SMS 
senden soll oder nicht. Oder wird die Setup beim Aufwachen nicht 
nocheimal durchlaufen?

Wenn nein dann ist der Fehler schon gefunden. Vielen Dank!

von Stefan F. (Gast)


Lesenswert?

Paul-Gerhard S. schrieb:
Das Aufwachen ist kein Programmstart, sondern eine Fortsetung nach dem 
Einschlafen.

Du hast das eventuell mit dem ESP8266 verwechselt, der muss zum 
Aufwachen resetted werden, also tatsächlich neu starten.

von Hugo H. (hugo_hu)


Lesenswert?

Paul-Gerhard S. schrieb:
> Die .ino habe ich vorhin schonmal angehängt.

Hier wird immer wieder gepredigt, dass man einen Code beifügen soll, 
welcher das Problem (ohne den Rest der Entwicklung zu betrachten) 
darstellt.

In Deinem Fall:

Variablen vorbelegen, IF-Anweisung ausführen, (falsches) Ergebnis 
aufzeigen.

Am Besten, den reduzierten Code nachvollziehbar ausgeben oder z. B. als 
Atmel- oder Arduino-Projekt anhängen. Wenn Du das machst erledigt sich 
die Frage vermutlich von selbst.

von Hugo H. (hugo_hu)


Lesenswert?

Paul-Gerhard S. schrieb:
> Ja er soll nach dem Aufwachen

Prima, dass Du jetzt schon damit um die Ecke kommst :-)

von Paul-Gerhard S. (paul-g)


Lesenswert?

Hugo H. schrieb:
> Prima, dass Du jetzt schon damit um die Ecke kommst :-)

Entschuldigung, Entschuldigung.
Ich wollte extra keine Salami liefern und hab die ganze .ino angehängt.

Aber dann hat sich inzwischen ja das meiste geklärt werde schauen wie 
weit ich komme und mich dann nochmal melden.

Zum Verständnis noch eine Frage:
In wie weit merkt sich der uC den Zustand der verschiedenen Variablen im 
Schlaufzustand? Macht es da einen Unterschied ob die Variable volatile 
ist oder nicht?

Vielen Dank an alle!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Paul-Gerhard S. schrieb:
> laut unix-time ein gerader Tag ist

Dein Test ist aber auf == 1, das wäre ein ungerader Tag.

Ob laut Unix-Zeit aktuell ein gerader oder ein ungerader Tag ist, wüsste 
ich jetzt aber auch nicht auf Anhieb. ;-)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Paul-Gerhard S. schrieb:
> In wie weit merkt sich der uC den Zustand der verschiedenen Variablen im
> Schlaufzustand?

AVRs merken sich da alles, da der RAM komplett spannungsversorgt bleibt.

Bei anderen Controllern ist das zuweilen nicht so, musst du dann im 
Handbuch nachlesen.

> Macht es da einen Unterschied ob die Variable volatile
> ist oder nicht?

Nein.

von Hugo H. (hugo_hu)


Lesenswert?

Jörg W. schrieb:
> AVRs merken sich da alles, da der RAM komplett spannungsversorgt bleibt.

Hast Du dazu eine sichere Quelle?

von mh (Gast)


Lesenswert?

Jörg W. schrieb:
> Paul-Gerhard S. schrieb:
>> laut unix-time ein gerader Tag ist
>
> Dein Test ist aber auf == 1, das wäre ein ungerader Tag.
>
> Ob laut Unix-Zeit aktuell ein gerader oder ein ungerader Tag ist, wüsste
> ich jetzt aber auch nicht auf Anhieb. ;-)

Ich frage mich gerade was ein ungerader Tag ist. Wochentag, Tag im Monat 
oder Tag im Jahr? Da gibt es Fälle wo zwei gerade oder zwei ungerade 
Tage aufeinander folgen. Da ist es meiner Meinung nach wenig sinnvoll 
von gerade oder ungerade zu reden. Julianischer Tag oder ähnlich würde 
funktionieren.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Hugo H. schrieb:
> Jörg W. schrieb:
>> AVRs merken sich da alles, da der RAM komplett spannungsversorgt bleibt.
>
> Hast Du dazu eine sichere Quelle?

Genügt dir (außer meiner eigenen jahrelangen Erfahrung) das Datenblatt 
als ausreichend "sicher"?

"The contents of the register file and SRAM are unaltered when the 
device wakes up from sleep."

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

mh schrieb:
> Ich frage mich gerade was ein ungerader Tag ist

Er hat ihn auf die Unix-Zeit bezogen, also den 1. Januar 1970.

Beitrag #6686731 wurde von einem Moderator gelöscht.
von Sebastian (Gast)


Lesenswert?

Paul-Gerhard S. schrieb:
> Hat jemand noch eine Idee zu der if-Anweisung?

Zur if-Anweisung selbst nicht, aber zur Verwendung einer Zuweisung 
innerhalb einer Berechnung in C und C++. Ich weiss nicht ob dir klar 
geworden ist was dann genau passiert:
1. Die Zuweisung wird ausgeführt.
2. Das Ergebnis der Zuweisung ist der zugewiesene Wert.
Dabei muss natürlich die Operatorenreihenfolge beachtet werden.

Also ist ((a=2)>3) immer falsch.

LG, Sebastian

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Hugo H. schrieb:
>> Es ist eine
>> "if-Anweisung"
>
> Ich kenne das als "Bedingte Verarbeitung".

Wobei es mehrere "bedingte Anweisungen" gibt (if, switch, ternärer 
Operator), insofern ist "if-Anweisung" stärker eingrenzend.

Auch die Schleifenanweisungen sind bedingte Anweisungen.

: Bearbeitet durch Moderator
von dfIas (Gast)


Lesenswert?

Jörg W. schrieb:
> mh schrieb:
>> Ich frage mich gerade was ein ungerader Tag ist
>
> Er hat ihn auf die Unix-Zeit bezogen, also den 1. Januar 1970.
Unix Time kennt keine Tage, nur Sekunden. Referenz ist 1970-01-01 
00:00:00. Da Schaltsekunden unberücksichtigt bleiben, verliert sich auch 
die Zuordnung zum Datum und begrenzt ist es ohnehin. Einen letzten Tag 
gibt es ebenfalls nicht.
Im Space Business hat man diese Zählweise übrigens übernommen, außer, 
dass die Referenz schon einige Male angepasst wurde. (Es gab sogar mal 
einen 1. Januar um 12:00 h Mittags - ganz verschroben, sind wir schon 
alle mit auf die Nase gefallen ...)

von Stefan F. (Gast)


Lesenswert?

Paul-Gerhard S. schrieb:
> Ich wollte extra keine Salami liefern und hab die ganze .ino angehängt.

An deinem Code sehen wir leider nur, was du programmiert hast. Nicht was 
du beabsichtigt hast.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

dfIas schrieb:
>>> Ich frage mich gerade was ein ungerader Tag ist
>>
>> Er hat ihn auf die Unix-Zeit bezogen, also den 1. Januar 1970.
>
> Unix Time kennt keine Tage, nur Sekunden.

Ja, und er hat das dann einfach durch 86400 dividiert, um die Tageszahl 
zu bekommen und geschaut, ob die gerade oder ungerade ist.

Für ein "sende dies jeden zweiten Tag" ist das doch völlig OK.

von Paul-Gerhard S. (paul-g)


Lesenswert?

Also vielen Dank an alle!
Prüfung ist jetzt vorbei und ich kann weiter testen.

Das eigentlich Problem außer dem "=" das in der if fehlt ist wohl, dass 
ich die Abfrage ob heute gesendet wird oder nicht in der setup mache und 
der Arduino die setup beim aufwachen nicht nochmals durchläuft.

Ich werde das ändern genauso wie das "=" und den zu langen String und 
dann nochmal testen.

Vielen Dank an die die trotz dem Durcheinander wichtige Hinweise gegeben 
haben und mich unterstützt haben.

Werde mich nochmal melden wenn es ein weiteres Problem gibt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Paul-Gerhard S. schrieb:
> Arduino die setup beim aufwachen nicht nochmals durchläuft.

Ja, klar, die wird nur nach einem Reset (oder Sprung auf Adresse 0) 
durchlaufen.

In Standard-C++-Terminologie kannst du dir das so vorstellen:
1
void setup(void);
2
void loop(void);
3
4
int main(void)
5
{
6
   setup()
7
8
   for (;;)
9
     loop();
10
}

Wie schon oben zitiert, bleiben beim Sleep alle Registerinhalte 
erhalten, also auch der des PC. Damit befindest du dich nach dem 
Aufwachen immer an dem Befehl, der direkt nach dem Sleep folgt.

von Fern Schätzer (Gast)


Lesenswert?

Jörg W. schrieb:
> also auch der des PC.

Na hoffentlich weiss der TO mit der Abkürzung was anzufangen.
Aufgrund der Performance die er als Programmierer an den Tag
legt denke ich eher dass das schwierig wird. Selbst wenn man
diese Abkürzung ausschreibt wird er noch daran zu knabbern
haben.

Beitrag #6687419 wurde von einem Moderator gelöscht.
von Paul-Gerhard S. (paul-g)


Lesenswert?

Ich denke das ist der Programm counter.
Der zeigt irgendwie an wo der uC grade im Programm steht.
Wir hatten das mal in der Schule.
Ist ja so ähnlich wie der Stack. Nur dass der für untergeordnete 
Programteile bzw Funktionen ist oder? Und wenn man in zu viele 
Unterschleifen geht dann läuft der stack über und dann hat man ein 
richtiges Problem. Hab ich das richtig im Kopf?
Oder kann der bei AVR´s inzwischen gar nicht mehr überlaufen?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Paul-Gerhard S. schrieb:
> Hab ich das richtig im Kopf?

Sehr grob. :-)

von Fern Schätzer (Gast)


Lesenswert?

Soviel dazu dass auch eine Fernschätzung mal ganz gut sein kann.

von Paul-Gerhard S. (paul-g)


Lesenswert?

Also inzwischen läuft alles wie ich mir das vorgestellt habe.
Vielen Dank an alle die dazu beigetragen haben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.