#define BLYNK_TEMPLATE_ID "TMPL6YARmsD7Q"
#define BLYNK_TEMPLATE_NAME "control led"
#define BLYNK_AUTH_TOKEN "ZbS1MeGFdjePjGMALq00yb4_tlu3OOGW"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <ESP32Servo.h>
#include <Wire.h> //oled
//#include <Adafruit_GFX.h> //oled
#include <Adafruit_SSD1306.h> //oled
#include "DHT.h"
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
Adafruit_SSD1306 display(128, 64, &Wire, -1); //library function
//DHT dht;
//FUNCTION DEFINED//
void display_welcome_message();
bool detect_button(int);
void display_putting();
void display_boiling();
void display_temp(float);
void servo_motor(int);
void display_choice1();
void display_choice2();
void display_choice3();
void display_choice4();
void display_pour();
void display_select_coffee();
float detect_analog();
void display_done();
const float BETA = 3950;
const int button1 = 1;
const int button2 = 2;
const int button3 = 3;
const int button4 = 4;
const int ir_sensor = 12;
const int relay_module = 16;
const int DHT22PIN = 13;
//const int temp_sensor = 15;
const int servoPin1 = 18;
const int servoPin2 = 19;
const int servoPin3 = 17;
const int servoPin4 = 23;
const int servoPin5 = 25;
bool state1 = 1;
bool state2 = 1;
bool state3 = 1;
bool state4 = 1;
DHT dht(DHT22PIN, DHT22);
int analogValue = 0;
String choices ="";
void setup()
{
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
//dht.setup(13);
dht.begin();
}
void loop() {
delay(10); // this speeds up the simulation
display_welcome_message();
while(true)
{
state1 = detect_button(button1);
if(state1==0)
break;
}
display_select_coffee();
while(true)
{
state2 = detect_button(button2);
delay(100);
if(state2 ==0)
break;
state3 = detect_button(button3);
delay(100);
if(state3 ==0)
break;
state4 = detect_button(button4);
delay(100);
if(state4==0)
break;
}
if(state2 ==0)
{
display_choice1();
choices = "latte";
}
delay(10);
if(state3 ==0)
{
display_choice2();
choices = "mocha";
}
delay(10);
if(state4 ==0)
{
display_choice3();
choices = "expresso";
}
bool state5 = 0;
while(true)
{
servo_motor(servoPin5); // putting cup
delay(1000);
state5 = detect_button(ir_sensor);
if (state1 == 0 && state5==1 && (state2 == 0 || state3 ==0 || state4 == 0))
{
display_putting();
Blynk.virtualWrite(V1, 1);
delay(100);
display_boiling();
Blynk.virtualWrite(V1, 0);
Blynk.virtualWrite(V2, 1);
pinMode(relay_module, OUTPUT); //on the relay to heat the water
digitalWrite(relay_module, LOW); //-
break;
}
}
while(true)
{
int pinState = digitalRead(relay_module); //
float celsius = detect_analog();
if (celsius >= 60 && pinState == 0)
{
//Serial.println("Inside");
digitalWrite(relay_module, HIGH); //turn off relay
display_select_coffee();
break;
}
else if(celsius <=60 && pinState == 0)
{
while(celsius<=60)
{
celsius = detect_analog();
display_temp(celsius);
}
}
delay(200);
if(choices=="latte")
{
delay(100);
servo_motor(servoPin2);
delay(1000);
Blynk.virtualWrite(V2, 0);
display_pour();
Blynk.virtualWrite(V3, 1);
servo_motor(servoPin1);
delay(100);
Blynk.virtualWrite(V3, 0);
display_done();
Blynk.virtualWrite(V4, 1);
delay(100);
Blynk.virtualWrite(V4, 0);
break;
}
// state2 = 1;
// state2 = detect_button(button3);
delay(500);
if(choices=="mocha")
{
delay(100);
servo_motor(servoPin3);
delay(1000);
Blynk.virtualWrite(V2, 0);
display_pour();
Blynk.virtualWrite(V3, 1);
servo_motor(servoPin1);
delay(100);
Blynk.virtualWrite(V3, 0);
display_done();
Blynk.virtualWrite(V4, 1);
delay(100);
Blynk.virtualWrite(V4, 0);
break;
}
// state2 = 1;
// state2 = detect_button(button4);
delay(500);
if(choices == "expresso")
{
delay(100);
servo_motor(servoPin4);
delay(1000);
Blynk.virtualWrite(V2,0);
display_pour();
Blynk.virtualWrite(V3, 1);
servo_motor(servoPin1);
delay(100);
Blynk.virtualWrite(V3, 0);
display_done();
Blynk.virtualWrite(V4, 1);
delay(100);
Blynk.virtualWrite(V4, 0);
break;
}
}
}
void display_welcome_message()
{
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3c))
{
Serial.write("failed loading....");
while (true);
}
delay(1000);
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0, 10);
display.setTextColor(WHITE);
display.println("WELCOME TO CAFE");
display.display();
delay(1000);
display.clearDisplay();
display.setCursor(0, 10);
display.setTextColor(WHITE);
display.println("PRESS BUTTON TO START");
display.display();
}
bool detect_button(int button)
{
bool state;
pinMode(button, INPUT_PULLUP);
state = digitalRead(button);
return state;
}
float detect_analog()
{
float celsius = dht.readTemperature();
return celsius;
}
// float detect_analog()
// {
// analogReadResolution(10);
// analogValue = analogRead(temp_sensor);
// //const float BETA = 3950;
// float celsius = 1 / (log(1 / (1023.0 / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
// //float celsius = analogValue;
// // Serial.println("analogValue");
// // Serial.println(analogValue);
// return celsius;
// }
void display_putting()
{
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3c))
{
Serial.write("failed loading....");
while (true);
}
delay(1000);
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0, 10);
display.setTextColor(WHITE);
display.println("Putting cup!");
display.display();
}
void display_boiling()
{
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3c))
{
Serial.write("failed loading....");
while (true);
}
delay(1000);
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0, 10);
display.setTextColor(WHITE);
display.println("Boiling...");
display.display();
}
void display_temp(float celsius)
{
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3c))
{
Serial.write("failed loading....");
while (true);
}
delay(1000);
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0, 10);
display.setTextColor(WHITE);
display.println("Temperatur: ");
display.println(celsius);
display.println("℃");
display.display();
}
void display_select_coffee()
{
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3c))
{
Serial.write("failed loading....");
while (true);
}
delay(1000);
display.clearDisplay();
display.setTextSize(1.9);
display.setCursor(0, 10);
display.setTextColor(WHITE);
display.println("PLS Select coffee");
display.println("1)Latte 2)Mocha 3)Expresso");
display.display();
}
void servo_motor(int servoPin)
{
pinMode(servoPin, OUTPUT);
for(int x=0;x<=100;x++)
{
// Send the pulse to the servo
digitalWrite(servoPin, HIGH);
delayMicroseconds(2400);
digitalWrite(servoPin, LOW);
// Wait for the remainder of the 20ms period
delayMicroseconds(10000);}
for(int x=0;x<=80;x++)
{
// Send the pulse to the servo
digitalWrite(servoPin, HIGH);
delayMicroseconds(1400);
digitalWrite(servoPin, LOW);
// Wait for the remainder of the 20ms period
delayMicroseconds(10000);
}
}
void display_choice1()
{
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3c))
{
Serial.write("failed loading....");
while (true);
}
delay(1000);
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0, 10);
display.setTextColor(WHITE);
display.println("Choosing Latte");
display.display();
}
void display_choice2()
{
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3c))
{
Serial.write("failed loading....");
while (true);
}
delay(1000);
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0, 10);
display.setTextColor(WHITE);
display.println("Choosing Mocha");
display.display();
}
void display_choice3()
{
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3c))
{
Serial.write("failed loading....");
while (true);
}
delay(1000);
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0, 10);
display.setTextColor(WHITE);
display.println("Choosing Espresso");
display.display();
}
void display_pour()
{
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3c))
{
Serial.write("failed loading....");
while (true);
}
delay(1000);
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0, 10);
display.setTextColor(WHITE);
display.println("Pouring...");
display.display();
}
void display_done()
{
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3c))
{
Serial.write("failed loading....");
while (true);
}
delay(1000);
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 10);
display.setTextColor(WHITE);
display.println("Done..Pls enjoy your coffee");
display.display();
}