anything below this 4090, even 0, or above 3500, to infinity, will go forward. "bound" the two values (3500 and 4090) with && between the conditions.
I updated this simulation with the "&&" change. Much more needs fixing.
Click for code...
sketch.ino for wokwi.com
...
// Firefighting car direction from flame sensor
/*
for now i didnt test much the gas, i am focusing on the the front sensor ordeal.
front sensor triggered----> car move forward towards the ir 3500 value and stops.
then active water pump till front sensor untriggred. < 2500
right,left sensor triggered----> car turn in the corresponding direction,
and stop when front sensor in front of the flame.
gas sensor triggered - car doing 360 turn to find the flame with the front sensor.
say it found the flame in the 150 angle, car stop the 360 turn.
*/
// Setting Motor A
int enable1Pin = 14;
int motor1Pin1 = 27;
int motor1Pin2 = 26;
//Settin Motor B
int enable2Pin = 32;
int motor2Pin3 = 25;
int motor2Pin4 = 33;
// define pins for flame sensor
#define FlamePinForwardAnlog 4
#define FlamePinRight 15
#define FlamePinLeft 16
#define FlamePinForward 17
#define GasSensor 18
#define PUMP_RELAY_PIN 12
//pins for siren led and buzzer
#define LedBlue 2
#define LedRed 21
#define Buzzer 19
//vars for falme sensor read
int FlameCheckForwardAnalog;
int FlameCheckForawrd;
int FlameCheckRight;
int FlameCheckLeft;
//vars for gas sensor read
int GasCheck;
int three60forward = 0;//var for 360 turn
//time vars for front sensor trigger and movement forward
const unsigned long eventCarMovementInterval = 200;
unsigned long previouseventCarMovement = 0;
//time vars for front sensor trigger and movment left and right
const unsigned long eventCarSideMovementInterval = 200;
unsigned long previouseventCarSideMovement = 0;
//time vars for siren
const unsigned long eventSirenInterval = 500;
unsigned long previousEventSiren = 0;
//time vars for water pump
const unsigned long eventPumpInterval = 500;
unsigned long previousEventPump = 0;
//var for movement forward on the gas condition
const unsigned long eventCarMovementGasInterval = 2500;
unsigned long previouseventGasCarMovement = 0;
void setup() {
pinMode (PUMP_RELAY_PIN, OUTPUT);
//modding motor A
pinMode(enable1Pin, OUTPUT);
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
//modding Motor B
pinMode(enable2Pin, OUTPUT);
pinMode(motor2Pin3, OUTPUT);
pinMode(motor2Pin4, OUTPUT);
//setting flame sensor as input
pinMode(FlamePinForwardAnlog, INPUT);
pinMode(FlamePinRight, INPUT_PULLUP);
pinMode(FlamePinLeft, INPUT_PULLUP);
pinMode(FlamePinForward, INPUT_PULLUP);
//setting gas sensor as input
pinMode(GasSensor, INPUT_PULLUP);
//setting siren for right
pinMode(LedBlue, OUTPUT); //defined port for right leds
pinMode(LedRed, OUTPUT);
pinMode(Buzzer, OUTPUT); // port front buzzer
// initaite serial monitor
Serial.begin(9600);
}
void loop() {
unsigned long currentTime = millis();
//vars for storing flame sensor vlaues
FlameCheckForwardAnalog = analogRead(FlamePinForwardAnlog);
FlameCheckRight = digitalRead(FlamePinRight);
FlameCheckLeft = digitalRead(FlamePinLeft);
GasCheck = digitalRead(GasSensor);
delay(150); // need a button debounce function
sensorTest();
if (FlameCheckForwardAnalog > 3500 && FlameCheckForwardAnalog < 4090) {
if (currentTime - previouseventCarMovement >= eventCarMovementInterval) {
Serial.print("Flame F | ");
StopCar();
previouseventCarMovement = currentTime;
}
if (currentTime - previousEventSiren >= eventSirenInterval) {
Serial.print("siren 1 | ");
sirenOn(LedBlue, LedRed, Buzzer);
previousEventSiren = currentTime;
}
}
else if (FlameCheckForwardAnalog > 2500) { //turn pump on while in front sensor triggred
if (currentTime - previousEventPump >= eventPumpInterval ) {
Serial.print("pump 1 | ");
digitalWrite(PUMP_RELAY_PIN, HIGH);
previousEventSiren = currentTime;
}
}
else if (FlameCheckRight == LOW) {
if (currentTime - previouseventCarSideMovement >= eventCarSideMovementInterval) {
Serial.print("Flame R | ");
while (FlameCheckForawrd == LOW) {
CAR_turnRightWifi();
Serial.print("siren 2 | ");
sirenOn(LedBlue, LedRed, Buzzer);
previouseventCarSideMovement = currentTime;
}
}
}
else if (FlameCheckLeft == LOW) {
if (currentTime - previouseventCarSideMovement >= eventCarSideMovementInterval) {
Serial.print("Flame L | ");
while (FlameCheckForawrd == LOW) {
FlameCheckForawrd = digitalRead(FlamePinForward);
CAR_turnLeftWifi();
Serial.print("siren 3 | ");
sirenOn(LedBlue, LedRed, Buzzer);
previouseventCarSideMovement = currentTime;
}
}
}
else if (GasCheck == LOW) {
if (currentTime - previousEventSiren >= eventSirenInterval) {
Serial.print("siren 4 | ");
sirenOn(LedBlue, LedRed, Buzzer);
previousEventSiren = currentTime;
}
if (three60forward < 20) {
Serial.print("gas360 ");
if (three60forward < 10) Serial.print(" ");
Serial.print(three60forward);
Serial.print(" | ");
CAR_turnRightWifi();
three60forward++;
}
else {
CAR_moveForwardWifi();
delay(1000); // move forward for one second
three60forward = 0;
}
}
else // what is this "else" doing?
{ Serial.print("pump 0 | ");
digitalWrite(PUMP_RELAY_PIN, LOW);
Serial.print("siren 0 | ");
sirenoff(LedBlue, LedRed, Buzzer);
StopCar();
}
Serial.print("Flame ");
if (FlameCheckForwardAnalog < 1000) Serial.print(" ");
if (FlameCheckForwardAnalog < 100) Serial.print(" ");
if (FlameCheckForwardAnalog < 10) Serial.print(" ");
Serial.print(FlameCheckForwardAnalog);
Serial.println(" | (end)");
}
// stop car
void StopCar() {
Serial.print("Car 0 | ");
int pwmL = 0, pwmR = 0; showPWM(pwmL, pwmR);
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin3, LOW);
digitalWrite(motor2Pin4, LOW);
}
void CAR_moveForwardWifi() {
Serial.print("Car F | ");
int pwmL = 200, pwmR = 200; showPWM(pwmL, pwmR);
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, HIGH);
digitalWrite(motor2Pin3, HIGH);
digitalWrite(motor2Pin4, LOW);
}
void CAR_moveBackwardWifi() {
Serial.print("Car B | ");
int pwmL = 100, pwmR = 100; showPWM(pwmL, pwmR);
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin3, LOW);
digitalWrite(motor2Pin4, HIGH);
}
void CAR_turnLeftWifi() {
Serial.print("Car L | ");
int pwmL = 200, pwmR = 0; showPWM(pwmL, pwmR);
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, HIGH);
digitalWrite(motor2Pin3, LOW);
digitalWrite(motor2Pin4, LOW);
}
void CAR_turnRightWifi() {
Serial.print("Car R | ");
int pwmL = 0, pwmR = 200; showPWM(pwmL, pwmR);
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin3, HIGH);
digitalWrite(motor2Pin4, LOW);
}
void sensorTest() {
Serial.print("12:");
Serial.print(digitalRead(12)); // pump relay
Serial.print(" ");
for (int i = 0; i < 4; i++) {
Serial.print(i + 15);
Serial.print(":");
Serial.print(digitalRead(i + 15)); // read sensors
Serial.print(" ");
}
Serial.print("| ");
}
void sirenOn(int Led1Pin, int Led2Pin, int BuzzerPin) {
int i;
// for (int i = 700; i < 800; i++) { // duration of the first sound 350 2 millisecond cycles.
// tone(BuzzerPin, i);
delay(15);
digitalWrite(Led1Pin, HIGH); // turn on the leds
digitalWrite(Led2Pin, LOW);
delay(50);
digitalWrite(Led1Pin, LOW); // blinking leds
digitalWrite(Led2Pin, HIGH);
delay(50);
// }
// for (i = 800; i > 700; i--) {
// tone(BuzzerPin, i);
delay(15);
digitalWrite(Led1Pin, HIGH); // turn on the leds
digitalWrite(Led2Pin, LOW);
delay(50);
digitalWrite(Led1Pin, LOW); // blinking leds
digitalWrite(Led2Pin, HIGH);
delay(50);
// }
}
void sirenoff(int Led1Pin, int Led2Pin, int BuzzerPin) {
digitalWrite(Led1Pin, LOW); // turn off blinking leds
digitalWrite(Led2Pin, LOW);
tone(BuzzerPin, 0); // turn off buzzer
}
void showPWM(int pwmL, int pwmR) {
Serial.print("PWM ");
if (pwmL < 100) Serial.print(0); if (pwmL < 10) Serial.print(0);
Serial.print(pwmL); Serial.print(".");
analogWrite(enable1Pin, pwmL);
if (pwmR < 100) Serial.print(0); if (pwmR < 10) Serial.print(0);
Serial.print(pwmR); Serial.print(" | ");
analogWrite(enable2Pin, pwmR);
}
...
diagram.json for wokwi.com
...
{
"version": 1,
"author": "Anonymous maker",
"editor": "wokwi",
"parts": [
{ "type": "board-esp32-devkit-c-v4", "id": "esp", "top": 28.8, "left": 216.04, "attrs": {} },
{
"type": "wokwi-led",
"id": "led1",
"top": 18,
"left": 169.8,
"rotate": 90,
"attrs": { "color": "limegreen" }
},
{
"type": "wokwi-led",
"id": "led2",
"top": 46.8,
"left": 169.8,
"rotate": 90,
"attrs": { "color": "white" }
},
{
"type": "wokwi-led",
"id": "led3",
"top": 75.6,
"left": 169.8,
"rotate": 90,
"attrs": { "color": "red" }
},
{
"type": "wokwi-led",
"id": "led4",
"top": 18,
"left": 97.4,
"rotate": 270,
"attrs": { "color": "limegreen", "flip": "1" }
},
{
"type": "wokwi-led",
"id": "led5",
"top": 46.8,
"left": 97.4,
"rotate": 270,
"attrs": { "color": "white", "flip": "1" }
},
{
"type": "wokwi-led",
"id": "led6",
"top": 75.6,
"left": 97.4,
"rotate": 270,
"attrs": { "color": "red", "flip": "1" }
},
{ "type": "wokwi-potentiometer", "id": "pot1", "top": 27.5, "left": 441.4, "attrs": {} },
{
"type": "wokwi-pushbutton",
"id": "btn1",
"top": 294.2,
"left": 374.4,
"attrs": { "color": "green" }
},
{
"type": "wokwi-relay-module",
"id": "relay1",
"top": 227,
"left": 108.4,
"rotate": 90,
"attrs": {}
},
{ "type": "wokwi-led", "id": "led7", "top": 6, "left": 330.2, "attrs": { "color": "blue" } },
{ "type": "wokwi-led", "id": "led8", "top": 6, "left": 311, "attrs": { "color": "red" } },
{
"type": "wokwi-text",
"id": "legendservo1",
"top": 288,
"left": 451.2,
"attrs": { "text": "Flame\nRight" }
},
{
"type": "wokwi-text",
"id": "legendservo2",
"top": -19.2,
"left": 451.2,
"attrs": { "text": "Flame\nAnalog" }
},
{
"type": "wokwi-pushbutton",
"id": "btn2",
"top": 246.2,
"left": 374.4,
"attrs": { "color": "green" }
},
{
"type": "wokwi-text",
"id": "legendservo3",
"top": 240,
"left": 451.2,
"attrs": { "text": "Flame\nLeft" }
},
{
"type": "wokwi-pushbutton",
"id": "btn3",
"top": 121.4,
"left": 422.4,
"attrs": { "color": "green" }
},
{
"type": "wokwi-text",
"id": "legendservo4",
"top": 115.2,
"left": 499.2,
"attrs": { "text": "Gas\nSensor" }
},
{
"type": "wokwi-pushbutton",
"id": "btn4",
"top": 198.2,
"left": 374.4,
"attrs": { "color": "green" }
},
{
"type": "wokwi-text",
"id": "legendservo5",
"top": 192,
"left": 451.2,
"attrs": { "text": "Flame\nForward" }
},
{
"type": "wokwi-led",
"id": "led9",
"top": 63.6,
"left": 359,
"attrs": { "color": "yellow" }
},
{
"type": "wokwi-text",
"id": "legendservo6",
"top": 48,
"left": 364.8,
"attrs": { "text": "Siren" }
},
{
"type": "wokwi-text",
"id": "legendservo7",
"top": 201.6,
"left": 96,
"attrs": { "text": "Pump" }
},
{
"type": "wokwi-text",
"id": "legendservo8",
"top": 9.6,
"left": 115.2,
"attrs": { "text": "L - motor - R" }
}
],
"connections": [
[ "esp:TX", "$serialMonitor:RX", "", [] ],
[ "esp:RX", "$serialMonitor:TX", "", [] ],
[ "esp:GND.1", "led6:C", "black", [ "h-67.05", "v-86.8" ] ],
[ "esp:GND.1", "led3:C", "black", [ "h-67.05", "v-86.8" ] ],
[ "esp:GND.1", "led5:C", "black", [ "h-67.05", "v-115.6" ] ],
[ "esp:GND.1", "led2:C", "black", [ "h-67.05", "v-115.6" ] ],
[ "esp:GND.1", "led4:C", "black", [ "h-67.05", "v-144.4" ] ],
[ "esp:GND.1", "led1:C", "black", [ "h-67.05", "v-144.4" ] ],
[ "esp:14", "led5:A", "green", [ "h-76.65", "v-86.4" ] ],
[ "esp:32", "led2:A", "green", [ "h-57.45", "v-38.4" ] ],
[ "esp:25", "led1:A", "green", [ "h-57.45", "v-86.4" ] ],
[ "esp:33", "led3:A", "green", [ "h-57.45", "v-19.2" ] ],
[ "esp:GND.2", "led8:C", "black", [ "v0", "h28.8" ] ],
[ "esp:GND.2", "led7:C", "black", [ "v0", "h67.2" ] ],
[ "esp:2", "led7:A", "green", [ "h0" ] ],
[ "esp:21", "led8:A", "green", [ "h0" ] ],
[ "esp:GND.1", "relay1:GND", "black", [ "h0" ] ],
[ "esp:5V", "relay1:VCC", "red", [ "h48.15", "v-38.4" ] ],
[ "esp:GND.3", "btn1:1.l", "black", [ "h19.2", "v19.2" ] ],
[ "esp:15", "btn1:2.l", "green", [ "h9.6", "v19" ] ],
[ "esp:GND.3", "pot1:GND", "black", [ "h0" ] ],
[ "esp:4", "pot1:SIG", "green", [ "h0" ] ],
[ "esp:5V", "pot1:VCC", "red", [ "h48.15", "v-48", "h220.5", "v-86.4" ] ],
[ "esp:26", "led4:A", "green", [ "h-76.65", "v-96" ] ],
[ "esp:27", "led6:A", "green", [ "h-76.65", "v-48" ] ],
[ "esp:16", "btn2:2.l", "green", [ "h28.8", "v115" ] ],
[ "esp:GND.3", "btn2:1.l", "black", [ "h19.2", "v144" ] ],
[ "esp:GND.3", "btn3:1.l", "black", [ "h76.8", "v19.2" ] ],
[ "esp:18", "btn3:2.l", "green", [ "h57.6", "v9.6" ] ],
[ "esp:GND.3", "btn4:2.l", "black", [ "h19.2", "v115.2" ] ],
[ "btn4:1.l", "esp:17", "green", [ "h-9.6", "v-57.6" ] ],
[ "relay1:IN", "esp:12", "green", [ "v0" ] ],
[ "led9:A", "esp:19", "green", [ "v0" ] ],
[ "esp:GND.3", "led9:C", "black", [ "h57.6" ] ]
],
"dependencies": {}
}
...