/*
Sketch: Taster_abfragen
Datum: 07.04.2024
Zweck: Den Status eines Tasters abfragen. Mit dem Taster
die LED an PIN 13 an- und ausschalten.
Autor: MIWIS
*/
// TASTER_PIN_10 ist eine Konstante mit dem Wert 10
#define TASTER_PIN_10 10
void setup() {
Serial.begin(9600);
/*
Mit "INPUT_PULLUP" aktivieren wir den internen
Pullup-Widerstand und ziehen das Signal auf HIGH.
Das bedeutet, in ungedrücktem Zustand ist das
Signal "HIGH". Drücken wir den Taster, stellen wir
eine Verbindung mit GND her und ziehen somit das
Signal auf LOW.
Der interne Pullup Widerstand verhindert, dass auf
PIN 10 keine Spannung vorhanden ist. Das ist ungefähr
so, als ob ein Wasserhahn geschlosen ist. In der
Wasserleitung gibt es einen Druck. Wenn wir den
Wasserhahn umgehen, sinkt der Druck auf NULL (LOW).
HIGH bedeutet, es liegt eine Spannung an PIN 10
LOW bedeutet, es liegt keine Spannung an PIN 10
Übrigens, das ist ein typisches Beispiel für eine
digitale Abfrage!
*/
pinMode(TASTER_PIN_10, INPUT_PULLUP);
pinMode(13, OUTPUT);
Serial.println("Taster noch nicht gedrückt");
char buffer[0];
// dynamischer Speicher wird generiert
sprintf(buffer, "INPUT_PULLUP = %d", INPUT_PULLUP);
Serial.println(buffer);
}
int Taster_Status = HIGH;
void loop() {
int taster_wert = digitalRead(TASTER_PIN_10);
delay(10);
/*
Wenn "Taster_Status == taster_wert", darf nichts auf
dem seriellen Monitor ausgegeben werden. Der Zustand
des Tasters hat sich ja nicht verändert.
*/
// != bedeutet "nicht gleich oder ungleich"
if (Taster_Status != taster_wert) {
// beide Variablen sind jetzt identisch
Taster_Status = taster_wert;
// Achtung, bei Vergleichen immer "==" verwenden
// "=" bedeutet der Variablen wird ein Wert zugewiesen
if (Taster_Status == HIGH) {
Serial.println("Taster losgelassen");
digitalWrite(13, LOW);
}
if (Taster_Status == LOW) {
Serial.println("Taster gedrückt");
digitalWrite(13, HIGH);
}
}
}