// MACRO-START * MACRO-START * MACRO-START * MACRO-START * MACRO-START * MACRO-START *
// a detailed explanation how these macros work is given in this tutorial
// https://forum.arduino.cc/t/comfortable-serial-debug-output-short-to-write-fixed-text-name-and-content-of-any-variable-code-example/888298
#define dbg(myFixedText, variableName) \
Serial.print( F(#myFixedText " " #variableName"=") ); \
Serial.println(variableName);
#define dbgi(myFixedText, variableName,timeInterval) \
{ \
static unsigned long intervalStartTime; \
if ( millis() - intervalStartTime >= timeInterval ){ \
intervalStartTime = millis(); \
Serial.print( F(#myFixedText " " #variableName"=") ); \
Serial.println(variableName); \
} \
}
#define dbgc(myFixedText, variableName) \
{ \
static long lastState; \
if ( lastState != variableName ){ \
Serial.print( F(#myFixedText " " #variableName" changed from ") ); \
Serial.print(lastState); \
Serial.print( F(" to ") ); \
Serial.println(variableName); \
lastState = variableName; \
} \
}
#define dbgcf(myFixedText, variableName) \
{ \
static float lastState; \
if ( lastState != variableName ){ \
Serial.print( F(#myFixedText " " #variableName" changed from ") ); \
Serial.print(lastState); \
Serial.print( F(" to ") ); \
Serial.println(variableName); \
lastState = variableName; \
} \
}
// MACRO-END * MACRO-END * MACRO-END * MACRO-END * MACRO-END * MACRO-END * MACRO-END *
#include <LiquidCrystal.h>
// LCD-Pins definieren: (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
const int buttonPin = 2; // Taster an Pin 2
bool isOccupied = false; // Statusvariable
void setup() {
Serial.begin(115200);
Serial.println("Setup-Start");
pinMode(buttonPin, INPUT_PULLUP); // Aktiviert internen Pull-up-Widerstand
lcd.begin(16, 2); // Initialisiert das LCD (16x2)
lcd.setCursor(0, 0);
lcd.print("Status: Frei"); // Zeigt initial "Frei" an
}
void loop() {
static bool lastButtonState = HIGH; // Zustand des Tasters speichern
bool currentButtonState = digitalRead(buttonPin);
//dbgc("ToL",digitalRead(buttonPin) );
dbgi("ToL2",digitalRead(buttonPin),1000);
// Tasterstatus prüfen (fallende Flanke)
if (lastButtonState == HIGH && currentButtonState == LOW) {
isOccupied = !isOccupied; // Zustand wechseln
lcd.clear(); // Display leeren
if (isOccupied) {
lcd.print("Status: Besetzt");
} else {
lcd.print("Status: Frei");
}
}
lastButtonState = currentButtonState; // Status aktualisieren
delay(50); // Entprellung
}