#define BLYNK_TEMPLATE_ID "TMPL6hZwKMlI_"
#define BLYNK_TEMPLATE_NAME "RECYCLE VENDING MACHINE"
#define BLYNK_AUTH_TOKEN "Ma9MmO5q2aqjyn_hFRS8oJUcVJM44i2V"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
#include <Wire.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
#define pushbutton 4,15,13,12
#define BUZZER 25
LiquidCrystal_I2C lcd(0x27,20,4);
Servo myservo;
int servoPin = 33;
int checkbalance = 0;
String DATA = "";
String content = "";
float total = 0;
int flag1 = 0;
int flag2 = 0;
int flag3 = 0;
int flag4 = 0;
int flag5 = 0;
int MODE = 0;
int count = 0;
int noty1 = 0;
int noty2 = 0;
void setup() {
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
pinMode(4,INPUT_PULLUP);
pinMode(15,INPUT_PULLUP);
pinMode(14,INPUT);
pinMode(26,INPUT);
pinMode(13,INPUT_PULLUP);
pinMode(12,INPUT_PULLUP);
pinMode(BUZZER,OUTPUT);
myservo.setPeriodHertz(50);
myservo.attach(servoPin);
digitalWrite(BUZZER,LOW);
myservo.write(90);
delay(1000);
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print(" RECYCLE VENDING ");
lcd.setCursor(0,1);
lcd.print(" MACHINE ");
}
void loop()
{
Blynk.run();
int NONMETAL = digitalRead(15);
int METAL = digitalRead(4);
int IRNONMETAL = digitalRead(14);
int IRMETAL = digitalRead(26);
Serial.print("IR NON METAL:" + String(IRNONMETAL) + " - IR METAL:" + String(IRMETAL) + " ");
Serial.println("NON METAL:" + String(NONMETAL) + " - METAL:" + String(METAL) + " ");
if(IRNONMETAL == 0 && noty1 == 0){
noty1 = 1;
Blynk.logEvent("noty", "BOTTLE BASKET IS FULL");
}
else if(IRNONMETAL == 1 && noty1 == 1){
noty1 = 0;
}
if(IRMETAL == 0 && noty2 == 0){
noty2 = 1;
Blynk.logEvent("noty", "CAN BASKET IS FULL");
}
else if(IRMETAL == 1 && noty2 == 1){
noty2 = 0;
}
if(digitalRead(13) == LOW && flag2 == 0){
while(digitalRead(13) == LOW){
}
flag2 = 1;
MODE = 1;
delay(1000);
lcd.setCursor(0,2);
lcd.print(" PLEASE ENTER ITEM ");
}
else if(digitalRead(13) == LOW && flag2 == 1){
while(digitalRead(13) == LOW){
}
flag2 = 0;
MODE = 0;
delay(1000);
lcd.setCursor(0,2);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print(" ");
}
if(digitalRead(15) == LOW && flag1 == 0){
while(digitalRead(15) == LOW){
}
flag1 = 1;
MODE = 1;
delay(1000);
total = total + 0.30;
lcd.setCursor(0,3);
lcd.print(" CAN ");
lcd.setCursor(10,3);
lcd.print("T:RM" + String(total) + " ");
myservo.write(0);
delay(1000);
delay(3000);
myservo.write(90);
delay(1000);
}
else if(digitalRead(15) == LOW && flag1 == 1){
while(digitalRead(15) == LOW){
}
flag1 = 0;
MODE = 0;
delay(1000);
lcd.setCursor(0,2);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print(" ");
}
if(digitalRead(4) == LOW && flag3 == 0){
while(digitalRead(4) == LOW){
}
flag3 = 1;
MODE = 1;
delay(1000);
total = total + 0.20;
lcd.setCursor(0,3);
lcd.print(" BOTTLE ");
lcd.setCursor(10,3);
lcd.print("T:RM" + String(total) + " ");
myservo.write(180);
delay(1000);
delay(3000);
myservo.write(90);
delay(1000);
}
else if(digitalRead(4) == LOW && flag3 == 1){
while(digitalRead(4) == LOW){
}
flag3 = 0;
MODE = 0;
delay(1000);
lcd.setCursor(0,2);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print(" ");
}
if(digitalRead(13) == LOW && flag5 == 0){
while(digitalRead(13) == LOW){
}
flag5 = 1;
MODE = 1;
delay(1000);
lcd.setCursor(0, 2);
lcd.print(" YOUR CARD ADDED ");
lcd.setCursor(0, 3);
lcd.print(" TOTAL:RM" + String(total) + " ");
delay(3000);
lcd.setCursor(0, 2);
lcd.print(" THANK YOU ");
lcd.setCursor(0,3);
lcd.print(" ");
delay(2000);
lcd.setCursor(0, 2);
lcd.print(" ");
MODE = 0;
checkbalance = 0;
}
else if(digitalRead(13) == LOW && flag5 == 1){
while(digitalRead(13) == LOW){
}
flag5 = 0;
MODE = 0;
delay(1000);
lcd.setCursor(0,2);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print(" ");
}
if(digitalRead(12) == LOW && flag4 == 0){
while(digitalRead(12) == LOW){
}
flag4 = 1;
MODE = 1;
delay(1000);
lcd.setCursor(0,2);
lcd.print(" CHECK BALANCE ");
lcd.setCursor(0,3);
lcd.print(" RM:" + String(total) + " ");
delay(3000);
lcd.setCursor(0,2);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print(" ");
checkbalance = 1;
}
else if(digitalRead(12) == LOW && flag4 == 1){
while(digitalRead(12) == LOW){
}
flag4 = 0;
MODE = 0;
delay(1000);
lcd.setCursor(0,2);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print(" ");
checkbalance = 0;
}
}