Hallo zusammen,
ich habe jetzt Einiges durchgelesen, aber sehe wahrscheinlich den Wald
vor lauter Bäumen nicht.
Es gelingt mir nicht eine Funktion mittels eines Tasters aufzurufen :-/
Ich weiss, Delay ist nicht toll, aber für einen eigentlich sooo simplen
Test soll es erstmal egal sein.
Es macht auch keinen Unterschied ob ich das Delay in der if
(TasterStatus == HIGH)-Abfrage vor, oder nach dem Funktionsaufruf
aktiviere.
(Dient im Moment nur zum Entprellen).
Egal was ich mache, "myprog" wird nicht aufgerufen.
LED1 zeigt brav an, dass die Abfrage funktioniert, aber LED2 leuchtet
einfach nicht, ebenso wie nichts im seriellen Monitor erscheint.
Wahlrscheinlich ein sehr dummer Verständnisfehler, aber ich komme
einfach nicht weiter.
Danke im Voraus für die Hilfe :-)
Gerade gesehen, dass die Verbindung Taster-Arduino im Plan fehlte, also
bitte de nersten Plan ignorieren.
(Wie kann ich den löschen???)
GummiQ
1
const int Taster = 4;
2
const int LED1 = 2;
3
const int LED2 = 3;
4
int TasterStatus = 0;
5
6
void setup()
7
{
8
pinMode(LED1, OUTPUT);
9
pinMode(LED2, OUTPUT);
10
pinMode(Taster, INPUT);
11
Serial.begin(115200);
12
}
13
void loop()
14
{
15
TasterStatus = digitalRead(Taster);
16
if (TasterStatus == HIGH)
17
{
18
digitalWrite(LED1, HIGH);
19
Serial.println(TasterStatus);
20
myprog;
21
//delay(200);
22
23
}
24
else
25
{
26
digitalWrite(LED1, LOW);
27
}
28
}
29
void myprog()
30
{
31
digitalWrite(LED2, HIGH);
32
Serial.println("Mein Unterprogramm");
33
delay(200);
34
}
Arduino Nano V3 (clone) mit Arduino Software Version 1.8.13
Ach ja, natürlich habe die die LED getestet ;-)
Thomas W. schrieb:> Du hast die Klammern vergessen!
So ist es.
Michael K. schrieb:> Egal was ich mache, "myprog" wird nicht aufgerufen.
Ein Tipp für die Zukunft:
Es würde helfen, wenn du die Warnungen in den Voreinstellungen scharf
stellst.
Denn was hilft es, wenn keiner zuhört.....
... und wenn du beim Initialisieren
pinMode(Taster, INPUT_PULLUP);
anstelle von
pinMode(Taster, INPUT);
schreibst, wird intern ein Widerstand gegen +Vcc geschaltet, so dass ein
Lesen dieses Pins eine 1 (HIGH) liefert. Nun brauchst du nur den Taster
am Eingangspin gegen GND verschalten und kannst so den Taster ohne
zusätzlichen Widerstand einlesen.
Allerdings: eine 1 (HIGH) repäsentiert dann hier einen nicht betätigten,
eine 0 (LOW) einen betätigten Taster.
Einen korrekten Tastenstatus erhälst du dann mit:
TasterStatus = !digitalRead(Taster);
(das Ausrufezeichen negiert den Wert)
Ralph S. schrieb:> ... und wenn du beim Initialisieren>> pinMode(Taster, INPUT_PULLUP);>> anstelle von>> pinMode(Taster, INPUT);>> schreibst, wird intern ein Widerstand gegen +Vcc geschaltet, so dass ein> Lesen dieses Pins eine 1 (HIGH) liefert. Nun brauchst du nur den Taster> am Eingangspin gegen GND verschalten und kannst so den Taster ohne> zusätzlichen Widerstand einlesen.
Du meinst so? (Bild)
Fand den Satz als Erklärung etwas unglücklich formuliert, obwohl Inhalt
stimmt ;-)
edit:
Natürlich dann mit dem Pull-Up:
Miles Bennet D. schrieb:> Genau. Warnings sind nicht zum ignorieren da.
...kommt drauf an welche :)
Grundsätzlich hast du recht, jedoch gibt es Warnings die naja...man kann
die Kirche auch mal im Dorf lassen. (Wenn man weiß, was man da vor sich
hat)
Adam P. schrieb:> Grundsätzlich hast du recht, jedoch gibt es Warnings die naja...man kann> die Kirche auch mal im Dorf lassen.
Natürlich habe ich recht und zwar voll und ganz. Und das heißt, daß man
sich sämtliche Warnings auch ansieht. Denn erst dann kann man
feststellen, ob man die Kirche im Dorf lassen kann. Ich unterstelle dem
Herrn TO allerdings, daß er, wie die meisten Anfänger auch, sich diese
nicht angesehen hat. Sind ja nur Warnings.
Adam P. schrieb:> So wie ich das sehe, gibt es bei Arduino nur:
Das kann man selber konfigurieren, wenn man denn unbedingt will.
Per Menü gibts nur 3 Stufen.
Immerhin.
In der jeweiligen Plattformdefinition ist alles möglich, was der GCC an
Parametern schluckt.
Cyblord -. schrieb:> Adam P. schrieb:>>> -Werror>> ist doof. Wer zu blöd ist, eine Warning zu beachten und per Error dazu> gezwungen werden muss, hat es nicht anders verdient.
Hallo zusammen
Üblicherweise programmiere ich mit FreePascal/Lazarus.
Und so bin ich es einfach gewohnt, dass selbst der kleinste Fehler
direkt angemeckert wird, spätestens beim compilieren.
Mein Fehler war lediglich, dass ich mich nicht genug mit der Arduino-IDE
beschäftigt habe, sondern einfach davon ausgegangen bin, dass sie so
eingestellt ist, dass sie solche Fehler direkt moniert.
Man wird verwöhnt durch die modernen Hochsprachen, also werde ich in
Zukunft die Augen ein wenig mehr aufhalten, wie damals, als ich
programmieren lernte, auf eine 80x86 CPU in Assembler
Auf Du & Du mit der CPU 😂
Adam P. schrieb:> Ralph S. schrieb:>>> ... und wenn du beim Initialisieren>> pinMode(Taster, INPUT_PULLUP);>> anstelle von>> pinMode(Taster, INPUT);>> schreibst, wird intern ein Widerstand gegen +Vcc geschaltet, so dass ein>> Lesen dieses Pins eine 1 (HIGH) liefert. Nun brauchst du nur den Taster>> am Eingangspin gegen GND verschalten und kannst so den Taster ohne>> zusätzlichen Widerstand einlesen.>> Du meinst so? (Bild)> Fand den Satz als Erklärung etwas unglücklich formuliert, obwohl Inhalt> stimmt ;-)> edit:> Natürlich dann mit dem Pull-Up:> 1pinMode(Taster, INPUT_PULLUP);
Natürlich könnte ich mit dem Internet Pull-Up Widerstand arbeiten, aber
da der Taster später durch ein PIR Sensor ersetzt wird (der mir halt ein
High raus gibt) teste ich es direkt in positiver Logik.
Ich will das Programm sowieso noch optimieren, als Nächstes werde ich es
wohl umsetzen, dass ich die Ein- und Ausgänge direkt über die Register
anspreche. Ist zwar nicht unbedingt notwendig weil das Programm
definitiv nicht die Speichergrenzen sprengt und auch nicht sehr
zeitkritisch ist, aber es trainiert die Finger und das Hirn
Michael K. schrieb:> Natürlich könnte ich mit dem Internet Pull-Up Widerstand arbeiten, aber> da der Taster später durch ein PIR Sensor ersetzt wird
So ein Thema hatten wir erst vor paar Tagen.
"Das eigentliche Schaltbild vereinfachen"
Das ist doch kacke!
Woher sollen wir wissen warum ihr SO fragt aber euch DAS denkt
*i don't know*
Cyblord -. schrieb:> ist doof. Wer zu blöd ist, eine Warning zu beachten und per Error dazu> gezwungen werden muss, hat es nicht anders verdient.
Das war darauf bezogen, die Anfänger sollten sich es lieber als ERR
ausgeben lassen. nicht mehr, nicht weniger.
Adam P. schrieb:> Cyblord -. schrieb:>> ist doof. Wer zu blöd ist, eine Warning zu beachten und per Error dazu>> gezwungen werden muss, hat es nicht anders verdient.>> Das war darauf bezogen, die Anfänger sollten sich es lieber als ERR> ausgeben lassen. nicht mehr, nicht weniger.
Ja eben. Aber Anfänger sollten LERNEN Warnungen zu beachten und zu
bewerten.
Nicht jede Warnung ist sofort ein Problem.
Beispiel: Für einen Test auskommentierter Code welcher jetzt zu einer
Warning wegen unbenutzter Variablen führt.
Ähnliches kann bei Funktionen passieren welche per Funktionspointer
ausgewählt werden, und eine Reihe fixer Parameter haben, bestimmte
Implementierungen dieser Funktionen brauchen aber nicht immer alle
Parameter.
Niemand will dass in einem solchen Fall dass das Projekt nicht baut.
Cyblord -. schrieb:> Adam P. schrieb:>> Cyblord -. schrieb:>>> ist doof. Wer zu blöd ist, eine Warning zu beachten und per Error dazu>>> gezwungen werden muss, hat es nicht anders verdient.>>>> Das war darauf bezogen, die Anfänger sollten sich es lieber als ERR>> ausgeben lassen. nicht mehr, nicht weniger.>> Ja eben. Aber Anfänger sollten LERNEN Warnungen zu beachten und zu> bewerten.> Nicht jede Warnung ist sofort ein Problem.> Beispiel: Für einen Test auskommentierter Code welcher jetzt zu einer> Warning wegen unbenutzter Variablen führt.> Ähnliches kann bei Funktionen passieren welche per Funktionspointer> ausgewählt werden, und eine Reihe fixer Parameter haben, bestimmte> Implementierungen dieser Funktionen brauchen aber nicht immer alle> Parameter.> Niemand will dass in einem solchen Fall dass das Projekt nicht baut.
Gebe ich dir recht!
Ich habe mich nur gewundert, dass es auf den bekannten Arduino Seiten
keine Info über -Werror gibt.
Aber ich glaube auch nicht, dass alle zu Beginn auf Warnungen achten,
solange es compiliert und "lauffähig" ist.
Adam P. schrieb:> So ein Thema hatten wir erst vor paar Tagen.> "Das eigentliche Schaltbild vereinfachen">> Das ist doch kacke!> Woher sollen wir wissen warum ihr SO fragt aber euch DAS denkt> *i don't know*
Das war für meine konkrete Frage irrelevant, denn ich habe nicht einfach
"das Schaltbild vereinfacht", sondern habe, als ich über das Problem mit
dem Funktionsaufruf gestolpert bin, GENAU die obige Schaltung auf dem
Breadboard aufgebaut und das genau DAS in der Frage hineinkopierte
Programm geschrieben, zum Testen und Herausfinden, warum ich GENAU
DIESEN Funktionsaufruf nicht hinbekomme.
So, Haarspaltwerkzeug wieder eingepackt ;-)
Vielen Dank Allen, die sich rege beteiligt haben und einen schönen Abend
noch
Adam P. schrieb:> Das war darauf bezogen, die Anfänger sollten sich es lieber als ERR> ausgeben lassen. nicht mehr, nicht weniger.
Das ist keine Frage, ob man Anfänger ist oder nicht, sondern ob man
sauber programmieren will oder nicht.
Es gibt immer einen sauberen Weg, keine Warnungen zu erhalten. Und für
variable Argumentenübergabe gibt es varargs.
Das [-Wunused-variable] kann man wärend der Entwicklung ausschalten und
nur beim Release scharf schalten.
Oder man definiert die Variable immer direkt vor oder bei der ersten
Verwendung (empfohlen), dann kann man es leicht mit auskommentieren.
Nichts desto trotz: hätte der GCC da nicht sogar ein Fehler werfen
müssen und keine Warnung?
"myprog;" ist völlig undefiniertes Verhalten - das hätte keine Warnung
sondern ein Fehler geben müssen.
Rene K. schrieb:> "myprog;" ist völlig undefiniertes Verhalten - das hätte keine Warnung> sondern ein Fehler geben müssen.
Ach nö, es ergibt bloß einen Zeiger, der aber nicht weiter verwendet
wird. Insofern kein Fehler, denn jede Zuweisung hat ebenso einen Wert,
der zumeist eben nicht verwendet wird.
siehe z.B.:
1
a=
2
b=
3
c=4711;
Michael K. schrieb:> if (TasterStatus == HIGH)> { ...> myprog;
Tja, wenn man von Pascal her kommt, dann passiert einem so etwas viel
eher. In C muß man eben eine Menge Zeugs auswendig lernen, weil das
hier eben so ist. Ohne Bezug auf Logik.
W.S.
Rene K. schrieb:> "myprog;" ist völlig undefiniertes Verhalten - das hätte keine Warnung> sondern ein Fehler geben müssen.
Nein, das ist ein definiertes Verhalten.
Ohne dieses definierte Verhalten wären keine Callback möglich.
Ich habe oben die Meldung gezeigt.
--> Es lohnt sich diese mal aufmerksam zu lesen.
Da drin steht nix von undefiniertem Verhalten.