#define BLYNK_TEMPLATE_ID "TMPL3oi9kH5b0"
#define BLYNK_TEMPLATE_NAME "IoT vehicle"
#define BLYNK_AUTH_TOKEN "h_KVzHLkxzIDl2aFF9trIGPmBtsF172p"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST"; // WiFi SSID name
char pass[] = ""; // WiFi password
#define virtualignition V0
#define virtualrelay1 V1
#define virtualrelay2 V2
#define virtualrelay3 V3
#define virtualrelay4 V4
#define virtualxaxis V5
#define virtualyaxis V6
#define virtualguage V7
const int battery = A0;
const int relay1 = 32;
const int relay2 = 33;
const int relay3 = 25;
const int relay4 = 26;
const int leftclock = 23;
const int leftanti = 22;
const int rightclock = 21;
const int rightanti = 19;
int xaxis = 50;
int yaxis = 50;
int fpwm;
int bpwm;
int lpwm;
int rpwm;
int ignition;
int relay1state = LOW;
int relay2state = LOW;
int relay3state = LOW;
int relay4state = LOW;
float batteryvoltage;
bool engine;
void setup(){
Blynk.begin(auth, ssid, pass);
pinMode(battery, INPUT);
pinMode(leftclock, OUTPUT);
pinMode(leftanti, OUTPUT);
pinMode(rightclock, OUTPUT);
pinMode(rightanti, OUTPUT);
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
pinMode(relay4, OUTPUT);
}
void forward(){
analogWrite(leftclock, 0);
analogWrite(leftanti, fpwm);
analogWrite(rightclock, fpwm);
analogWrite(rightanti, 0);
}
void backward(){
analogWrite(leftclock, bpwm);
analogWrite(leftanti, 0);
analogWrite(rightclock, 0);
analogWrite(rightanti, bpwm);
}
void leftward(){
analogWrite(leftclock, lpwm);
analogWrite(leftanti, 0);
analogWrite(rightclock, lpwm);
analogWrite(rightanti, 0);
}
void rightward(){
analogWrite(leftclock, 0);
analogWrite(leftanti, rpwm);
analogWrite(rightclock, 0);
analogWrite(rightanti, rpwm);
}
BLYNK_WRITE(virtualignition){
ignition = param.asInt();
}
BLYNK_WRITE(virtualrelay1){
relay1state = param.asInt();
}
BLYNK_WRITE(virtualrelay2){
relay2state = param.asInt();
}
BLYNK_WRITE(virtualrelay3){
relay3state = param.asInt();
}
BLYNK_WRITE(virtualrelay4){
relay4state = param.asInt();
}
BLYNK_WRITE(virtualxaxis){
xaxis = param.asInt();
}
BLYNK_WRITE(virtualyaxis){
yaxis = param.asInt();
}
void loop(){
Blynk.run();
batteryvoltage = analogRead(battery);
batteryvoltage = batteryvoltage * (29.0/1023.0);
if(batteryvoltage > 28.9){
engine = true;
}
else if(batteryvoltage < 25.9){
engine = false;
}
batteryvoltage = (batteryvoltage/29) * 100;
Blynk.virtualWrite(virtualguage, batteryvoltage);
if(engine && ignition){
digitalWrite(relay1, relay1state? HIGH: LOW);
digitalWrite(relay2, relay2state? HIGH: LOW);
digitalWrite(relay3, relay3state? HIGH: LOW);
digitalWrite(relay4, relay4state? HIGH: LOW);
if(yaxis > 50){
fpwm = map(yaxis, 50, 100, 0, 255);
forward();
}
else if(yaxis < 50){
bpwm = map(yaxis, 50, 0, 0, 255);
backward();
}
if(xaxis > 50){
rpwm = map(xaxis, 50, 100, 0, 255);
rightward();
}
else if(xaxis < 50){
lpwm = map(xaxis, 50, 0, 0, 255);
leftward();
}
}
}