Problemas con efectos de luces para belen

Buenas noches,bueno antes de nada agradecer vuestra ayuda y desearos unas felices fiestas.

El tema que nos ocupa supongo que no tendrá demasiada complicación para los expertos del foro pero como digo en el enunciado soy neófito en programación y en arduino.
He buscado y empollado manuales de Internet y buscado por todos lados y la verdad es que he encontrado cosas por separado que al juntarlas no terminan de funcionar.
el lío esta en que tengo un proyecto para un belén,se que a algunos os dará la risa tonta,pero para los peques me hacia ilusión,después de buscar por Internet equipos que hicieran los efectos decidí intentarlo con arduino debido al elevado costo de los controladores para esos menesteres.
La cuestión es que los efectos de anochecer y atardecer los tengo conseguidos,incluso retocados para una tercera salida ,que no estaba originalmente en el código que localice,y que he suavizado en tiempo alargando las transiciones.
Por otro lado,están los efectos de las estrellas y de las fogatas que si bien separando los códigos funcionan correctamente, al unirlos en un solo programa dejan de hacerlo como me gustaría, es decir,quiero que las luces de las estrellas funcionaran con una cadencia y que la lumbre de las fogatas a otra distinta. no se si el tema esta en que no separo correctamente las funciones o no están bien descritas o por que no se puede hacer.
En definitiva me gustaría que funcionasen ambas funciones simultáneamente en un mismo programa.
¿Como habría que hacerlo para que esto fuese como lo describo?
A continuación os pongo el programa para los efecto de estrellas y fuegos:

int estrellas1 = 2;    // led blanco
int estrellas2 = 3;   // led blanco
int estrellas3 = 4;   // led blanco
int llama1 = 5;    // led rojo
int llama2 = 6;   // led naranja
int llama3 = 7;   // led naranja
int llama11 = 8;    // led rojo
int llama12 = 9;   // led naranja
int llama13 = 10;   // led naranja
void setup() {

   pinMode(estrellas1, OUTPUT);
   pinMode(estrellas2, OUTPUT);
   pinMode(estrellas3, OUTPUT);
   pinMode(llama1, OUTPUT);
   pinMode(llama2, OUTPUT);
   pinMode(llama3, OUTPUT);
   pinMode(llama11, OUTPUT);
   pinMode(llama12, OUTPUT);
   pinMode(llama13, OUTPUT);

}

void loop() {
 { void estrellas();
   void llamas();
 }
 { void estrellas();
 analogWrite(estrellas1, random(5,200));
 analogWrite(estrellas2, random(50,255));
 analogWrite(estrellas3, random(10,150));
 delay(random(1,200));}
 delay(10);
 { void llamas();
 analogWrite(llama1, random(10,220));
 analogWrite(llama2, random(30,255));
 analogWrite(llama3, random(10,255));
 analogWrite(llama11, random(20,240));
 analogWrite(llama12, random(15,250));
 analogWrite(llama13, random(40,150));
 delay(random(1,50));}

}

[code]

[/code]

Si copias y pegas nunca aprendes.
Tomas un libro, sigues los 2 o 3 capitulos iniciales y te puedes manejar mas o menos bien.
O vas a Documentación y buscas las clases de Youtube y lo mismo.

Ahrora te lo resuelvo pero tenlo presente para la próxima.

int estrellas1 = 2;    // led blanco
int estrellas2 = 3;   // led blanco
int estrellas3 = 4;   // led blanco
int llama1 = 5;    // led rojo
int llama2 = 6;   // led naranja
int llama3 = 7;   // led naranja
int llama11 = 8;    // led rojo
int llama12 = 9;   // led naranja
int llama13 = 10;   // led naranja

void setup() {
    pinMode(estrellas1, OUTPUT);
    pinMode(estrellas2, OUTPUT);
    pinMode(estrellas3, OUTPUT);
    pinMode(llama1, OUTPUT);
    pinMode(llama2, OUTPUT);
    pinMode(llama3, OUTPUT);
    pinMode(llama11, OUTPUT);
    pinMode(llama12, OUTPUT);
    pinMode(llama13, OUTPUT);
}

void loop() {
  void estrellas();
  void llamas();
}

void estrellas() {
  analogWrite(estrellas1, random(5,200));
  analogWrite(estrellas2, random(50,255));
  analogWrite(estrellas3, random(10,150));
  delay(random(1,200));
  delay(10);
}

