Hola de nuevo amigos.tengo este codigo la verdad es que me va muy bien pero quiero cambiar que los leds 2,3,4 se enciendan muy despacio y luego se apaguen muy despacio, e estado indagando pero solo se poner mas tiempo o menos tiempo que estos luzcan no se hacer ese conjunto,gracias por vuestra ayuda.
int leds[]={3,4,5,6,7,8};//semaforo 1 y 2 (rojo, amarillo, verde)
int tiempo1=3000;
int tiempo2=500;
int n;
void setup() {
for (n=0;n<6;n++) {
pinMode (leds[n],OUTPUT);
}}
void secuencia(){
digitalWrite (leds[1],LOW);//amarillo1 off
digitalWrite (leds[0],HIGH);//rojo1 on
digitalWrite (leds[3],LOW);//rojo2 off
digitalWrite (leds[5],HIGH);//verde2 on
delay (tiempo1);
digitalWrite (leds[5],LOW);//verde2 off
digitalWrite (leds[4],HIGH);//amarillo2 on
delay (tiempo2);
digitalWrite(leds[0],LOW);//rojo1 off
digitalWrite (leds[2],HIGH);//verde1 on
digitalWrite (leds[4],LOW);//amarillo2 off
digitalWrite (leds[3],HIGH);//rojo2 on
delay (tiempo1);
digitalWrite (leds[2],LOW);//verde1 off
digitalWrite(leds[1],HIGH);//amarillo on
delay (tiempo2);
}
void loop () {
secuencia();
}
¿A qué te refieres con que se apaguen y enciendan muy despacio?
¿Quizá te refieres a que el brillo del led vaya disminuyendo hasta que se apague? (y viceversa)
ener:
¿A qué te refieres con que se apaguen y enciendan muy despacio?
¿Quizá te refieres a que el brillo del led vaya disminuyendo hasta que se apague? (y viceversa)
Hola ener si, asi es correcto que se vayan encendiendo muy lentamente y luego se vayan apagando muy lentamente.
Lo que tienes que hacer es declarar usar las salidas como analógicas, no digitales. Tendrías que hacer un blucle en el que utilices analogWrite() en lugar de digitalWrite(), y como parámetro del analogWrite(), dentro del bucle, le vas dando valores que vayan de 1023 hasta 0 y viceversa.
Así conseguirás que se apaguen o prendan lentamente perdiendo o ganando brillo.
Ahora no me da tiempo de armar un código de ejemplo, pero más tarde lo haré, si es que no te adelantas, pues de seguro hay varios tutoriales al respecto.
...Pues eperaré tu ejemplo o el aguno de otro compañero para poder hacerlo yo,pero los pins 6,7,y 8 queria dejarlos tal cual e estado mirando tutoriales pero no los puedo compatebilzar los 6 pines juntos es decir:
pin-3 encender muy lentamente y apagar muy lentamente.
pin-4 encender muy lentamente y apagar muy lentamente.
pin-5 encender muy lentamente y apagar muy lentamente.
pin-6 dejar como esta.
pin-7 dejar como esta.
pin-8 dejar como esta.
bueno.....gracias por vuestros aportes pero aun soy nuevo en esto y poco a poco voy logrando algo,la placa que voy a usar es un arduino Uno....y si tengo que cambiar los pines me da igual a donde sea...espero la/s lecciones de los maestros....y me digan a donde sera mejor tener esos pines y los cambio...
Puedes comenzar a hacer lo que te han sugerido y no esperar a que te lo hagan.
Una vez mas lo diré, si no hay esfuerzo del que consulta mucha gente no brindará ayuda.
En el foro en inglés, son muy estrictos con esto, acá somos mas liberales pero te han indicado como hacerlo
Prueba con analogWrite(pin, valor); donde valor va de 0 a 255 y veras como el led cambia de brillo.
Luego imagina como hacer que lo haga gradualmente.
le pones un delay(algo) ya que no dices cuanto va a demorar y dentro de un loop vas cambiando el brillo y lo mantienes ese tiempo minimo.
El resultado será un crecimiento y decrecimiento del brillo al ritmo que tu establezcas.
surbyte:
Puedes comenzar a hacer lo que te han sugerido y no esperar a que te lo hagan.
Una vez mas lo diré, si no hay esfuerzo del que consulta mucha gente no brindará ayuda.
En el foro en inglés, son muy estrictos con esto, acá somos mas liberales pero te han indicado como hacerlo
Prueba con analogWrite(pin, valor); donde valor va de 0 a 255 y veras como el led cambia de brillo.
Luego imagina como hacer que lo haga gradualmente.
le pones un delay(algo) ya que no dices cuanto va a demorar y dentro de un loop vas cambiando el brillo y lo mantienes ese tiempo minimo.
El resultado será un crecimiento y decrecimiento del brillo al ritmo que tu establezcas.
Disculpa surbyte aqui nadie a dicho y menos yo que me hagan el codigo,he puesto un codigo y yo quiero hacerlo a mi gusto como soy nuevo en esto no se me da muy bien la pogramación el compañero ener se a ofrecido ha hacerme un ejemplo... no el codigo....a partir de ahi si me pondre mas con ello,gracias por tú reporte de todas maneras.
estudiando y mirando tutoriales he llegado a hacer este codigo que serán 6 leds al final,pero solo estoy probando con uno,queria que el led tardara en encenderse un poco mas como pues se apaga enseguida queria hacer unos 40 segundos de encenderse y otros 40 segundo en apagarse... al encenderse este pega el golpe y se enciende del todo yo quiero que se encienda poco a poco...gracias de antemano..
int led3=3;
int led4=4;
int led5=5;
int led6=6;
int led7=7;
int brightness = 0;
int fadeAmount = 1;
void setup(){
pinMode(led3,OUTPUT);
//pinMode(led4,OUTPUT);
//pinMode(led5,OUTPUT);
//pinMode(led6,OUTPUT);
//pinMode(led7,OUTPUT);
}
void loop(){
analogWrite(led3,brightness);
brightness = brightness + fadeAmount;
if (brightness == 0 || brightness == 255) {
fadeAmount = -fadeAmount ;
}
delay(10);
}
Esto controla cuando hacer un cambio o inversión de brillo ascendente o descendente +1 o -1
delay(10);
Y acá el responsable de la velocidad de desvanecimiento o aumento de brillo
10 mseg x 256 = 2560 mseg o 2.56 seg
si quieres mas amplia ese delay.
Quieres 40 segundos entonces 40 seg = 40000 mseg => 40000/256 = 156.25 pero como debe ser entero 156
delay(156) te dará tus 40 seg en uno u otro sentido
si lo e entendido pero no se como se cambian los valores para que encienda y se apague...quieres decir que para encender y apagar lentamente hay que hacer muchos loop?
Acá te dejo un pequeño código de ejemplo, con el que se encenderá un led paulatinamente durante 40 segundos.
Espero te sea de utilidad como ejemplo, lo entiendas y puedas adaptarlo a tus necesidades, modificándolo y ampliándolo.
int a=0;
while (a<256)
{
analogWrite(led,a);
delay(156);
//156 es 40*1000/256, como son 256 vueltas, hay que dividir 40 segundos entre 256
a++;
}
ener:
Acá te dejo un pequeño código de ejemplo, con el que se encenderá un led paulatinamente durante 40 segundos.
Espero te sea de utilidad como ejemplo, lo entiendas y puedas adaptarlo a tus necesidades, modificándolo y ampliándolo.
int a=0;
while (a<256)
{
analogWrite(led,a);
delay(156);
//156 es 40*1000/256, como son 256 vueltas, hay que dividir 40 segundos entre 256
a++;
}
Me da la impresión que copiaste el código y lo compilaste. No te diste cuenta que ese es sólo un pedazo de código que debe se incluido dentro del programa completo. Un programa completo para arduino debe contener mínimamente las funciones void setup() y void loop()
Sugiero que postergues para después lo de los leds, y ahora te dediques a aprender lo básico de la programación, haciendo y modificando ejemplos como "hola mundo" que son los primeros ejemplos que hay en todo lado.