#define BLYNK_TEMPLATE_ID "TMPL64ZffXxdf"
#define BLYNK_TEMPLATE_NAME "Wokwi"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char auth[] = "3WfHOBhLmfucCULspYiUbpy98CY57g5i";
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
#define OLED_RESET -1
Adafruit_SSD1306 display(OLED_RESET);
#define POTENTIOMETER_PIN 34
const int updateInterval = 500;
#define FLOW_FACTOR 1
unsigned long previousMillis = 0;
float totalVolume = 0.0;
int flowRate = 0.0;
const float maxTotalVolume = 10000.0;
float potMinValue = 0.0; // Nilai minimal potensiometer
float potMaxValue = 4095.0; // Nilai maksimal potensiometer
float flowRateMin = 0.0; // Nilai minimal laju aliran
float flowRateMax = 30.0; // Nilai maksimal laju aliran
BlynkTimer timer;
void readPotentiometer()
{
int potValue = analogRead(POTENTIOMETER_PIN);
float flowRate = map(potValue, potMinValue, potMaxValue, flowRateMin, flowRateMax);
// Mengonversi nilai potensiometer ke rentang yang ditentukan
flowRate = potValue ;
totalVolume += flowRate * (updateInterval / 1000.0);
}
void sendSensorData()
{
Blynk.virtualWrite(V1, flowRate);
Blynk.virtualWrite(V2, totalVolume);
}
void setup()
{
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Inisialisasi OLED dengan alamat 0x3C
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(1);
display.setCursor(0, 0);
display.println("Flowmeter Simulation:");
display.display();
timer.setInterval(10L, readPotentiometer);
timer.setInterval(10L, sendSensorData);
}
void loop()
{
Blynk.run();
timer.run();
flowRate = analogRead(34) ;
display.clearDisplay();
display.setCursor(0, 10);
display.print("Debit: ");
display.print(flowRate);
display.print("L/m");
display.setCursor(0, 32);
display.print("Volume: ");
display.print(totalVolume);
display.print("L");
display.display();
}