void llamas() {
  analogWrite(llama1, random(10,220));
  analogWrite(llama2, random(30,255));
  analogWrite(llama3, random(10,255));
  analogWrite(llama11, random(20,240));
  analogWrite(llama12, random(15,250));
  analogWrite(llama13, random(40,150));
  delay(random(1,50));
}

NOTA: te envié privado, edita tu hilo según las normas del foro

En vista de que al menos te has molestado en editar tu mensaje para poner etiquetas, intentaré poner mi granito de arena al código que ya propuso surbyte. Sólo he sustituido los delays por millis para que el delay de una función no influya en el tiempo de la otra. Otra pequeña licencia ha sido utilizar variables estáticas en lugar de globales (así no tengo que echar mucha imaginación para inventarme distintos nombres para las variables de cada función :))).

const int estrellas1 = 2;    // led blanco
const int estrellas2 = 3;   // led blanco
const int estrellas3 = 4;   // led blanco
const int llama1 = 5;    // led rojo
const int llama2 = 6;   // led naranja
const int llama3 = 7;   // led naranja
const int llama11 = 8;    // led rojo
const int llama12 = 9;   // led naranja
const int llama13 = 10;   // led naranja

void setup() {
    pinMode(estrellas1, OUTPUT);
    pinMode(estrellas2, OUTPUT);
    pinMode(estrellas3, OUTPUT);
    pinMode(llama1, OUTPUT);
    pinMode(llama2, OUTPUT);
    pinMode(llama3, OUTPUT);
    pinMode(llama11, OUTPUT);
    pinMode(llama12, OUTPUT);
    pinMode(llama13, OUTPUT);
}

void loop() {
  estrellas();
  llamas();
}

void estrellas() {
  static unsigned long ultimoDestello=0;
  static unsigned long siguienteDestello=0;
  if ((millis()-ultimoDestello) >= siguienteDestello) {
    analogWrite(estrellas1, random(5,200));
    analogWrite(estrellas2, random(50,255));
    analogWrite(estrellas3, random(10,150));
    ultimoDestello+=siguienteDestello;
    siguienteDestello = random(1,200);
  }
}

void llamas() {
  static unsigned long ultimoDestello=0;
  static unsigned long siguienteDestello=0;
  if ((millis()-ultimoDestello) >= siguienteDestello) {
    analogWrite(llama1, random(10,220));
    analogWrite(llama2, random(30,255));
    analogWrite(llama3, random(10,255));
    analogWrite(llama11, random(20,240));
    analogWrite(llama12, random(15,250));
    analogWrite(llama13, random(40,150));
    ultimoDestello+=siguienteDestello;
    siguienteDestello = random(1,50);
  }
}

Así tendremos, además, el enésimo ejemplo sobre cómo se usa millis, que es algo en lo que muchos se atascan.
Saludos.

Yo puse las etiquetas, no el autor del hilo.

Buenos días, antes de nada pedir perdón nuevamente, y agradecer a los dos vuestros consejos y aportaciones.
A surbyte, decirle que tras su privado si edite el mensaje origibal, tanto código como encabezamiento, aunque tu ya habías editado en tu post. A demás seguí tu consejo y estoy siguiendo los tutos del hilo que me pasaste.

Gracias de nuevo y perdón por lo ocurrido intentare que no vuelva a pasar.

Bueno me da gusto. Verás que cuando retomes estarás con mejores armas.

Para elpilas

En primer lugar, te felicito por tu demostrada afición, sigue adelante y disfrutaras de ARDUINO.

En segundo lugar te rogaría, si pudieras explicar que solución has dado para el efecto anochecer .
Enciendes lamparas a 220 v. ??

Saludos y bienvenido al club !!!!

int dia = 3;    // LED blanco cielo pin d03
int noche=5;   // LED azul cielo pin d05
int casa1=6;    // LED de casa arabe pin d06
int transicion=7;   //LED rojo atardecer
int casa2=9;    // LED de casa pequeña pin d09
int casa3=10;   // LED de casa grande pin d10
int portal=11;  // LED del portal de belen d11

void setup()  { 
  // nada
} 

