duda sencilla de novato pero nadie ha encontrado solución

  • Iniciador del tema Iniciador del tema krilos
  • Fecha de inicio Fecha de inicio
Registrado
13 Nov 2012
Mensajes
3
Ubicación
madrid
Provincia
madrid
Muevo aquí esta pregunta que creo que va mejor que donde estaba. Perdón.

Hola a todos.
He empezado hace muy poco con arduino con la intención de poder controlar algún día todo el acuario que hay en mi casa desde antes de nacer yo. Pero un amigo me enseñó que se podía controlar el PH, temperatura, CO2, etc y me quedé con las ganas.
Y aunque al principio me empezaron funcionando todas las prácticas sencillas que vienen en los primeros tutos, de repente se me ha complicado la vida un montón por algo que a primera vista es de lo más sencillo.
Si digo que la práctica es que un led parpadee un par de veces y que luego haga el efecto día/noche, me diréis que está tirado, verdad?.
Si si. Eso pensaba yo.
Llevo dos días dándole vueltas a este "problemón" que no tiene más de 10 líneas y hasta he preguntado en otros foros pero no se le encuentra solución.
Si me pudiérais echar una mano os lo agradecería mucho.
Como os digo la idea es que un mismo led haga un par de destellos y luego se quede en un bucle de encendido/apagado como el efecto de día/noche.

En cambio está siendo IMPOSIBLE que funcione. Hace los dos destellos continuamente. Nunca pasa al efecto día/noche. Si quito uno de los efectos, el otro funciona perfecto y al revés también, pero los dos juntos no funcionan nunca porque siempre se queda parpadeando.
Después de mil pruebas he visto que el problema parecen ser los "delay". Si los quito se ve directamente el día/noche. Es normal puesto que al no haber delay, el encendio y apagado "digital" se hace muy rápido, pero al menos se ve que el código pasa de ahí. Pero si vuelvo a meter los delay para el parpadeo, la hemos fastidiado.

muchas gracias de antemano.


int led = 11; // the pin that the LED is attached to
int brightness = 0; // how bright the LED is
int fadeAmount = 5; // how many points to fade the LED by


void setup()
{
pinMode(led, OUTPUT);

}

void loop()
{
digitalWrite(led, HIGH);
delay(500);
digitalWrite(led,LOW);
delay(500);

analogWrite(led, brightness);
brightness = brightness + fadeAmount;
if (brightness == 0 || brightness == 125)
{
fadeAmount = -fadeAmount ;
}
delay(30);
}
 
Hola.

Prueba así:



int led = 11; // the pin that the LED is attached to
int brightness = 0; // how bright the LED is
int fadeAmount = 5; // how many points to fade the LED by


void setup()
{
pinMode(led, OUTPUT);
digitalWrite(led, HIGH);
delay(500);
digitalWrite(led,LOW);
delay(500);
}

void loop()
{


analogWrite(led, brightness);
brightness = brightness + fadeAmount;
if (brightness == 0 || brightness == 125)
{
fadeAmount = -fadeAmount ;
}
delay(30);
}
 
Hola,
la prueba más sencilla que se me ocurre y que podría tener algo que ver es cambiar los digitalWrite por analogwrite.



Código:
int led = 11; // the pin that the LED is attached to
int brightness = 0; // how bright the LED is
int fadeAmount = 5; // how many points to fade the LED by


void setup() 
{ 
   pinMode(led, OUTPUT);

} 

void loop() 
{ 
   analogwrite(led, 255);
   delay(500);
   analogwrite(led,0);
   delay(500); 

   analogWrite(led, brightness); 
   brightness = brightness + fadeAmount;
   if (brightness == 0 || brightness == 125) {
      fadeAmount = -fadeAmount ; 
   } 
   delay(30);
}

Cuéntanos que tal !
 
Hola otra vez,
no había leído bien tu posts y me acabo de dar cuenta que tu programa no tiene ningún problema. Simplemente hace lo que tiene que hacer, lo que pasa es que no te da tiempo a ver el efecto dia/noche con un delay(30). Enseguida se enciende al máximo.

Tu quieres que el parpadeo se haga siempre y luego ver como está el efecto dia/noche ¿no? ¿O tu quieres hacer un parpadeo al principio solo una vez, y luego quedarte en el efecto amanecer siempre?

Si es lo segundo, la respuesta de jmcadsl es la tuya ;)
 
Atrás
Arriba