I am trying to set up 4 x sg90 servos on a Arduino Nano.
I don't want anything to happen until a button is pressed the servos each have a set set of actions that i want to run when a button is pressed.
Once the actions have completed i want it to wait until i press a button then go whatever action is set, if that makes sense.
I have tried many times but either the buttons don't work properly or the servos just start without any input from the buttons without being pushed.
he is the best version i have come up with so far, can someone please have a look and try and correct my errors.
Here is a link to my wokwi sim on the project: Sweep.ino - Wokwi Arduino and ESP32 Simulator
#include <Servo.h>
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
#define button 2 //attaches button to pin 2
#define button2 3 //attaches button to pin 3
#define button3 4 //attaches button to pin 3
int buttonState = 0; //buttonState stores state of input
const byte positions[] = {0, 90,};
unsigned long period = 500;
unsigned long startTime = 0;
int greenLED = 11;
void setup()
{
pinMode (greenLED, OUTPUT);
pinMode(button, INPUT_PULLUP); //sets button as input
buttonState = digitalRead(button);
buttonState = digitalRead(button2);
buttonState = digitalRead(button3);
}
void loop()
{
digitalWrite (greenLED, HIGH);
delay (100);
digitalWrite (greenLED, LOW);
delay (100);
servo1.attach(5);
servo2.attach(6);
servo3.attach(9);
servo4.attach(10);
buttonState = digitalRead(button); //reads state of buttonunsigned long currentTime = millis();
unsigned long currentTime = millis();
if ((currentTime - startTime >= period) && (buttonState == LOW))
{
servo1.write(90);
servo2.write(90);
servo3.write(90);
servo4.write(90);
delay(1200);
servo1.write(0); //run this servo sequence
delay(1200);
servo1.write(90);
servo2.write(0);
delay(1200);
servo2.write(90);
servo3.write(0);
delay(1200);
servo3.write(90);
servo4.write(0);
delay(1200);
servo4.write(90);
delay(1200);
servo1.write(0); //run this servo sequence
delay(1200);
servo1.write(90);
servo2.write(0);
delay(1200);
servo2.write(90);
servo3.write(0);
delay(1200);
servo3.write(90);
servo4.write(0);
delay(1200);
servo4.write(90);
delay(1200);
};
if (buttonState == HIGH) { //button is not pressed
}
buttonState = digitalRead(button2); //reads state of buttonunsigned long currentTime = millis();
if ((currentTime - startTime >= period) && (buttonState == LOW))
{
servo1.write(90);
servo2.write(90);
servo3.write(90);
servo4.write(90);
delay(8000);
servo1.write(0);
servo2.write(0);
servo3.write(0);
servo4.write(0);
delay(1000);
};
if (buttonState == HIGH) { //button is not pressed
}
buttonState = digitalRead(button3); //reads state of buttonunsigned long currentTime = millis();
if ((currentTime - startTime >= period) && (buttonState == LOW))
{
servo1.write(90);
servo2.write(90);
servo3.write(90);
servo4.write(90);
delay(800);
servo2.write(0); //run this servo sequence
delay(800);
servo2.write(90);
servo4.write(0);
delay(800);
servo4.write(90);
servo1.write(0);
delay(800);
servo1.write(90);
servo3.write(0);
delay(800);
servo3.write(90);
delay(800);
servo2.write(0);
delay(800);
servo2.write(90);
servo4.write(0);
delay(800);
servo4.write(90);
servo1.write(0);
delay(800);
servo1.write(90);
servo3.write(0);
delay(800);
servo3.write(90);
delay(800);
};
if (buttonState == HIGH) { //button is not pressed
}
}