Hi guys,
I have recently configured this setup from howtomechatronics.com for
a forward and reverse motor controller using L298N.
We have got it working however, when the speed is set and switching from forward to reverse, the speed changes. I understand that it’s due to reading the position of the potentiometer, when it is set at say 80% power forward, clicking the button will send it to go 20% in reverse.
How can you code such that in forward it reads the analog input as 80% but as soon as the switch is clicked to go in reverse it can now read the analog input as 80% in reverse.
The schematic and code are attached.
Many thanks in advance!!!
/* Arduino DC Motor Control - PWM | H-Bridge | L298N - Example 01
by Dejan Nedelkovski, www.HowToMechatronics.com
*/
#define enA 9
#define in1 6
#define in2 7
#define button 4
int rotDirection = 0;
int pressed = false;
void setup() {
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(button, INPUT);
// Set initial rotation direction
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
}
void loop() {
int potValue = analogRead(A0); // Read potentiometer value
int pwmOutput = map(potValue, 0, 1023, 0 , 255); // Map the potentiometer value from 0 to 255
analogWrite(enA, pwmOutput); // Send PWM signal to L298N Enable pin
// Read button - Debounce
if (digitalRead(button) == true) {
pressed = !pressed;
}
while (digitalRead(button) == true);
delay(20);
// If button is pressed - change rotation direction
if (pressed == true & rotDirection == 0) {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
rotDirection = 1;
delay(20);
}
// If button is pressed - change rotation direction
if (pressed == false & rotDirection == 1) {
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
rotDirection = 0;
delay(20);
}
}
Arduino-and-L298N-Circuit-Diagram-DC-Motor-Control.pdf (50.1 KB)