Forum: Mikrocontroller und Digitale Elektronik Funktion wird nicht gestartet


von Michael K. (gummiq)


Angehängte Dateien:

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 ;-)

: Bearbeitet durch User
von Thomas W. (Gast)


Lesenswert?

Michael K. schrieb:
>
1
>     myprog();
2
>
> Arduino Nano V3 (clone) mit Arduino Software Version 1.8.13
> Ach ja, natürlich habe die die LED getestet ;-)

Du hast die Klammern vergessen!

Th.

Beitrag #6969990 wurde vom Autor gelöscht.
von Michael K. (gummiq)


Lesenswert?

Ja Himmel, A... und Wolkenbruch
Ich hatte ja schon angenommen, dass es was simples ist, aber das tut 
weh!
Danke für den schnellen Tip!

von EAF (Gast)


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]

von Ralph S. (jjflash)


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 vom Autor gelöscht.
von Adam P. (adamap)


Angehängte Dateien:

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);

: Bearbeitet durch User
von Miles Bennet D. (Firma: Cyberdyne Systems) (milesbennetdyson)


Lesenswert?

Michael K. schrieb:
> Wahlrscheinlich ein sehr dummer Verständnisfehler

Genau. Warnings sind nicht zum ignorieren da.

von Adam P. (adamap)


Lesenswert?

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)

von Miles Bennet D. (Firma: Cyberdyne Systems) (milesbennetdyson)


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.

von Adam P. (adamap)


Lesenswert?

Miles Bennet D. schrieb:
> Sind ja nur Warnings.

So wie ich das sehe, gibt es bei Arduino nur:
-Wall -Wextra
?

Was ist mit:
-Werror

von EAF (Gast)


Lesenswert?

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.

von Cyblord -. (cyblord)


Lesenswert?

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.

von Michael K. (gummiq)


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 😂

von Michael K. (gummiq)


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

von Adam P. (adamap)


Lesenswert?

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*

von Adam P. (adamap)


Lesenswert?

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.

von Cyblord -. (cyblord)


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.

von Adam P. (adamap)


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.

von Michael K. (gummiq)


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

von Peter D. (peda)


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.

von Rene K. (xdraconix)


Lesenswert?

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.

von W.S. (Gast)


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.

von EAF (Gast)


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.

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.