void loop()  { 
  // hacerse de día:
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=1) { 
    if  (fadeValue<255)
    {digitalWrite(transicion,HIGH);}
      else
    {digitalWrite(transicion,LOW);}
    analogWrite(noche,255-fadeValue);
    analogWrite(dia, fadeValue);
    delay(300);

    if (fadeValue<70)
      {digitalWrite (casa1,HIGH);}
      else
      {digitalWrite (casa1,LOW);}
     if (fadeValue<65)
      {digitalWrite (casa2,HIGH);}
      else
      {digitalWrite (casa2,LOW);}  
     if (fadeValue<40)
      {digitalWrite (casa3,HIGH);}
      else
      {digitalWrite (casa3,LOW);} 
     if (fadeValue<80)
      {digitalWrite (portal,HIGH);}
      else
      {digitalWrite (portal,LOW);}     
    delay(150);                        
  } 
  delay (120000);
  // hacerse de noche:
  for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=1) { 
    analogWrite(dia, fadeValue);
    if (fadeValue>0)
       {digitalWrite(transicion,HIGH);}
       else
       {digitalWrite(transicion,LOW);}
    analogWrite(noche,255-fadeValue);
    delay (300);

    analogWrite(noche,255-fadeValue);
    if (fadeValue<110)
      {digitalWrite (casa1,HIGH);}
      else
      {digitalWrite (casa1,LOW);}
     if (fadeValue<105)
      {digitalWrite (casa2,HIGH);}
      else
      {digitalWrite (casa2,LOW);}  
     if (fadeValue<80)
      {digitalWrite (casa3,HIGH);}
      else
      {digitalWrite (casa3,LOW);} 
     if (fadeValue<120)
      {digitalWrite (portal,HIGH);}
      else
      {digitalWrite (portal,LOW);}      
    delay(150);                            
  } 
  delay (120000);
}]

Hola, buenas noches,perdón por la tardanza en responder....el curro y los peques que no me dejan.
Los efectos de luces van todos montados en leds,de momento y hasta no tenerlo todo atado solo monto 1 en cada salida, pero para gobernar las tiras de leds que tenia pensado, montare mosfet IRF 540. Al código que encontré en Internet, le he añadido una nueva salida para meter el color rojo y así darle mas realismo a las transiciones.
Estoy empezando en esto y llevo 2 días a piñón empollando vídeos y tutos de arduino,las modificaciones hechas han sido a base de cabezazos pero creo que funcionaran bien.
Este es el programa en cuestion. Le he añadido " transion " para introducir el color rojo en el montaje final.

Ahora lo que no me aclaro es como es como montar el programa de llamas y estrellas acoplado a este de ciclo dia/noche y no morir en el intento.

He leido en otro post que no se puede utilizar for con milli por lo que ya me pierdo a la hora de hacer el fader de las luces.

Alguna idea a mi nivel? alguna sugerencia de por donde pueden ir los tiros para poder estrujarme la sesera ?

Gracias y un saludo
P.D. Perdon por el mensaje de arriba..... me he liao.

Hola elpilas

Gracias por la respuesta .Yo tambien estoy buscando soluciones practicas para efectos fader con corriente a 220v.

Si encuentro algo, ya te lo enviare.

De momento, te aconsejare que utilices el MOSFET IRL 520 ,he montado varias instalaciones con el. Tiene una salida de 9 Amperios (podrias alimentar teoricamente mas de 400 leds !!) ademas su "gate" es para nivel de conexión con Arduino (fijate letra " L " : los " F " son mas "duros").

Tambien te envio un enlace a un youtube que te puede orientar Control de Tiras de LED RGB con Arduino - PWM - Teoria y Practica - YouTube.

Por otra parte:
No te has olvidado de declarar en setup como output las salidas: dia,noche, casa1, etc ?.?
A mi no se me enciende nada en la prueba !!!

Te envio esta rectificacion de novato a novato !.!.! :slight_smile: :slight_smile: ?.?.?
Fijate en las anotaciones que he hecho

/*
 * 
 * FORO BELEN 2.3
 *  Dec 11, 2017, 08:54 pm Last Edit: Dec 11, 2017, 09:02 pm by elpilas 
 * 
 */

int dia = 3;    // LED blanco cielo pin d03
int noche = 7;   // LED azul cielo pin d05
int casa1 = 8;    // LED de casa arabe pin d06
int transicion = 9;   //LED rojo atardecer
int casa2 = 10;    // LED de casa pequeña pin d09
int casa3 = 11;   // LED de casa grande pin d10
int portal = 12;  // LED del portal de belen d11

