Salve, sto programmando Arduino uno per il controllo del presepe alba-tramonto. Voglio subito precisare che non sono un programmatore, quindi nel caso dica o scriva baggianate chiedo scusa in anticipo. lo sketch che sto utilizzando l'ho preso su internet e adattato alle mie esigenze.
#define pin_down 10
#define pin_sun 11
#define pin_sunset 9
#define pin_moon 6
#define pin_starsA 5
#define pin_starsB 3
#define pin_luciint 2
#define pin_luciest 4
#define pin_lampi 12
long onemin1[4] = { 20972,114788,20976,143257 };
long onemin2[4] = { 12582,68874,12585,85953 };
long timeStepOld = 0;
long timeStep = 0;
long timeCurr = 0;
byte fade[] = {255,250,245,240,235,230,225,220,215,210,205,200,195,190,185,180,175,170,165,160,155,150,145,140,135,130,125,120,115,110,105,100,95,90,85,80,75,70,65,60,55,50,45,40,35,30,25,20,15,10,5,0}; // 52 step
byte curr = 0;
void setup() {
Serial.begin( 9600 );
pinMode( pin_down ,OUTPUT );
pinMode( pin_sun ,OUTPUT );
pinMode( pin_sunset,OUTPUT );
pinMode( pin_moon ,OUTPUT );
pinMode( pin_starsA,OUTPUT );
pinMode( pin_starsB,OUTPUT );
pinMode( pin_luciint,OUTPUT );
pinMode( pin_luciest,OUTPUT );
analogWrite( pin_down ,LOW );
analogWrite( pin_sun ,LOW );
analogWrite( pin_sunset,LOW );
analogWrite( pin_moon ,LOW );
analogWrite( pin_starsA,LOW );
analogWrite( pin_starsB,LOW );
digitalWrite( pin_luciint,LOW );
digitalWrite( pin_luciest,LOW );
Serial.println("-- START --");
}
void loop() {
timeCurr = onemin2[curr];
timeStep = (timeCurr/52);
Serial.print("Current: "); Serial.println(curr);
Serial.print("Time current: "); Serial.println(timeCurr);
Serial.print("Time single step: "); Serial.println(timeStep);
// down
if ( curr == 0 ) {
Serial.print("Fase: "); Serial.println("DOWN");
for ( int i=0; i<52; i++) {
analogWrite(pin_down, fade[(51-i)]);
if ( fade[i] < 25) digitalWrite(pin_luciest, 0 );
analogWrite(pin_sun, 0 );
analogWrite(pin_sunset, 0 );
analogWrite(pin_moon, fade[i] );
analogWrite(pin_starsA, fade[i] );
analogWrite(pin_starsB, fade[i] );
digitalWrite(pin_luciint, 1 );
delay( timeStep );
}
timeStepOld = timeStep;
}
// sun
if ( curr == 1 ) {
Serial.print("Fase: "); Serial.println("SUN");
for ( int i=0; i<52; i++) {
analogWrite(pin_down, fade[i]);
if ( fade[i] < 125) analogWrite(pin_sun, fade[(51-i)]*2 );
if ( fade[i] < 10) digitalWrite(pin_luciint, 0 );
analogWrite(pin_sunset, 0 );
analogWrite(pin_moon, 0 );
analogWrite(pin_starsA, 0 );
analogWrite(pin_starsB, 0 );
digitalWrite(pin_luciest, 0 );
delay( timeStepOld );
}
timeStepOld = (timeStepOld*52); // elapsed time
timeCurr = (timeCurr - timeStepOld);
delay( timeCurr );
}
// sunset
if ( curr == 2 ) {
Serial.print("Fase: "); Serial.println("SUNSET");
for ( int i=0; i<52; i++) {
analogWrite(pin_down, 0);
analogWrite(pin_sun, fade[i] );
analogWrite(pin_sunset, fade[(51-i)] );
if ( fade[i] < 150) digitalWrite(pin_luciint, 1 );
analogWrite(pin_moon, 0 );
analogWrite(pin_starsA, 0 );
analogWrite(pin_starsB, 0 );
digitalWrite(pin_luciest, 0 );
delay( timeStep );
}
timeStepOld = timeStep;
}
// moon
if ( curr == 3 ) {
Serial.print("Fase: "); Serial.println("MOON");
for ( int i=0; i<52; i++) {
analogWrite(pin_down, 0);
analogWrite(pin_sun, 0 );
analogWrite(pin_sunset, fade[i] );
if ( fade[i] < 20) analogWrite(pin_moon, fade[(51-i)]*2 );
if ( fade[i] < 125) analogWrite(pin_starsA, fade[(51-i)]*2 );
if ( fade[i] < 250) analogWrite(pin_starsB, fade[(51-i)]*2 );
if ( fade[i] < 100) digitalWrite(pin_luciest, 1 );
digitalWrite(pin_luciint, 1 );
delay( timeStepOld );
}
timeStepOld = (timeStepOld*52); // elapsed time
timeCurr = (timeCurr - timeStepOld);
delay( timeCurr );
}
curr++;
if ( curr >= 4 ) { curr = 0; }
}
Questo codice funziona tutto alla perfezione come desidero, ora vorrei aggiungere una nuova animazione (che simulano i lampi nel cielo) dove il "pin_lampi 12" è la nuova luce da aggiungere.. Ho pensato di farlo facendo accende i spegnere i led dopo un certo periodo (es. 30000ms) e rispegnerli subito dopo (es. 30100ms) usando il comando millis da aggiungere nelle fasi che voglio, ma se metto due comandi millis di seguito entrambi non funzionano.
Come potrei fare?
Grazie mille.