Funktion wird nicht gestartet

#6969984
Lesenswert?

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 ;-)
Angehängte Dateien:
Beitrag #6969990 wurde von einem Moderator gelöscht.
Gast #6969997
Lesenswert?

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.....
1
E:\Programme\arduino\portable\sketchbook\sketch_feb08b\sketch_feb08b.ino: In function 'void loop()':
2
E:\Programme\arduino\portable\sketchbook\sketch_feb08b\sketch_feb08b.ino:19:5: warning: statement is a reference, not call, to function 'myprog' [-Waddress]
3
   19 |     myprog;
4
      |     ^~~~~~
5
E:\Programme\arduino\portable\sketchbook\sketch_feb08b\sketch_feb08b.ino:19:5: warning: statement has no effect [-Wunused-value]
#6970206
Lesenswert?

... 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)
Beitrag #6970234 wurde von einem Moderator gelöscht.
#6970240
Lesenswert?

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:
1
pinMode(Taster, INPUT_PULLUP);
Angehängte Dateien:
(Firma: Cyberdyne Systems) #6970260
Lesenswert?

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.
#6970374
Lesenswert?

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 😂
#6970386
Lesenswert?

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
#6970463
Lesenswert?

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.
#6970493
Lesenswert?

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.
#6970495
Lesenswert?

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
#6970699
Lesenswert?

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.
Gast #6970787
Lesenswert?

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.
Gast #6970836
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren