#include <Servo.h>
Servo servo;
int state;
int outputValue;
int currentAngle = 90;
int targetAngle = 180;
unsigned long lastServoMove = 0;
const long servoSpeed = 15;
int const long interval = 200;
unsigned long previousMillis = 0;
void setup()
{
Serial.begin(9600);
state = 0;
servo.attach(9);
servo.write(90);
pinMode(2, INPUT_PULLUP);
pinMode(3, OUTPUT);
}
void loop()
{
unsigned long currentMillis = millis();
int buttonState = digitalRead(2);
if (state == 1)
{
if (currentMillis - lastServoMove >= servoSpeed)
{
lastServoMove = currentMillis;
if (currentAngle < targetAngle)
{
currentAngle++;
}
else if (currentAngle > targetAngle)
{
currentAngle--;
}
servo.write(currentAngle); // Move the servo
}
if (currentAngle == targetAngle)
{
if (targetAngle == 180)
{
targetAngle = 0;
}
else
{
targetAngle = 180;
}
}
}
else
{
currentAngle = 90;
targetAngle = 180;
servo.write(90);
}
if (currentMillis - previousMillis >= interval)
{
if (state == 0 && buttonState == LOW)
{
state = 1;
digitalWrite(3, HIGH);
previousMillis = currentMillis;
}
else if (state == 1 && buttonState == LOW)
{
state = 0;
digitalWrite(3, LOW);
previousMillis = currentMillis;
}
}
}