Secuencial de LEDs con variación de brillo

Hola a todos, soy nuevo en esto de arduino y venia a pediros ayuda sobre una practica de mi colegio, esta seria:

La segunda, ¿Seria algo como esto?, pero con uno solo:

#define ledRojo  11
#define ledVerde 12
#define ledAzul  13
int brillo; 

void setup()  {
  pinMode(ledRojo, OUTPUT);
  pinMode(ledVerde, OUTPUT);
  pinMode(ledAzul, OUTPUT);
}

void loop()  { 
  for(brillo=0; brillo<=255; brillo++){
    analogWrite(ledRojo, brillo);
    analogWrite(ledVerde, brillo);
    analogWrite(ledAzul, brillo);
    delay(20); // Si la transicion es muy rapida aumenta el delay
   } 
   delay(3000);   // El led estara en blanco 3 segundos y luego volvera a empezar el loop de nuevo
}

Si alguien me pudriese decir como serian la parte de programación de las practicas le estaría muy agradecido.

Un saludo

Lo mejor es que tu nos digas como te parece que podrias hacerlo.
Es una práctica para que aprendas no para que te hagamos la tarea.
EN lo personal te comento que mucho no se lee lo que debes hacer.
Te molestaría escribir el texto?

Otra cosa. El título no puede decir Necesito Ayuda. Escribe un título apropiado con tu necesidad.
Por ejemplo: Salida secuencial con Leds multicolores

Lógicamente, como podrás comprender, no te vamos a hacer el trabajo, ya que para eso es un ejercicio del colegio, para que lo hagas tu, y aprendas haciéndolo.

Entiendo que lo que te piden, como mínimo lo habreis estudiado en clase, con que, tendrás que repasar un poco los apuntes.

El código que pones, no sé de dónde lo has sacado, pero no sé a que vienen los tres colores. Te aconsejo que plantees el ejercicio desde cero, sin copiar códigos de por ahí.

Lo primero que tienes que saber, para poder hacer el ejercicio, es qué modelo de arduino es el que usais, y localizar los pines PWM del mismo.

robinson31, no es dificil asi que no te heches para atras.
Interactúa con nosotros e irás resolviendo todo de acuerdo a lo que has estudiado en clase.

Algo que te pido que hagas. Edita el título del Post. Ponle :

Secuencial de LEDs con variación de brillo

Parece largo pero describe lo que tienes que hacer.

Veamos:
Ayuda número 1:

Piensa en todos los leds que debes usar, el potenciometro y los elementos que el texto solicita.
Asi que vamos a definir uno a uno, asignandoles nombres, pines y luego configurándolos en el setup para que los recnozca Arduino.

surbyte:
Lo mejor es que tu nos digas como te parece que podrias hacerlo.
Es una práctica para que aprendas no para que te hagamos la tarea.
EN lo personal te comento que mucho no se lee lo que debes hacer.
Te molestaría escribir el texto?

Otra cosa. El título no puede decir Necesito Ayuda. Escribe un título apropiado con tu necesidad.
Por ejemplo: Salida secuencial con Leds multicolores

carmeloco:
Lógicamente, como podrás comprender, no te vamos a hacer el trabajo, ya que para eso es un ejercicio del colegio, para que lo hagas tu, y aprendas haciéndolo.

Entiendo que lo que te piden, como mínimo lo habreis estudiado en clase, con que, tendrás que repasar un poco los apuntes.

El código que pones, no sé de dónde lo has sacado, pero no sé a que vienen los tres colores. Te aconsejo que plantees el ejercicio desde cero, sin copiar códigos de por ahí.

Lo primero que tienes que saber, para poder hacer el ejercicio, es qué modelo de arduino es el que usais, y localizar los pines PWM del mismo.

surbyte:
robinson31, no es dificil asi que no te heches para atras.
Interactúa con nosotros e irás resolviendo todo de acuerdo a lo que has estudiado en clase.

Algo que te pido que hagas. Edita el título del Post. Ponle :

