#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Maak een LCD object met adres 0x27, 16 kolommen en 2 rijen
const int ledPin = 9;
const int inButtonPin = 2;
const int outButtonPin = 3;
int roomOccupancy = 0;
bool lastInButtonState = HIGH; // Aangepast naar HIGH voor pull-up
bool lastOutButtonState = HIGH; // Aangepast naar HIGH voor pull-up
unsigned long lastInDebounceTime = 0;
unsigned long lastOutDebounceTime = 0;
const unsigned long debounceDelay = 50; // Debounce tijd in ms
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(inButtonPin, INPUT_PULLUP);
pinMode(outButtonPin, INPUT_PULLUP);
lcd.begin(16, 2); // Initialiseer het LCD scherm
lcd.backlight(); // Zet de achtergrondverlichting aan
updateDisplay(); // Toon de initiële waarde
}
void loop() {
int inButtonState = digitalRead(inButtonPin);
int outButtonState = digitalRead(outButtonPin);
// Controleer voor debounce en veranderingen in de knopstatus voor de in-knop
if (inButtonState != lastInButtonState) {
lastInDebounceTime = millis();
}
if ((millis() - lastInDebounceTime) > debounceDelay) {
if (inButtonState == LOW) { // Knop ingedrukt
roomOccupancy++;
updateDisplay();
}
}
// Controleer voor debounce en veranderingen in de knopstatus voor de uit-knop
if (outButtonState != lastOutButtonState) {
lastOutDebounceTime = millis();
}
if ((millis() - lastOutDebounceTime) > debounceDelay) {
if (outButtonState == LOW && roomOccupancy > 0) { // Knop ingedrukt en occupancy > 0
roomOccupancy--;
updateDisplay();
}
}
lastInButtonState = inButtonState;
lastOutButtonState = outButtonState;
// Zet de LED aan of uit op basis van roomOccupancy
digitalWrite(ledPin, roomOccupancy > 0 ? HIGH : LOW);
}
void updateDisplay() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Aantal personen:");
lcd.setCursor(0, 1);
lcd.print(roomOccupancy);
}