#define BLYNK_TEMPLATE_ID "TMPL64ftw-bBX"
#define BLYNK_TEMPLATE_NAME "Project ChemTex"
#define BLYNK_AUTH_TOKEN "l_oPs5mLHjAOQrI98W305gbvw-BIPA9W"// CHANGE 3 FIRST LAYER FOLLOW BLYNK CODE
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int metalsensor_PIN = 34;
int led_green = 32;
int led_red = 33;
int buzzer_Pin = 25;
int buzzer_channel = 0;
BlynkTimer timer;
void setup() {
Wire.begin(23, 22);
Serial.begin(115200);
lcd.init();
lcd.backlight();
pinMode(metalsensor_PIN, INPUT);
pinMode(led_green, OUTPUT);
pinMode(led_red, OUTPUT);
pinMode(buzzer_Pin, OUTPUT);
ledcAttachPin(buzzer_Pin, buzzer_channel);
lcd.setCursor(1,0);
lcd.print("METAL DETECTOR");
lcd.setCursor(5,1);
lcd.print("SENSOR");
delay(5000);
lcd.clear();
Blynk.begin(auth, ssid, pass);
timer.setInterval(500, sendSensor);
}
void sendSensor() {
float metalLevel = map(analogRead(metalsensor_PIN), 0, 4095, 0, 1000);
Blynk.virtualWrite(V0, metalLevel);// CHANGE V0 IF NECESSARY- IKUT BLYNK PUNYA
String metalMsg;
if (metalLevel < 500) {
metalMsg = "NO";
} else {
metalMsg = "YES";
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("METAL: ");
lcd.print(metalMsg);
lcd.setCursor(0, 1);
lcd.print("READING: ");
lcd.print(metalLevel);
Serial.print("READING: ");
Serial.println(metalLevel);
delayWithMillis(500);
if (metalLevel < 500) {
digitalWrite(led_green, HIGH);
Blynk.virtualWrite(V1, HIGH);// CHANGE V1 IF NECESSARY- IKUT BLYNK PUNYA
digitalWrite(led_red, LOW);
Blynk.virtualWrite(V2, HIGH);// CHANGE V2 IF NECESSARY- IKUT BLYNK PUNYA
} else {
digitalWrite(led_green, LOW);
Blynk.virtualWrite(V1, HIGH);// CHANGE V1 IF NECESSARY- IKUT BLYNK PUNYA
digitalWrite(led_red, HIGH);
Blynk.virtualWrite(V2, HIGH);// CHANGE V2 IF NECESSARY- IKUT BLYNK PUNYA
playBuzzer();
}
}
void playBuzzer() {
ledcWriteNote(buzzer_channel, (note_t)NOTE_D, 8);
tone(buzzer_Pin, 450);
delay(10);
noTone(buzzer_Pin);
delay(10);
}
void delayWithMillis(unsigned long ms)
{
unsigned long currentMillis = millis();
while (millis() - currentMillis < ms)
{
// Do nothing, just wait
}
}
void loop() {
Blynk.run();
timer.run();
}