/*
  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);
    }
  }
}