Buenos dias/tardes estoy trabajndo en un clasificador de colores de pelotas, hasta ahorita eh logrado que con un pelota azul gire un servo(puerta para dejar entrarla) y se cierre despues de un tiempo el problema es cuando quiero agregar otro servo para que este rechaze las pelotas rojas al momento de correrlo el otro servo se queda oscilando (el segundo) y no hace nada y tengo entendido que es la misma programacion.
Codigo correcto de pelota azul:
const int s0 = 1;
const int s1 = 2;
const int s2 = 3;
const int s3 = 4;
const int out = 5;
int colorin = 0;
int rojo = 0;
int verde = 0;
int azul = 0;
#include <Servo.h>
Servo myservo;
void setup() {
myservo.attach(9);
delay(100);
myservo.write(180);
delay(100);
Serial.begin(9600);
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
pinMode(out, INPUT);
digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);
}
void loop() {
color();
if (azul < rojo && azul < verde && verde < rojo)
{
myservo.write(90);
delay(2000);
myservo.write(180);
}
delay(100);
}
void color()
{
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
rojo = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s3, HIGH);
azul = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s2, HIGH);
verde = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
}
Codigo cuando agrego para rechazar la roja:
const int s0 = 1;
const int s1 = 2;
const int s2 = 3;
const int s3 = 4;
const int out = 5;
int colorin = 0;
int rojo = 0;
int verde = 0;
int azul = 0;
#include <Servo.h>
Servo myservo;
Servo myservo2;
void setup() {
myservo.attach(9);
delay(100);
myservo.write(180);
delay(100);
myservo2.attach(10);
delay(100);
myservo2.write(180);
delay(100);
Serial.begin(9600);
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
pinMode(out, INPUT);
digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);
}
void loop() {
color();
if (azul < rojo && azul < verde && verde < rojo)
{
myservo.write(90);
delay(2000);
myservo.write(180);
}
else if (rojo < verde && rojo < azul && azul < verde)
{
myservo2.write(90);
delay(2000);
myservo2.write(180);
}
delay(100);
}
void color()
{
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
rojo = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s3, HIGH);
azul = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s2, HIGH);
verde = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
}
No se que pueda ser tal vez este omitiendo algo pero solo agrego un if para las pelotas rojas y delcaro todo lo del otro servo