Secuencial de LEDs con variación de brillo

Parece largo pero describe lo que tienes que hacer.

Veamos:
Ayuda número 1:

Piensa en todos los leds que debes usar, el potenciometro y los elementos que el texto solicita.
Asi que vamos a definir uno a uno, asignandoles nombres, pines y luego configurándolos en el setup para que los recnozca Arduino.

Gracias por las respuestas ya tengo más o menos echo el programa, después cuando tenga tiempo lo paso y me dicen.

Gracias por editar el título y aceptar los consejos.
Ve publicando y compartiendo,no hace falta que este terminado, te iremos dando sugerencias.
Comenta lo que haces tambien.

Y yo te propongo un trato. Voy a montar los leds en mi arduino UNO, y el código que vayas poniendo en el post, lo probaré en mi arduino, y te digo que es lo que hace, así es como si dispusieses del hardware para poder probarlo, ya que veo en la hoja del ejercicio, que solo os lo dejarán un día.

Aquí lo tenéis:

Practica 1:

int led 1=2;
int led 2=3;
int led 3=4;
int led 4=5;
int led 5=6;
void setup() {
 pinMode(2,OUTPUT);
 pinMode(3,OUTPUT);
 pinMode(4,OUTPUT);
 pinMode(5,OUTPUT);
 pinMode(6,OUTPUT);
}
void loop() {
 int pot=analogRead(A0);
 for(int i=0; i < 6; i++){ 
 digitalWrite(i,HIGH); //Enciendo el led en digital
 digitalWrite(i-1,LOW); //Apago el led
 delay(pot);
 }
 digitalWrite(6,LOW); //apago el último LED puesto que nunca se llega a i-1=6
}

Practica 2:

int led=3;//Ponemos que el led se conectara al pin 3.

void setup(){
pinMode(3,OUTPUT);//Decimos que el pin 3 es una salida(Da informacion al led).
}

void loop(){
  for(int i=0; i < 256; i++){//Creamos un bucle for, para que el valor i valla aunmentando progresivamente hasta llegar a 255.
  //Se pone hasta 256, porque arduino solo toma una cuarta parte de 1023, que es 256.
  analogWrite(2, i);//Decimos que es una salida analogica por lo que puede cambiar los voltajes que salen del pin entre 0(Minimo) y 255(maximo).
  delay(12);//Cada ves que sube un valor de i tarda 12 milisegundos, y como tiene que hacer 256, tardara aproximadamente 3 segundos en encenderce completamente.
  }

  for(int i=255; i >= 0; i--){//Creamos ahora un bucle de for alcontrario que el anterior para que descienda la luz del led(la i) progrecivamente hasta apagarse.
  analogWrite(2, i);  
  delay(12);
  }
}

¿Estaría bien asi? Gracias por su ayuda

Yo lo entendí como una sola práctica, explicada en dos páginas, no dos prácticas. Si te fijas, en la segunda hoja, sigue con el número 4.

En la primera, explica que se deben conectar 5 leds, y que deben encenderse y apagarse de forma sucesiva, de izquierda a derecha.

En la segunda, explica que ese encendido, debe ser progresivo, y según el mayor o menor giro de un potenciometro.

De todas formas, voy a probar tus códigos, y te explico los resultados.

carmeloco:
Yo lo entendí como una sola práctica, explicada en dos páginas, no dos prácticas. Si te fijas, en la segunda hoja, sigue con el número 4.

En la primera, explica que se deben conectar 5 leds, y que deben encenderse y apagarse de forma sucesiva, de izquierda a derecha.

En la segunda, explica que ese encendido, debe ser progresivo, y según el mayor o menor giro de un potenciometro.

De todas formas, voy a probar tus códigos, y te explico los resultados.

Gracias por tu ayuda y si lo quiero hacer todo en una misma practica como seria?
Asi:

int led=10;//Ponemos que el led de la bombilla ascendente se conectara al pin 10
int led1=2;//Definimos todos los pin alos que se conectaran los leds
int led2=3;
int led3=4;
int led4=5;
int led5=6;

void setup() {
 pinMode(led1,OUTPUT);//Decimos que todos seran una salida.
 pinMode(led2,OUTPUT);
 pinMode(led3,OUTPUT);
 pinMode(led4,OUTPUT);
 pinMode(led5,OUTPUT);
 pinMode(led,OUTPUT);
}

void loop() {
 int pot=analogRead(A0);//Definimos que el potenciometro(pot)se conectara al pin A0
 for(int i=0; i < 6; i++){ //Creamos un bucle con el comando for para que se la i aumente 1 unidad hasta llegar a 6
 digitalWrite(i,HIGH); //Enciendo el led en digital.
 digitalWrite(i-1,LOW); //Apago el led anterior
 }
 digitalWrite(6,LOW); //apago el último LED puesto que nunca se llega a i-1=6 
 delay(pot/4);
  for(int i = 0; i < 256; i++){//Creamos un bucle for, para que el valor i valla aunmentando progresivamente hasta llegar a 255.
  //Se pone hasta 256, porque arduino solo toma una cuarta parte de 1023, que es 256.
  analogWrite(led, i);//Decimos que es una salida analogica por lo que puede cambiar los voltajes que salen del pin entre 0(Minimo) y 255(maximo).
  delay(3000/255);//Los milisegundos que tardara en aumentar una unidad la i sera de 3000(3 segundos)entre 255
  }
  for(int i=255; i >= 0; i--){//Creamos ahora un bucle de for alcontrario que el anterior para que descienda la luz del led(la i) progrecivamente hasta apagarse.
  analogWrite(led, i);  
  delay(3000/255);
  }
}

El enunciado de la práctica, no es muy claro, ya que da lugar a diferentes interpretaciones. Yo entendí que, había que conectar solo 5 leds, los cuales se deben encender de izquierda a derecha, cuyo encendido tiene que ser progresivo, que esta progresividad dependa de un potenciometro, y que cada led, permanezca encendido 3 segundos, y apagado otros 3 segundos.

Veo que tú lo has interpretado como que los leds tienen que encenderse y apagarse como una secuencia, y a parte otro más que tarde 3 segundos en encenderser progresivamente, y otros 3 en apagarse progresivamente.

Deberías preguntar al profesor cual es la interpretación correcta del enunciado, para poder afrontar correctamente la práctica.

De todas formas puedo decirte ya algunos fallos que encuentro en el código que pusiste.

El bucle for, enciende y apaga los pines del 0 al 5, incluso llegas a apagar el -1 (cuando i=0, i-1=-1) y el led en el pin 5, llega un momento que se queda siempre encendido, porque cuando i=6, sales del bucle.

Primero, el consejo que te doy, es que te asegures, preguntando al profesor (he visto que hay una dirección de mail donde debeis anviarle el resultado) de qué interpretación del enunciado es la correcta, si la tuya o la mía, y después, vemos como afrontarlo

Comparto la interpretación de carmeloco y tambien los errores y alguno mas pero esperemos a ver que dice el profesor antes de seguir.
por ahora mas alla de lo indicado vas bien.

Por cierto, subo las páginas del ejercicio en mayor resolución.


Aquí un video de lo que yo entiendo que hay que hacer según el enunciado:

El potenciometro, varía la velocidad de encendido y apagado, pero el tiempo en el que permanecen encendidos o apagados los leds, siempre son 3 segundos.

Muchas gracia por la ayuda y los consejos, al final ni yo se exactamente como se hace pero lo e echo como si una cosa fueran los 5 leds y otra el led que se enciende y apaga progresivamente. Se lo diría a mi profesor pero hoy es el ultimo día para enviarle la practica por correo, al final me a quedado así:

