Hola, ya he echo lo que me dices @gonpezzi pero no funciona, aquí pongo el código
y @Surbyte el servo es pequeño un sg90 , en las pruebas los 5v lo saco del Arduino nano,
pero luego cuando funcione será con 5v exterior para no cargar el Arduino .
P.D. he quitado los comentarios originales y dejado solo los nuevo para mayor claridad en el código
Gracias a los dos
// barrera de tren con 2 led rojos intermitentes y 1 led verde fijo.
// cuando la "barrera" esta subida el led verde se enciende y se apagan los leds rojos
// cuando la "barrera" esta abajo el led verde se apaga y enciende los leds rojos
// la "barrera" esta por poner sera activada con 1 servo
#include <Servo.h> //incluido nuevo
int sensePin1=A0;
int sensePin2=A1;
int Red1=6;
int Red2=5;
int Verde=7;
Servo barrera; //Servo myServo;
void setup() {
Serial.begin(9600);
pinMode(Red1,OUTPUT);
pinMode(Red2,OUTPUT);
pinMode(Verde,OUTPUT);
barrera.attach(9); //myServo.attach(Pin PWM);
}
enum CROSSINGSTATES
{
ST_OFF,
ST_FLASHING1,
ST_FLASHING2,
ST_FLASHING3,
};
CROSSINGSTATES crossingState=ST_OFF;
void loop() {
int valA1=analogRead(sensePin1);
int valA2=analogRead(sensePin2);
switch(crossingState)
{
case ST_OFF:
crossingoff(valA1, valA2);
break;
case ST_FLASHING1:
crossingflashing1(valA1, valA2);
break;
case ST_FLASHING2:
crossingflashing2(valA1, valA2);
break;
case ST_FLASHING3:
crossingflashing3(valA1, valA2);
break;
}
}
void crossingoff(int valA1, int valA2){
digitalWrite(Red1,LOW);
digitalWrite(Red2,LOW);
digitalWrite(Verde,HIGH);
barrera.write (0); //myServo.write(Angulo);
if(valA1<500 && valA2>500){
crossingState=ST_FLASHING1;
}
else if (valA1>500 && valA2<500){
crossingState=ST_FLASHING2;
}
}
void crossingflashing1(int valA1, int valA2){
digitalWrite(Red1,HIGH);
digitalWrite(Red2,LOW);
digitalWrite(Verde,LOW);
barrera.write (90); //myServo.write(Angulo);
delay(500);
digitalWrite(Red1,LOW);
digitalWrite(Red2,HIGH);
digitalWrite(Verde,LOW);
barrera.write (90); // myServo.write(Angulo);
delay(500);
if (valA1>500 && valA2<500){
crossingState=ST_FLASHING3;
}
}
void crossingflashing2(int valA1, int valA2){
digitalWrite(Red1,HIGH);
digitalWrite(Red2,LOW);
digitalWrite(Verde,LOW);
barrera.write (90); // myServo.write(Angulo);
delay(500);
digitalWrite(Red1,LOW);
digitalWrite(Red2,HIGH);
digitalWrite(Verde,LOW);
barrera.write (90); // myServo.write(Angulo);
delay(500);
if (valA1<500 && valA2>500){
crossingState=ST_FLASHING3;
}
}
void crossingflashing3(int valA1, int valA2){
digitalWrite(Red1,HIGH);
digitalWrite(Red2,LOW);
digitalWrite(Verde,LOW);
barrera.write (0); // myServo.write(Angulo);
delay(500);
digitalWrite(Red1,LOW);
digitalWrite(Red2,HIGH);
digitalWrite(Verde,LOW);
barrera.write (0); // myServo.write(Angulo);
delay(500);
if (valA1>500 && valA2>500){
crossingState=ST_OFF;
}
}