#include <ezButton.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
HTTPClient http;
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const String serverUrl = "http://129.151.244.160/API/";
unsigned const long interval = 2000;
unsigned long zero = 0;
int CLK_PIN= 25 , DT_PIN =26 , SW_PIN =27, DIRECTION_CW =0 , DIRECTION_CCW=1 ;
int counter = 0, direction = DIRECTION_CW;
int CLK_state, prev_CLK_state;
int lcdColumns = 16, lcdRows = 2;
int id = 1 ;
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);
ezButton button(SW_PIN);
void setup() {
initProject();
getRecords();
}
void loop() {
button.loop();
CLK_state = digitalRead(CLK_PIN);
if (CLK_state != prev_CLK_state && CLK_state == HIGH) {
if (digitalRead(DT_PIN) == HIGH) {
counter++;
}
lcd.setCursor(0, 0);
lcd.print("Distance: ");
lcd.setCursor(0, 1);
lcd.print(counter);
}
prev_CLK_state = CLK_state;
}
void wifiConnect(){
Serial.begin(115200);
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED){
delay(100);
Serial.println(".");
}
}
void initLCD(){
lcd.init();
lcd.backlight();
}
void initSensor(){
pinMode(CLK_PIN, INPUT);
pinMode(DT_PIN, INPUT);
button.setDebounceTime(50);
prev_CLK_state = digitalRead(CLK_PIN);
}
void initProject(){
wifiConnect();
initLCD();
initSensor();
}
void getRecords(){
if(millis()-zero > interval){
String link = serverUrl+"getRecords.php?id"+id;
http.begin(link);
int httpResponCode = http.GET();
if(httpResponCode > 0){
String payload = http.getString();
Serial.println(payload);
char json[500];
payload.toCharArray(json,500);
StaticJsonDocument <200> doc ;
deserializeJson(doc,json);
lcd.setCursor(0, 0);
lcd.print("Distance: ");
lcd.setCursor(0, 1);
int distance = doc["distance"] ;
lcd.print(distance);
lcd.print("cm");
}else{
Serial.print("error ");
Serial.println(httpResponCode);
}
zero = millis();
}
}