void setup() 
 {            //Aqui he añadido una rutina que te permite saber que titulo tienes cargado                    
// ==========================
Serial.begin(9600);  
Serial.println(F(" < FORO BELEN 2.3 >"));  
Serial.println(F(""));  // Espacio en blanco 
// ===========================
pinMode(dia, OUTPUT);
pinMode(noche, OUTPUT);
pinMode(casa1, OUTPUT);
pinMode(transicion, OUTPUT);
pinMode(casa2, OUTPUT);
pinMode(casa3, OUTPUT);
pinMode(portal, OUTPUT);
}
                          // He reducido todos los"delay" para dar mas velocidad al codigo
void loop()  {
  
  // hacerse de día:
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=1) {
 
// Estas inclusiones te permitiran ver por el monitor serial la evolucion del conteo

 Serial.print("FADE VALUE =");
  Serial.println(fadeValue); 
   
 if  (fadeValue<255)
  {
      digitalWrite(transicion,HIGH);
  }
      else
  {
      digitalWrite(transicion,LOW);
  }
    analogWrite(noche,255-fadeValue);
    analogWrite(dia, fadeValue);
    delay(30);

    if (fadeValue<70)
      {digitalWrite (casa1,HIGH);}
      else
      {digitalWrite (casa1,LOW);}
     if (fadeValue<65)
      {digitalWrite (casa2,HIGH);}
      else
      {digitalWrite (casa2,LOW);} 
     if (fadeValue<40)
      {digitalWrite (casa3,HIGH);}
      else
      {digitalWrite (casa3,LOW);}
     if (fadeValue<80)
      {digitalWrite (portal,HIGH);}
      else
      {digitalWrite (portal,LOW);}     
    delay(50);                       
  }
  delay (1000);
  // hacerse de noche:
  for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=1) {
    Serial.print("FADE VALUE =");
  Serial.println(fadeValue); 
    analogWrite(dia, fadeValue);
    if (fadeValue>0)
       {digitalWrite(transicion,HIGH);}
       else
       {digitalWrite(transicion,LOW);}
    analogWrite(noche,255-fadeValue);
    delay (30);

    analogWrite(noche,255-fadeValue);
    if (fadeValue<110)
      {digitalWrite (casa1,HIGH);}
      else
      {digitalWrite (casa1,LOW);}
     if (fadeValue<105)
      {digitalWrite (casa2,HIGH);}
      else
      {digitalWrite (casa2,LOW);} 
     if (fadeValue<80)
      {digitalWrite (casa3,HIGH);}
      else
      {digitalWrite (casa3,LOW);}
     if (fadeValue<120)
      {digitalWrite (portal,HIGH);}
      else
      {digitalWrite (portal,LOW);}     
    delay(15);                           
  }
  delay (1000);
}

Suerte y que no decaiga la fiesta !!!

.

Sinceramente me pierdo al intentar ayudarlos. No se si este hilo es de luces LED o de lámparas. Son dos cosas diferentes que pueden tener similitudes en partes del código pero el ataque es distinto.
Me quedo siempre con el control de luces leds ya que las lámparas exigen control de fase, y sincronismo con cruce por cero.
Espero respuestas y les daremos una mano porque se nos acerca Navidad y esto debe estar listo!!!

Hola surbyte y elpilas

Tal vez me he colado en este hilo, al pregutar a elpilas, si estaba utilizando lamparas de 220v. para "efecto amanecer".

Veo por su respuestas, que no debe conocer nada para mi consulta.

surbyte :

If eres tan amable nos das un empujon a el y a mi, else te envio un nuevo post con mi peticion sobre regulacion a 220v con sistema de "cruce por cero" a TRIAC .

Un saludo !!!!

No hace falta busca AC Phase control circuit en el buscador. A ese sitio te voy a remitir.
En documentación también hay comentrios al respecto.

elpilas:
Hola, buenas noches,perdón por la tardanza en responder....el curro y los peques que no me dejan.
Los efectos de luces van todos montados en leds,de momento y hasta no tenerlo todo atado solo monto 1 en cada salida, pero para gobernar las tiras de leds que tenia pensado, montare mosfet IRF 540. Al código que encontré en Internet, le he añadido una nueva salida para meter el color rojo y así darle mas realismo a las transiciones.

Bien. Queda entonces claro que no hay corriente alterna que manejar en este caso.

