Lo que sucede es lo siguiente, cuando le paso la letra A por el puerto serial se demora mucho en validar y no sé a que se deba, lo que intento hacer es que el patron de colores cambie según la entrada que recibe, en este caso es una A, lo tengo validado con || por si solo estaba entrando al condicional por un solo caso, pero no, simplemente demora en entrar al condicional. No sé si alguien me pueda ayudar. De antemano muchas gracias, aqui dejo el código.
int rojo = 13;
int amarillo = 12;
int verde = 11;
char arg;
void setup(){
Serial.begin(9600);
pinMode(rojo, OUTPUT);
pinMode(amarillo, OUTPUT);
pinMode(verde, OUTPUT);
}
void resetLeds(){
digitalWrite(amarillo, LOW);
digitalWrite(verde, LOW);
digitalWrite(rojo, HIGH);
delay(20000);
digitalWrite(rojo, LOW);
digitalWrite(amarillo, HIGH);
delay(3000);
digitalWrite(amarillo, LOW);
digitalWrite(verde, HIGH);
delay(30000);
}
void loop(){
while (Serial.available() == 0){
resetLeds();
}
arg = Serial.read();
if(arg == 'A' || arg == 65){
digitalWrite(verde, HIGH);
digitalWrite(amarillo, HIGH);
digitalWrite(rojo, LOW);
delay(20000);
}else{
resetLeds();
}
}
pert
November 22, 2023, 1:59am
2
He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @daniel8312 .
En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum " .
Este guía contiene mucha información útil. Por favor leer.
De antemano, muchas gracias por cooperar.
1 Like
daniel8312:
resetLeds();
Esta instrucción tarda 53 segundos en hacer su trabajo.
Y mientras no hay caracteres por leer, tu Arduino se toma otros 53 segundos de vacaciones. Una y otra vez.
Intenta hacer lo que necesitas sin usar delay() , sólo con millis()
ENGRAL
November 22, 2023, 4:12pm
4
Hola daniel8312
Prueba el código revisado que adjunto, te dará una idea mas clara.
He cambiado tiempos pero puedes poner los que quieras facilmente por "tiempo1" o "tiempo2".
Otra observacion , "char" solo admite letras
Y como dice mancera1979 utiliza mejor millis no delay
Un saludo!!
/*
*
* foro
*
* https://forum.arduino.cc/t/retraso-con-el-puerto-serial-de-arduino/1192001
*/
int rojo = 10;
int amarillo = 7;
int verde = 12;
char arg;
int tiempo1 = 500;
int tiempo2 = 5000;
void setup()
{
Serial.begin(9600);
pinMode(rojo, OUTPUT);
pinMode(amarillo, OUTPUT);
pinMode(verde, OUTPUT);
}
void resetLeds()
{
digitalWrite(amarillo, LOW);
digitalWrite(verde, LOW);
digitalWrite(rojo, HIGH);
delay(tiempo1);
digitalWrite(amarillo, HIGH);
digitalWrite(verde, LOW);
digitalWrite(rojo, LOW);
delay(tiempo1);
digitalWrite(amarillo, LOW);
digitalWrite(verde, HIGH);
digitalWrite(rojo, LOW);
delay(tiempo1);
}
void loop()
{
while (Serial.available() == 0)
{
resetLeds();
}
arg = Serial.read();
if(arg == 'A' || arg == 'a')
{
digitalWrite(verde, HIGH);
digitalWrite(amarillo, HIGH);
digitalWrite(rojo, HIGH);
delay(tiempo2);
}
}
// *************** FIN ************
1 Like
Muchas gracias, tenia errores de conceptos, modifiqué a millis y funcionó.
ENGRAL
November 23, 2023, 9:47am
6
Hola daniel8312
He leído que ya te ha funcionado.
Podrías publicar el código revisado para ver como te ha quedado ???
Gracias .
Un saludo !!
system
Closed
May 21, 2024, 9:48am
7
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.