Arduino Due : dopo accensione lo sketch riparte solo dopo pressione tasto reset

Buongiorno a tutti. Grazie al vostro aiuto prima per i collegamenti e poi per lo sketch ed i collegamenti, sono riuscito a creare e far funzionare il mio primo progetto, le luci per il presepio. Progetto molto semplice, ma mi è servito per capire moltissimo grazie ai consigli di tutti. Ora, dopo il cappello noiosissimo, il problema:
quando spengo Arduino e poi lo riaccendo, se non pigio il tasto reset non riparte. Per il resto va tutto alla grande. Le informazioni base che posso darvi sono che Arduino è alimentato con un alimentatore a 9 Volt e le luci con uno da 12V, il codice

int Giallo = 6;   
int Rosso = 7;
int Cometa = 9;
int Capanna = 8;
int Casa1 = 13;
int Casa2 = 12;
int Casa3 = 11;
int Casa4 = 10;

 
// define directions for LED fade
#define UP 0
#define DOWN 1
 
// constants for min and max PWM
const int minPWM = 0;
const int maxPWM = 255;
 
// State Variable for Fade Direction
byte fadeDirection = UP;
byte CometaDirection = UP;
byte CapannaDirection = UP;
byte Casa1Direction = UP;
byte Casa2Direction = UP;
byte Casa3Direction = UP;
byte Casa4Direction = UP;
 
// Global Fade Value
// but be bigger than byte and signed, for rollover
int fadeValue = 0;
int CometaValue = 0;
int CapannaValue = 0;
int Casa1Value = 0;
int Casa2Value = 0;
int Casa3Value = 0;
int Casa4Value = 0;
 
// How smooth to fade?
byte fadeIncrement = 5;
 
// millis() timing Variable, just for fading
unsigned long previousFadeMillis;
unsigned long prevFireMillis;

unsigned long CometaPrima;
unsigned long CapannaPrima;
unsigned long Casa1Prima;
unsigned long Casa2Prima;
unsigned long Casa3Prima;
unsigned long Casa4Prima;

 
void setup() {
  // put pwmLED into known state (off)
  analogWrite(Casa1, fadeValue); 
  analogWrite(Casa2, fadeValue);
  analogWrite(Casa3, fadeValue);
  analogWrite(Casa4, fadeValue);

  analogWrite(Cometa, fadeValue);
  analogWrite(Capanna, fadeValue);

  analogWrite(Giallo, fadeValue);
  analogWrite(Rosso, fadeValue);
  
}
 
void doTheFade(unsigned long thisMillis,int lamp,int fade_lamp) {
  // is it time to update yet?
  // if not, nothing happens
  if (thisMillis - previousFadeMillis >= fade_lamp) {
    // yup, it's time!
    if (fadeDirection == UP) {
      fadeValue = fadeValue + fadeIncrement;  
      if (fadeValue >= maxPWM) {
        // At max, limit and change direction
        fadeValue = maxPWM;
        fadeDirection = DOWN;
      }
    } else {
      //if we aren't going up, we're going down
      fadeValue = fadeValue - fadeIncrement;
      if (fadeValue <= minPWM) {
        // At min, limit and change direction
        fadeValue = minPWM;
        fadeDirection = UP;
      }
    }
    // Only need to update when it changes
    analogWrite(lamp, fadeValue);  
 
    // reset millis for the next iteration (fade timer only)
    previousFadeMillis = thisMillis;
  }
}


/*
----------------------------- CASA 1 -------------------------
*/

void fade_casa1(unsigned long Casa1Ora,int Casa1Fade) {
  // is it time to update yet?
  // if not, nothing happens
  if (Casa1Ora - Casa1Prima >= Casa1Fade) {
    // yup, it's time!
    if (Casa1Direction == UP) {
      Casa1Value = Casa1Value + fadeIncrement;  
      if (Casa1Value >= maxPWM) {
        // At max, limit and change direction
        Casa1Value = maxPWM;
        Casa1Direction = DOWN;
      }
    } else {
      //if we aren't going up, we're going down
      Casa1Value = Casa1Value - fadeIncrement;
      if (Casa1Value <= minPWM) {
        // At min, limit and change direction
        Casa1Value = minPWM;
        Casa1Direction = UP;
      }
    }
    // Only need to update when it changes
    analogWrite(Casa1, Casa1Value);  
 
    // reset millis for the next iteration (fade timer only)
    Casa1Prima = Casa1Ora;
  }
}







/*
----------------------------- COMETA -------------------------
*/

void fade_cometa(unsigned long CometaOra,int CometaFade) {
  // is it time to update yet?
  // if not, nothing happens
  if (CometaOra - CometaPrima >= CometaFade) {
    // yup, it's time!
    if (CometaDirection == UP) {
      CometaValue = CometaValue + fadeIncrement;  
      if (CometaValue >= maxPWM) {
        // At max, limit and change direction
        CometaValue = maxPWM;
        CometaDirection = DOWN;
      }
    } else {
      //if we aren't going up, we're going down
      CometaValue = CometaValue - fadeIncrement;
      if (CometaValue <= minPWM) {
        // At min, limit and change direction
        CometaValue = minPWM;
        CometaDirection = UP;
      }
    }
    // Only need to update when it changes
    analogWrite(Cometa, CometaValue);  
 
    // reset millis for the next iteration (fade timer only)
    CometaPrima = CometaOra;
  }
}




/*
----------------------------- CAPANNA -------------------------
*/


void fade_capanna(unsigned long CapannaOra,int CapannaFade) {
  // is it time to update yet?
  // if not, nothing happens
  if (CapannaOra - CapannaPrima >= CapannaFade) {
    // yup, it's time!
    if (CapannaDirection == UP) {
      CapannaValue = CapannaValue + fadeIncrement;  
      if (CapannaValue >= maxPWM) {
        // At max, limit and change direction
        CapannaValue = maxPWM;
        CapannaDirection = DOWN;
      }
    } else {
      //if we aren't going up, we're going down
      CapannaValue = CapannaValue - fadeIncrement;
      if (CapannaValue <= minPWM) {
        // At min, limit and change direction
        CapannaValue = minPWM;
        CapannaDirection = UP;
      }
    }
    // Only need to update when it changes
    analogWrite(Capanna, CapannaValue);  
 
    // reset millis for the next iteration (fade timer only)
    CapannaPrima = CapannaOra;
  }
}



void fire() {

  unsigned long fireTime = 0;

  if ( millis() - fireTime >= 0 )
  {
    analogWrite(Giallo, int(random(10,255)));
    analogWrite(Rosso, int(random(50,255)));
    fireTime = millis() + int(random(40,120));
  }


}

void loop() {

  
  // get the current time, for this time around loop
  // all millis() timer checks will use this time stamp
  unsigned long currentMillis = millis();
   
  fade_casa1(currentMillis,50);
  fade_casa2(currentMillis,50);
  fade_casa3(currentMillis,80);
  fade_casa4(currentMillis,80);

  fade_capanna(currentMillis,50);

  fade_cometa(currentMillis,50);
 
  fire(); 


}

e lo schema molto semplificato

tenendo conto che le luci delle case non sono dei led ma le vecchie lampadine tramite un ULN2803A più o meno come le istruzioni che mi sono state date da un "santo" del Forum

se serve altro dite pure
ciao
Emanuele

P.S. ho tolto un po' di codice perchè erano troppi caratteri per il post

Arduino DUE originale o clone? E, SE originale, di che anno? ... perché era un vecchio problema che nelle ultime versioni (originali) doveva essere stato risolto ... ::slight_smile:

Se ne parlava nel 2017 in QUESTO (e tanti altri) thread. Se con Google cerchi "arduino due reset problem" vedrai che trovi molte informazioni.

Guglielmo

gpb01:
Arduino DUE originale o clone? E, SE originale, di che anno? ... perché era un vecchio problema che nelle ultime versioni (originali) doveva essere stato risolto ... ::slight_smile:

Se ne parlava nel 2017 in QUESTO (e tanti altri) thread. Se con Google cerchi "arduino due reset problem" vedrai che trovi molte informazioni.

Guglielmo

Per prima cosa mi scuso tantissimo.. sono stato un emerito cretino e mi vergogno di essere un informatico. Ho cercato in rete ma solo in italiano, cosa che non faccio mai quotidianamente per il mio lavoro di tutti i giorni. Scusatemi ora comincio le ricerche partendo dal tuo link.
Poi per risponderti ti dico che è un Arduino Due originale e l'ho acquistato in una fiera di elettronica nel 2016 ma non saprei come fare ora per capire se è il suo anno,
grazie di tutto e scusa ancora per la domanda inutile, in questi giorni riesco a lavorare sul computer per questo solo la sera tardi e l'ho pagata con questa figuraccia
ciao
Emanuele

edi1973:
... è un Arduino Due originale e l'ho acquistato in una fiera di elettronica nel 2016 ma non saprei come fare ora per capire se è il suo anno ...

Nessun probema, figurati :smiley:

Se lo hai acquistato nel 2016 forse è una versione vecchia e forse soffre del problema poi risolto. Se segui il link che ti ho dato, credo si tratti di aggiungere una resistenza o un condensatore ed una esistenza ... vedi un po' :wink:

Guglielmo

gpb01:
Nessun probema, figurati :smiley:

Se lo hai acquistato nel 2016 forse è una versione vecchia e forse soffre del problema poi risolto. Se segui il link che ti ho dato, credo si tratti di aggiungere una resistenza o un condensatore ed una esistenza ... vedi un po' :wink:

Guglielmo

si grazie stavo dando un'occhiata :wink:
ciao
Emanuele