elpilas:
Ahora lo que no me aclaro es como es como montar el programa de llamas y estrellas acoplado a este de ciclo dia/noche y no morir en el intento.

¿Pero van a ser uno o dos arduinos? Porque los códigos de amanecer/anochecer y los de llamas y estrellas repiten algunos pines iguales.

Buenos días, estoy fuera trabajando y no he podido mirar ni hacer nada, así que una vez mas pido perdón. Esta tarde cuando llegue a casa me pondré manos a la obra. Antes de nada gracias por vuestra inestimable ayuda. Seria 1 solo arduino mega; hay pines repetidos porque en principio eran dos codigos independientes los cuales quería integrar en uno solo pero como comentaba antes al compañero, después de reubicar los pines de salida y unificar los codigos, los efectos de estrellas y llamas dejaban de funcionar.
Por otra parte, los delay tan bestiales (120000), son los que me da el tiempo de los ciclos día y noche, y los de 300 y150, hacen que las transiciones no sean tan bruscas, duran aproximadamente 1 minuto y 15 segundos. Con el conjunto del código un ciclo completo dura unos 7 minutos aproximadamente, tiempo suficiente para disfrutar tanto de la noche con sus fuegos y estrellas como del día con su cascada.
Por cierto, en cuanto al control de los leds, había pensado un previo con un bc337 o similar.

Un saludo y muchas gracias.

Bien. Comienza al menos poniendo los dos programas con los pines definitivos e intentaremos unificarlos (porque nos has despertado el espíritu navideño y eso :slight_smile: ), a condición de que posteriormente nos muestres un vídeo con el resultado.

Bueno pues los códigos son los mostrados con anterioridad:

El primero es el modificado por noter, es el encargado de los efectos de las estrellas y las fogatas.

const int estrellas1 = 2;    // led blanco
const int estrellas2 = 3;   // led blanco
const int llama1 = 5;    // led rojo
const int llama2 = 6;   // led naranja
const int llama3 = 7;   // led naranja
const int llama11 = 8;    // led rojo


void setup() {
    pinMode(estrellas1, OUTPUT);
    pinMode(estrellas2, OUTPUT);
    pinMode(llama1, OUTPUT);
    pinMode(llama2, OUTPUT);
    pinMode(llama3, OUTPUT);
    pinMode(llama11, OUTPUT);

}

void loop() {
  estrellas();
  llamas();
}

void estrellas() {
  static unsigned long ultimoDestello=0;
  static unsigned long siguienteDestello=0;
  if ((millis()-ultimoDestello) >= siguienteDestello) {
    analogWrite(estrellas1, random(5,200));
    analogWrite(estrellas2, random(50,255));
    ultimoDestello+=siguienteDestello;
    siguienteDestello = random(1,200);
  }
}

void llamas() {
  static unsigned long ultimoDestello=0;
  static unsigned long siguienteDestello=0;
  if ((millis()-ultimoDestello) >= siguienteDestello) {
    analogWrite(llama1, random(10,220));
    analogWrite(llama2, random(30,255));
    analogWrite(llama3, random(10,255));
    analogWrite(llama11, random(20,240));
    ultimoDestello+=siguienteDestello;
    siguienteDestello = random(1,50);
  }
}

El segundo es el encargado de realizar los ciclos día/noche.

int dia = 4;    // LED blanco cielo pin d04
int noche=9;   // LED azul cielo pin d09
int casa1=11;    // LED de casa arabe pin d11
int transicion=10;   //LED rojo atardecer
int casa2=12;    // LED de casa pequeña pin d12
int casa3=13;   // LED de casa grande pin d13


void setup()  { 
  // nada
} 

