Arduino tasterstatus=digitalRead(taster)?

4 Antworten

Der Arduino spricht kein Deutsch und auch keine andere Sprache die Menschen sprechen würden, er spricht und versteht Computersprache.

Wenn du von "Taster" sprichst, dann weiß der Arduino nicht was ein Taster ist. Genauso könntest du das Wort Taster auch mit dem Wort "Druckschalter" ersetzen und der Arduino wüsste trotzdem nicht was gemeint ist.

Deshalb musst du ihm erst erklären was ein Taster ist. Das machst du mit dem Befehl.

tasterstatus=digitalRead(taster);

Hier erklärst du dem Arduino dass der "tasterstatus" ein Zustand ist, der entweder AN oder AUS sein kann. Mit digitalRead fragst du einen PIN ab, an dem bei dir auf den Breadboard der Taster angeschlossen ist. Hast du den Taster gedrückt, dann wird in der Variable tasterstatus gespeichert, dass der Taster gedrückt wurde.

if (tasterstatus == HIGH)

Hier fragst du den Arduino: "Ist der Taster gedrückt worden und hat den Zustand AN/HIGH?"

Falls Ja, geht die blaue LED an.

Man könnte den Code auch kürzer schreiben und zwar so:

void loop()
{
  if (digitalRead(7) == HIGH)
  {
    digitalWrite(LEDblau, HIGH);
    delay (5000);
    digitalWrite(LEDblau, LOW);
  }
  else
  {
    digitalWrite(LEDblau, LOW);
  }
}

Funktioniert genauso. Letztendlich wird entweder der numerische Rückgabewert des Funktionsaufrufs digitalRead(xy) in einer Variable gespeichert oder direkt in der Bedingung "if" ausgewertet.

EDIT: Du willst direkt "taster == HIGH" schreiben, das geht nicht. Taster ist nur ein Integer-Wert (Zahl 7). Wenn du den dann mit HIGH (vermutlich ein Define für 0 oder 1) vergleichst, kommt immer FALSE raus. Du musst den Taster 7 der Funktion "digitalRead" übergeben, damit die dir den Zustand dieses Tasters zurückliefert. Daher ist der Aufruf notwendig.

Woher ich das weiß:Studium / Ausbildung – Masterstudium Elektrotechnik - Schwerpunkt Embedded Systems

Timpanyy  17.09.2021, 10:22

Vielleicht hilft es ihm zu wissen, dass seine Variable "taster" nur beschreibt, an welchem Data Pin auf dem Arduino sein Taster angeschlossen ist

if (taster == HIGH)

Das geht nicht. Wenn man den Code klarer schreiben würde, dann würde da stehen ganz oben

int tasterPinNummer=7;

Daraus folgt dann

if (tasterPinNummer== HIGH)

und das macht keinen Sinn.

Du kannst anstatt:

void loop()
{
tasterstatus=digitalRead(taster);
if (tasterstatus == HIGH)
{
digitalWrite(LEDblau, HIGH);
delay (5000);
digitalWrite(LEDblau, LOW);
}

auch

void loop()
{
if (digitalRead(taster) == HIGH)
{
digitalWrite(LEDblau, HIGH);
delay (5000);
digitalWrite(LEDblau, LOW);
}

schreiben. Aber das andere wird übersichtlicher und spätestens, wenn Du über serialPrint Dir DebugInfos ausgeben lassen willst, ist eine Variable sinnvoller, damit Du auch an jeder Stelle im Programmzyklus das gleiche Signal hast. Auch wenn Du den Eingang an div Stellen auswerten willst, ist eine Variable besser. Der Programmablauf erfolgt Zeilenweise. Wird ein Taster zwei mal eingelesen stat tüber eine Variable zwei mal verarbeitet, kann der Zustand am Anfang des Zyklus z.B. noch HIGH sein und am Ende des Zyklus hat sich der Zustand geändert und ist LOW. Damit hast Du innerhalb eines Programmzyklus für den gleichen EIngang zwei unterschiedliche Signale erhalten, was je nach Programm zu Fehlfunktionen führen kann und jedes Einlesen kostet extra Zeit. Macht meist keine Relevanz, wenn man aber auf µs im Zyklusablauf achten will, spart man sich noch mal ein kleines bisschen...

Und erst recht, wenn Du eine Flankenauswertung machen willst, brauchst Du zwingend variablen, also wenn etwas nur einmal beim Druck ausgeführt werden soll, egal wie lange der Taster gedrückt bleibt...