Ok so I am triggering a motor with a sensor and I have figured out how to, but when the sensor value goes over 500 the motor moves but doesn't stop and keeps on moving the motor. How do I make it trigger once in a void loop. I want it to trigger when the value goes over 500 then run the motor then stop, but be able to trigger it again when the value goes over 500 again.
Here is my code:
#include <SoftwareSerial.h>
SoftwareSerial ArduinoUno(0,1);
// Setup pins
int standBy = 13;
// Motor A
int PWMA = 10; // PWM Speed Control
int AIN1 = 6; // Direction pin 1
int AIN2 = 5; // Direction pin 2
void setup() {
Serial.begin(115200);
ArduinoUno.begin(9600);
// Setup Pins as OUTPUT
pinMode(standBy, OUTPUT);
// Motor A
pinMode(PWMA, OUTPUT);
pinMode(AIN1, OUTPUT);
pinMode(AIN2, OUTPUT);
}
void loop() {
while(ArduinoUno.available()>0){
int val = ArduinoUno.parseFloat();
if(ArduinoUno.read()== '\n')
Serial.println(val);
delay(300);
while(val > 500){
forward(255); // Move forward
delay(5000); // ... for 2 seconds
stop(); // ... Stop the motors
delay(2000); // Delay between motor runs.
reverse(255); // Move in reverse
delay(5000); // ... for 2 seconds
stop(); // ... Stop the Motors;
}
}
}
/*
* Functions
* *
*/
void forward(int spd)
{
runMotor(0, spd, 0);
runMotor(1, spd, 0);
}
void reverse(int spd)
{
runMotor(0, spd, 1);
runMotor(1, spd, 1);
}
void runMotor(int motor, int spd, int dir)
{
digitalWrite(standBy, HIGH); // Turn on Motor
boolean dirPin1 = LOW;
boolean dirPin2 = HIGH;
if(dir == 1) {
dirPin1 = HIGH;
dirPin2 = LOW;
}
if(motor == 1) {
digitalWrite(AIN1, dirPin1);
digitalWrite(AIN2, dirPin2);
analogWrite(PWMA, spd);
}
}
void stop() {
digitalWrite(standBy, LOW);
}
(don't worry about the software serial that is UART from ESP32S)
Please help I need this working by tomorrow sharp.