int led1 =2;//Definimos todos los pin alos que se conectaran los leds
int led2 =3;
int led3 =4;
int led4 =5;
int led5 =6;
int led=10;//Ponemos que el led se conectara al pin 10(el de la luz ascendente y descendiente)
void setup() {
 pinMode(led1,OUTPUT);//Decimos que todos seran una salida(salida de informacion)
 pinMode(led2,OUTPUT);
 pinMode(led3,OUTPUT);
 pinMode(led4,OUTPUT);
 pinMode(led5,OUTPUT);
 pinMode(led,OUTPUT);
}//Cerramos el void setup
void loop() {
  int pot=analogRead(A0);//Definimos que el potenciometro(pot)se conectara al pin A0
  digitalWrite(led1,HIGH);//Hacemos que se encienda el primer led y que tras un tiempo(el delay)se apage
  delay(pot/4);//En el delay ponemos el potenciometro para que dependiendo lo que lo giremos sera mayor o menor.
  digitalWrite(led1,LOW);//Lo mismo haremos con los demas leds para formar el circuito
  delay(0);//Ponemos delay(0) en los low (apagar), porque si ponemos tambien pot/4 tardaria igual que en encenderse, por lo cuanto mas giremos el potenciometro mayor tiempo estara encendido y asu vez apagado si ponemos pot/4
  digitalWrite(led2,HIGH);
  delay(pot/4);
  digitalWrite(led2,LOW);
  delay(0);
  digitalWrite(led3,HIGH);
  delay(pot/4);
  digitalWrite(led3,LOW);
  delay(0);
  digitalWrite(led4,HIGH);
  delay(pot/4);
  digitalWrite(led4,LOW);
  delay(0);
  digitalWrite(led5,HIGH);
  delay(pot/4);
  digitalWrite(led5,LOW);
  delay(0);
  for(int i = 0; i < 256; i++){//Creamos un bucle for, para que el valor i valla aunmentando progresivamente hasta llegar a 255.
  //Se pone hasta 256 porque como es hasta 255(arduino solo toma una cuarta parte de todo que seria 1023)seria para que cuando llegase a 255 no sumaria mas.
  analogWrite(led, i);//Decimos que es una salida analogica por lo que puede cambiar los voltajes que salen del pin entre 0(Minimo) y 255(maximo).
  delay(3000/255);//Los milisegundos que tardara en aumentar una unidad la i sera de 3000(3 segundos)entre 255(los procesos que hace hasta encenderse completamente,llegar al maximo voltaje)
  }//Cerramos el bucle for

  for(int i=255; i >= 0; i--){//Creamos ahora un bucle de for alcontrario que el anterior para que descienda la luz del led(la i) progrecivamente hasta apagarse.
  analogWrite(led, i);  
  delay(3000/255);
  }
}//Cerramos el void loop

OK, te comento un poco. No entiendo muy bien la razón de los delay(0), ya que ponerlo o no, hace exactamente lo mismo, ya que una pausa de 0 milisegundos, es igual a que no hay pausa.

Lo que tampoco entiendo, es la razón del delay (pot/4).

Lo que consigues con esto, es hacer un delay más corto. Si simplemente fuese un delay (pot) tendrías un delay entre 0 y 1023 milisegundos (entre cero y poco más de un segundo), pero en cambio, tienes un delay entre 0 y 256 milisegundos, lo que es más o menos un cuarto de segundo (1023/4=255,75 que al ser un int, se redondea a 256)

Funcionar, funciona. No sé si es exactamente lo que se pide en el ejercicio, pero funciona. En otro mensaje de este mismo post, te pondré un video de como funciona tu código.

Aquí tienes el vídeo:

He puesto el potenciómetro en dos posiciones distintas, pero no en la de 0, ya que entonces, los leds amarillos, ni se ven encenderse.

Muchas gracias por la ayuda, ya quite lo de delay(0) y puse solo pot y no pot /4(lo puse porque el potenciometro de mi clase era muy malo o algo así)

Ya lo entrege y muy bien todo :smiley:

Gracias por todo

Ya nos dirás qué nota te ponen!!!

Depende de como lo presentó y como lo explicó.

Nos ponen, jajaja