Multitareas con leds y potenciómetros

Hola, soy nuevo en el foro.

Me gustaría saber como hacer correr tareas independientes en una misma placa.

Mi caso en particular es hacer funcionar tres leds que parpadeen y la velocidad de cada uno controlador por un potenciómetro distinto, el programa lo tengo montado para que si cambien sus velocidades, pero no funcionan simultáneamente, funcionan uno detrás de otro.

Hace días que estoy buscando esto en internet y he encontrado diversos sistemas, pero no los hago funcionar correctamente.

Dejo aquí el codigo:

int pin1 = 13;
int pin2 = 7;
int pin3 = 2;
int pot1 = A0;
int pot2 = A1;
int pot3 = A2;
 
void setup() {
  pinMode(pin1,OUTPUT);
  pinMode(pin2,OUTPUT);
  pinMode(pin3,OUTPUT);
  pinMode(pot1,INPUT);
  pinMode(pot2,INPUT);
  pinMode(pot3,INPUT);
}
 
void loop() {
  
digitalWrite(pin1, HIGH);              //activa el LED
delay(analogRead(pot1)); 
digitalWrite(pin1, LOW);              //desactiva el LED
delay(analogRead(pot1)); 
  
digitalWrite(pin2, HIGH);              //activa el LED
delay(analogRead(pot2)); 
digitalWrite(pin2, LOW);              //desactiva el LED
delay(analogRead(pot2)); 
 
  
digitalWrite(pin3, HIGH);              //activa el LED
delay(analogRead(pot3)); 
digitalWrite(pin3, LOW);              //desactiva el LED
delay(analogRead(pot3)); 
}

Si alguien me pudiera echar una mano se lo agradecería.

Un saludo
:relieved:

Para hacer lo que querés tenés que usar millis().
Te recomiendo que leas el tema "Entender millis..." en la sección Documentación.

Por otro lado, en los ejemplos del IDE hay uno llamado "Blink without delay" que te va a venir de perillas.

Simplemente modificar una línea de código y agregar otra y ya lo tienes funcionando para un LED. Luego haces lo mismo para los otros (obviamente cambia los nombres a las variables por ej. intervalo en uno será intervalo2 en otro, y tal)
Te decía, modifica

const long interval = 1000;

por

unsigned long interval = 0;

Luego agregas

interval = analogRead(pot1);

justo antes del primer if().

Recuerda definir el pin del potenciómetro que en el ejemplo no esta, obviamente.

Ten en cuenta que el máximo intervalo va a ser de 1023 mseg (apenas poco mas de 1 seg). Si quieres más tiempo, multiplica interval por el número de segundos que quieras.

Saludos

Moderador:
Lee el privado que te he enviado.

Hace mucho escribí un pequeño tutorial, con una pequeña descripción de tu problema.
saludos

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.