Я создал FSM для своего сервопривода. Он имеет два состояния. Я использую структуру переключатель/корпус, но в первом случае мотор «застревает», и я не знаю, почему.
Это мой код:
#include <Servo.h>
#define one 1
#define two 2
Servo myservo1; //projector platform servo
unsigned long Timer1; //define timer variable for state 1 if statement
void setup()
{
myservo1.attach(9);
}
void loop(){
static int state = one; // initial state is one.
switch(state)
{
case one:
myservo1.writeMicroseconds(1374); // servo is moving cw
delay(5000);
myservo1.writeMicroseconds(1474); // servo is stationary
Timer1 = millis();
if (millis() - Timer1 > 5000)
{
state = two;
}
break;
case two:
for(int speedv1 = 0; speedv1 <= 100; speedv1 += 2) // loop to ramp up speed of servos
{
myservo1.writeMicroseconds(1474 + speedv1); // speed increase by 2 each iteration (servo 1) until servo reaches fullspeed (ACW)
delay(40); // delay between loop iterations
}
delay(5000);
for(int speedv2 = 0; speedv2 <= 100; speedv2 += 2) // loop to ramp down servo speed
{
myservo1.writeMicroseconds(1574 - speedv2); // speed decrease by 2 each iteration (servo 1) until servo stops
delay(40); //delay between loop iterations
}
delay(2000);
state = one;
break;
}
}
Мотор как будто глохнет
myservo1.writeMicroseconds(1374);
на первой строке case 1
.
Под застрявшим я подразумеваю, что двигатель просто продолжает вращаться по часовой стрелке и не переходит к следующему оператору writeMicroseconds()
после задержки. Цените помощь.