I made a code to make a dc motor turn forward or reverse. When making it in tinkercad it works (motor is a led).
When uploding it to the uno it only goes forward. It only reacts to input 9. When pressing them both the motor doesn't do anything, as it should.
Where do i go wrong ?
Motor is connect to arduino by a motorshield.
int buttonState1 = 0;
int buttonState2 = 0;
int motor1pin1 = 10;
int motor1pin2 = 11;
void setup()
{
pinMode(8, INPUT);
pinMode(9, INPUT);
pinMode(motor1pin1, OUTPUT);
pinMode(motor1pin2, OUTPUT);
}
void loop()
{
// read the state of the pushbutton value
buttonState1 = digitalRead(8);
buttonState2 = digitalRead(9);
// check if pushbutton is pressed. if it is, the
// buttonState is HIGH
if (buttonState1 == HIGH && buttonState2 == LOW) {
digitalWrite(motor1pin2, LOW);
digitalWrite(motor1pin1, HIGH);
}
if (buttonState2 == HIGH && buttonState1 == LOW) {
digitalWrite(motor1pin1, LOW);
digitalWrite(motor1pin2, HIGH);
} else {
digitalWrite(motor1pin1, LOW);
digitalWrite(motor1pin2, LOW);
}
delay(10); // Delay a little bit to improve simulation performance
}
How are your button switches wired? Have you a pullup or pulldown resistor? Without the resistors the pin can float at an unpredictable value
The usual way to use button switches is with pinMode(pin, INPUT_PULLUP); and then connect the switch so it pulls the pin to GND when pressed. Then digitalRead(switchPin); returns LOW when the switch is pressed.
Please make a simple pencil drawing showing how you have you have everything connected and post a photo of the drawing. See this Simple Image Posting Guide
Both buttons work when changed,, connected to the UNO with a resistor.
Can you give me an example what the correct way is to program this ?
There are several ways you could have connected your buttons. As it's now working correctly with the code correction, I assume you had both of them connected like this?
Both buttons work when changed,, connected to the UNO with a resistor.
The Digital Read Serial Example shows you how to wire a switch with a pull-down resistor. The pull-down resistor (one for each switch/button) insures that the input is low when the button is not pushed. When the button is pushed the resistor is "overpowered" and the input goes high.
Or, there are built-in pull-up resistors that you can optionally enable, and then you don't have to add any external components. But, you have to wire the switch to ground instead of +5V, and you have to reverse the logic in software. In the "real world" pull-ups are more common than pull-downs but either will work, and since the Arduino bas built-in pull-ups that's an easier solution.
A couple of troubleshooting tips -
Add some Serial.prntln() messages so you can "see" what your program is doing. For example you can display a message about which buttons are pushed, and/or which direction the motor is running.
And, try running the motor both directions under software control without requiring a button push.
It's always a good idea to test the input (buttons) and output (motor) separately before putting everything together.
And, it's usually best to start as simple as possible (maybe by just reading/testing one button) and then add one or two lines of code at a time to "develop" your code, instead of trying to write the whole program at once.