#include <WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Credenziali WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Simulazione sensori
int sensorEntrance = 15; // GPIO 15 per il sensore di ingresso
int sensorExit = 2; // GPIO 2 per il sensore di uscita
int peopleCount = 0;
// Display LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // Indirizzo I2C: 0x27, dimensione: 16x2
// Variabili server
WiFiServer server(80);
void setup() {
Serial.begin(115200);
// Configurazione sensori
pinMode(sensorEntrance, INPUT_PULLUP);
pinMode(sensorExit, INPUT_PULLUP);
// Configurazione display
lcd.init(); // Inizializza il display
lcd.backlight(); // Attiva la retroilluminazione
lcd.clear();
lcd.print("Inizializzazione...");
delay(2000);
lcd.clear();
// Connessione WiFi
lcd.print("Connecting...");
WiFi.begin(ssid, password);
unsigned long startAttemptTime = millis();
while (WiFi.status() != WL_CONNECTED && millis() - startAttemptTime < 10000) {
delay(500);
Serial.print(".");
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nWiFi Connected!");
lcd.clear();
lcd.print("WiFi Connected!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
} else {
Serial.println("\nWiFi Connection Failed!");
lcd.clear();
lcd.print("WiFi Failed!");
}
// Avvio server
server.begin();
Serial.println("Server started");
}
void loop() {
if (digitalRead(sensorEntrance) == LOW) {
peopleCount++;
Serial.println("Pulsante ingresso premuto");
updateDisplay();
delay(500); // Debounce
}
if (digitalRead(sensorExit) == LOW && peopleCount > 0) {
peopleCount--;
Serial.println("Pulsante uscita premuto");
updateDisplay();
delay(500); // Debounce
}
}
void updateDisplay() {
lcd.clear();
lcd.print("In coda: ");
lcd.print(peopleCount);
delay(1000); // Piccolo ritardo per evitare flickering
}