#include <Wire.h>
#include <WiFi.h>
#include <LiquidCrystal_I2C.h>
#define NEXT_BUTTON 13
#define VOTE_BUTTON 12
#define BUZZER_PIN 14
const char* ssid = "Duchesse";
const char* password = "yaya2002@";
String serverUrl = "http://172.20.10.4:5000";
String candidatesUrl = "http://172.20.10.4:5000/dashboard"; // Fixed URL
LiquidCrystal_I2C lcd(0x27, 16, 2);
int currentCandidate = 0;
String candidateNames[10];
String candidateParties[10];
int totalCandidates = 0;
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
pinMode(NEXT_BUTTON, INPUT);
pinMode(VOTE_BUTTON, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
lcd.setCursor(0, 0);
lcd.print("Fetching data...");
requestCandidates(); // ask Python for candidate info
}
void loop() {
if (Serial.available()) {
String line = Serial.readStringUntil('\n');
if (line.startsWith("DATA:")) {
parseCandidateData(line.substring(5)); // strip "DATA:"
displayCandidate();
}
}
if (digitalRead(NEXT_BUTTON) == HIGH) {
currentCandidate = (currentCandidate + 1) % totalCandidates;
displayCandidate();
delay(300);
}
if (digitalRead(VOTE_BUTTON) == HIGH) {
tone(BUZZER_PIN, 1000, 200);
lcd.clear();
lcd.print("Voted for:");
lcd.setCursor(0, 1);
lcd.print(candidateNames[currentCandidate]);
delay(1000);
displayCandidate();
}
}
void requestCandidates() {
// Send a message to indicate we are requesting candidates
Serial.println("GET_CANDIDATES");
}
void parseCandidateData(String payload) {
totalCandidates = 0;
int index = 0;
while (payload.length()) {
int sep = payload.indexOf(',');
String pair = (sep == -1) ? payload : payload.substring(0, sep);
int mid = pair.indexOf('|');
candidateNames[index] = pair.substring(0, mid);
candidateParties[index] = pair.substring(mid + 1);
index++;
totalCandidates++;
if (sep == -1) break;
payload = payload.substring(sep + 1);
}
}
void displayCandidate() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(candidateNames[currentCandidate]);
lcd.setCursor(0, 1);
lcd.print(candidateParties[currentCandidate]);
}