void loop()  { 
  // hacerse de día:
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=1) { 
    if  (fadeValue<255)
    {digitalWrite(transicion,HIGH);}
      else
    {digitalWrite(transicion,LOW);}
    analogWrite(noche,255-fadeValue);
    analogWrite(dia, fadeValue);
    delay(300);

    if (fadeValue<70)
      {digitalWrite (casa1,HIGH);}
      else
      {digitalWrite (casa1,LOW);}
     if (fadeValue<65)
      {digitalWrite (casa2,HIGH);}
      else
      {digitalWrite (casa2,LOW);}  
     if (fadeValue<40)
      {digitalWrite (casa3,HIGH);}
      else
      {digitalWrite (casa3,LOW);} 
     
    delay(150);                        
  } 
  delay (120000);
  // hacerse de noche:
  for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=1) { 
    analogWrite(dia, fadeValue);
    if (fadeValue>0)
       {digitalWrite(transicion,HIGH);}
       else
       {digitalWrite(transicion,LOW);}
    analogWrite(noche,255-fadeValue);
    delay (300);

    analogWrite(noche,255-fadeValue);
    if (fadeValue<110)
      {digitalWrite (casa1,HIGH);}
      else
      {digitalWrite (casa1,LOW);}
     if (fadeValue<105)
      {digitalWrite (casa2,HIGH);}
      else
      {digitalWrite (casa2,LOW);}  
     if (fadeValue<80)
      {digitalWrite (casa3,HIGH);}
      else
      {digitalWrite (casa3,LOW);} 
      
    delay(150);                            
  } 
  delay (120000);
}

En cuanto al video no hay problema,nada mas tenga el montaje hecho lo subo.

Y si alguno se viene por sevilla lo mismo cae hasta un polvoroncito con su correspondiente copa de anís.

Muchas gracias

No he podido probarlo, y me gustaría comentarlo un poco para que tenga utilidad; pero para que vayas masticando algo:

const int estrellas1 = 2;    // led blanco
const int estrellas2 = 3;   // led blanco
const int estrellas3 = 4;   // led blanco
const int llama1 = 5;    // led rojo
const int llama2 = 6;   // led naranja
const int llama3 = 7;   // led naranja
const int llama11 = 8;    // led rojo
const int llama12 = 9;   // led naranja
const int llama13 = 10;   // led naranja

void setup() {
    pinMode(estrellas1, OUTPUT);
    pinMode(estrellas2, OUTPUT);
    pinMode(estrellas3, OUTPUT);
    pinMode(llama1, OUTPUT);
    pinMode(llama2, OUTPUT);
    pinMode(llama3, OUTPUT);
    pinMode(llama11, OUTPUT);
    pinMode(llama12, OUTPUT);
    pinMode(llama13, OUTPUT);
}

void loop() {
  estrellas();
  llamas();
}

void estrellas() {
  static unsigned long ultimoDestello=0;
  static unsigned long siguienteDestello=0;
  if ((millis()-ultimoDestello) > siguienteDestello) {
    analogWrite(estrellas1, random(5,200));
    analogWrite(estrellas2, random(50,255));
    analogWrite(estrellas3, random(10,150));
    ultimoDestello+=siguienteDestello;
    siguienteDestello = random(1,200);
  }
}

void llamas() {
  static unsigned long ultimoDestello=0;
  static unsigned long siguienteDestello=0;
  if ((millis()-ultimoDestello) > siguienteDestello) {
    analogWrite(llama1, random(10,220));
    analogWrite(llama2, random(30,255));
    analogWrite(llama3, random(10,255));
    analogWrite(llama11, random(20,240));
    analogWrite(llama12, random(15,250));
    analogWrite(llama13, random(40,150));
    ultimoDestello+=siguienteDestello;
    siguienteDestello = random(1,50);
  }
}

Ya me comentarás si hace algo o no ;).

Buenos días, noter, este ultimo código que mandaste si funciona por si solo, de hecho es el que tu me modificaste anteriormente introduciendo en el "millis". El problema viene cuando lo unes al de ciclos día/noche ya que las cadencias del código de estrellas/llamas se relentizan perdiendo su parpadeo original. Por eso tal y como me pediste, en mi anterior post puse los dos códigos separados, en primer lugar el que tu modificaste, es decir, este ultimo que has mandado nuevamente y en segundo lugar el de ciclos día/noche rectificando ambos para adaptarlo, en las salidas necesarias, a un arduino mega.

Gracias

Entiendo que las estrellas y las fogatas han de estar "activas" mientras sea de noche. Y que las luces de las casas estén encendidas de noche y apagadas de día. Entiendo que en la transición de la noche al día han de ir apagándose las casas "escalonadamente". Y en la transición del día a la noche las casas se han de encender "escalonadamente".

Pero lo que no tengo claro es qué quieres que hagan las estrellas y las fogatas en las transiciones de noche a día y de día a noche. Así como para qué son las salidas dia, noche y transicion (tal vez las tengas sólo para depurar el programa o tal vez tienen un cometido que no he entendido).

¿Podrías aclararme más detalladamente qué es lo que quieres que haga todo en conjunto?