ciclo di una variabile

salve
ho provato a lavorare unpo sulle variabili e ho provato a fare un ciclo con una variabile che aumenta ed ad ogni amento accende o spegne un led

// associo le variabili ai pin
int a = 2;
int b = 3;
int c = 4;
int d = 5;
int e; // dichiaro lavariabile e



void setup() {// definisco ipin
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);

//pongo i pin a livello alto 
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
int e = 0;// pongo e = 0

  
}

void loop() {
  
  e == e++;// aumento e di 1
  
   if(e == 1){
  digitalWrite(a, LOW);
  
  }// se e è uguale a 1 pongo il pin A a livello basso
  else{digitalWrite (a,HIGH);// altrimenti livello alto
  }
  delay(100);// mi fermo 100
   if (e == 2){
  digitalWrite(b, LOW);}// se e è = 2 pongo b a livello basso
 
  else{
  digitalWrite(b, HIGH);}
  delay(100);
  if ( e == 3){
  digitalWrite(c, LOW);
  }

 else{ digitalWrite(c, HIGH);}
  delay(100);
  if(e == 4){
  digitalWrite(d, LOW); // se e = 4 pongo d a livello basso
  e = 0;}// pongo e a 0 
  else {digitalWrite(d, HIGH);}
  delay (100);
  
}

io volevo una sequenza cosi : si accende il primo led poi la variabile aumenta di uno e si accende il led 2 e cosi via fino al 4 gli atri led dovreebbero restare accesi , quando arriva al quarto led riongo la variabile ad zero e il ciclo ricomencia o meglio dovrebbe fare cosi ,
ma il risultato e 4 led che si accendono in sequenza

// associo le variabili ai pin
int a = 2;
int b = 3;
int c = 4;
int d = 5;
int e; // dichiaro lavariabile e



void setup() {// definisco ipin
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);

//pongo i pin a livello alto 
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
int e = 0;// pongo e = 0

  
}

void loop() {
  
  e == e++;// aumento e di 1
  
   if(e >= 2){
  digitalWrite(a, LOW);
  
  }// se e è uguale a 1 pongo il pin A a livello basso
  else{digitalWrite (a,HIGH);// altrimenti livello alto
  }
  delay(200);// mi fermo 100
   if (e >= 3){
  digitalWrite(b, LOW);}// se e è = 2 pongo b a livello basso
 
  else{
  digitalWrite(b, HIGH);}
  delay(200);
  if ( e >= 4){
  digitalWrite(c, LOW);
  }

 else{ digitalWrite(c, HIGH);}
  delay(200);
  if(e >= 5){
  digitalWrite(d, LOW);
  delay(200);
   e = 0;// se e = 4 pongo d a livello basso
 }
 
  // pongo e a 0 
  else {digitalWrite(d, HIGH);}
  delay (200);
  
}

sicuramente ci sara un modo piu , come dire snello per farlo , pero adesso funziona si accendono tutti e 4 in sequenza e solamente quando sono accesi tutti e 4 si spengono , non tutti e 4 insieme ma si spengono :slight_smile: lo spengimento non è simultaneo per via del delay che influisce sia sull accensione che sullo spengimento?
grazie

if(e = 0){
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    }

ho provato ad aggiungene in fondo questa pezzetto dicodice,
nell ultima riga e veniva posta a zero e avevo tutti i 4 led accesi ,dopo il delay da200
legge questo if e DOVREBBE spegnere tutti i led,il risultato pero nonèquesto

il ciclo dell accensionedei led non parte rimangono tutti spenti :frowning:
qualche consiglio ?
grazie

if(e == 10){ 
    
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
  e == 0;
   delay(500);
    }

ho aggiunto all inizio queste righe ed adesso funziona :slight_smile:
aumenta e fino a 10 poi spegne ed azzera e :slight_smile:
nonho capito il perche , se è all inizio funziona e alla del codice no
:roll_eyes: :roll_eyes: :roll_eyes: :roll_eyes:

ciao...in primis l'assegnazione "=" è diversa dal confronto "=="...guarda i tui due ultimi post e dimmi cosa vedi di diverso...poi il codice fa esattamente quello che gli dici di fare nell'ordine esatto in cui glielo dici...quindi la stessa istruzione messa all'inizio o alla fine può dare risultati diversi e/o opposti.

in fine...usa millis() al posto del delay()...di seguito un esempio che forse fa quello che cerchi di fare tu...ci trovi un po' di "cose": array, millis(), #define, etc...a te cercare e studiare cosa sono e come usarli.

#define RITARDO 200

byte led[] = {2, 3, 4, 5};
unsigned long myMillis;
byte sequenza = 0;

void setup() {
  for (byte i = 0; i < sizeof(led); i++) {
    pinMode(led[i], OUTPUT);
    digitalWrite(led[i], HIGH);
  }
  myMillis = millis();
}

void loop() {
  if (millis() - myMillis > RITARDO && sequenza < sizeof(led)) {
    digitalWrite(led[sequenza], LOW);
    sequenza++;
    myMillis = millis();
  }
  if (millis() - myMillis > RITARDO && sequenza >= sizeof(led)) {
    for (byte i = 0; i < sizeof(led); i++) {
      digitalWrite(led[i], HIGH);
    }
    sequenza = 0;
    myMillis = millis();
  }
}

grazie orso ,
scusa se ti stresso e scusa l ignoranza , potresti spiegare le righe del codice che mi hai consigliato?
per il discorso della variabile = / == , ho sbagliato a scrivere qui sul forum.

per il discorso della variabile = / == , ho sbagliato a scrivere qui sul forum.

Oltre quanto detto da @ORSO, ci sono altri errori evidenti, purtroppo non ho analizzato il codice nel dettaglio e non posso sapere se determinano il comportamento non desiderato che hai descritto.

Riguardo agli errori evidenti, (nota che se il codice fosse stato scritto da un programmatore esperto gli stessi errori potrebbero non essere giudicati tali).

Il titolo del post è quasi corretto, per esserlo andrebbe modificato in: Ciclo di vita di una variabile.
In verità si tratta di ambito di visibilità (o scope nella terminologia accademica).

Nella funzione setup hai scritto:

int e = 0;// pongo e = 0

Con questo codice hai creato una variabile locale, il cui ambito di visibilità (scope) è limitato al blocco di codice collegato alla funzione setup. Un blocco di codice si crea delimitando una porzione di codice con i caratteri { questo è un blocco di codice }. Un blocco di codice può esistere all'interno di una funzione sia esso collegato o meno a qualcosa (collegato ad un comando, ad un identificatore, ecc).

Questa variabile e non la usi, se la usassi dentro la funzione setup e ti volessi riferire alla variabile globale con stesso nome, saresti impossibilitato a farlo a causa dello oscuramente che le variabili locali arrecano verso quelle globali con identico nome.

PS: non credo sia questa la soluzione al problema.

L'altro errore e più uno spreco di risorse (RAM) che essendo di circa 2048 byte rappresentano una risorsa limitata e quindi preziosa. Come vedi @ORSO ha impiegato una variabile di tipo byte, da ciò io deduco che la variabile sequenza non assumerà mai valori superiori a 255 (con 8 bit questo è il massimo valore decimale rappresentabile)

byte sequenza = 0;

Mentre tu hai usato il tipo int per le variabili globali a, b, c, d, e, da ciò io dovrei dedurre che queste variabili durante l'esecuzione potranno assumere valori superiori a 255. Nel caso specifico è un errore che tutti gli utenti alle prime armi commettono e quindi non faccio deduzione errate perché è chiaro l'uso che si vuole fare di quelle variabili, ma per altre variabili il cui uso non è così evidente, porta a fare deduzione e analisi errate, sia quando il codice l'ho scritto io che quando lo mostro ad altri.

Permettimi di darti un consiglio (si capisce che non hai studiato il linguaggio C/C++ e che sei alle prime armi o anche letto la tua presentazione); Arduino è fantastico, comodo, facile da apprendere, semplificato ecc, tuttavia non è lo strumento ideale per prendere confidenza con il linguaggio C/C++.

Abbinando ad Arduino, un buon libro sul C++ (o anche C) e una ambiente di sviluppo integrato (IDE) che ti permetta di scrivere codice che poi viene eseguito sul tuo pc (senza quindi dovere scrivere il firmware nella FLASH di arduino) ti permette di prendere confidenza con il linguaggio per quanto riguarda le basi, testarle sul tuo pc e se funzionano trasferirle su arduino con i dovuti adattamenti.

grazie orso ,
scusa se ti stresso e scusa l ignoranza , potresti spiegare le righe del codice che mi hai consigliato?

Temo siano un tantino avanzate per affrontarle adesso, comunque sicuramente @ORSO ti potrà spiegare, ma faticherai
a comprendere tutto al 100%.

Ciao.

albepancio:
ho provato a lavorare unpo sulle variabili e ho provato a fare un ciclo con una variabile che aumenta

Oltre ai validi consigli che già ti hanno dato, provo ad aggiungere qualche dettaglio anche "stilistico" per tentare di aiutarti a capire meglio alcune cose (che dovrai comunque rivedere studiando il linguaggio C/C++ su una delle tante risorse che si trovano anche in rete) e migliorare rapidamente. Per ora tralascia i discorsi più complicati come gestire i led con millis() invece diel delay(), credo sia prematuro per te.

Primo, evita nomi di variabili non autoesplicative come "a" "b" "e". Per rendere più leggibile e comprensibile il codice dai un nome, seppur breve, che rifletta lo scopo della variabile. in genere le variabili con singola lettera le si usa per indici e valori di cicli (es. "for(int i=0; i<10; i++)").
Ad esempio se la variabile "e" nel tuo caso è un contatore, chiamalo "conta", o "cicli" o qualcosa del genere. Se il nome deve essere composto da più parole, imposta la prima lettera in maiuscolo per questioni di leggibilità ad esempio "TemperaturaAttuale" o abbreviando un poco "TempAttuale".

Secondo, per cercare di contenere la quantità di memoria del codice, viste le limitazioni di queste piccole MCU, per indicare i pin da utilizzare meglio non usare delle variabili se sono valori fissi e che quindi non cambiano durante l'esecuzione del codice, ma al loro posto usa delle espressioni costanti con "#define", che non occupano inutilmente spazio in memoria. Anche a queste assegnare un nome se possibile significativo e, per convenzione, tutto maiuscolo. Questo criterio applicalo a tutti i valori e simboli che non devono variare. Ad esempio invece di:

int a = 2;
int b = 3;
int c = 4;
int d = 5;

metti:

#define LED_ROSSO 2
#define LED_GIALLO 3
#define LED_VERDE 4
#define LED_BLU 5

Terzo, correggi l'indentazione del codice. Non è una cosa "estetica" ma sarà estremamente utile quando scriverai codici più complessi e lunghi per renderlo più leggibile. Puoi farlo fare all'IDE automaticamente, apri lo sketch e premi i tasti Ctrl-T. Quando posti qui del codice, fallo sempre con copia/incolla dall'IDE o dal file .INO, non digitarlo a mano.

Quarto, alcune note "sfuse". Hai scritto (ignoro il refuso dell'"=="):

e = e++;// aumento e di 1

L'istruzione "e++" già da sola incrementa la variabile di 1, quindi non serve riassegnarlo, basta scrivere:

e++;

Poi se hai una variabile che sai possa valere solo 1, 2, 3 o 4 invece di fare tanti if() puoi usare la più compatta e leggibile switch():

  e++;
  switch (e) {
    case 1:
      ..codice
      break;
    case 2:
      ..codice
      break;
    case 3:
      ..codice
      break;
    default: // Qui entra se il valore non è uno dei precedenti
      ..codice
      break;
}

Ricorda che puoi farlo solo per variabili "int" o "char", per le altre dovrai usare le if(). E ricorda che alla fine di ogni blocco devi mettere un "break;" che fa uscire dallo switch.

grazie dei consigli.
sotto l albero di natale :slight_smile: ho trovato un libro manuale di arduino,
dove cè unapiccola parte dove spiega le basi terra terra del linguaggio c++ , struttura di un codice , variabili ecc.
poi sipega ( in proporzione agli utenti a cui e destinato questo libro)le funzioni basilari di arduino ,
ho dato unalettura veloce ed adesso sto entrando nel particolari, e come piu omeno su tutto aplico la regola , prima vai gattoni , poi cammini e dopo corri ,
accendere un led con un bottone ( esempio presente in ide) non bisogna ragionarci tanto ,
adesso sto cercando di capire comesfruttare le variabili, la prima istruzione che vienediscussa e la if/else
quindi sto cercando di scrivere cosici con questa funzione e mi immaginavo gia che ci sarebbero stati tanti modi ( piu snelli) per farlo :slight_smile:
detto questo se ho capito bene per risparmiare spazio mi conviene usare l istruzione #define per assegnare un nome ad unnpin es:#define LEDBianco 5.
e se voglio porre e = 0 mi convienemetterlonel loop , giusto?
grazie del tempo che mi dedicate

ciao...se vuoi posso spigarti riga per riga cosa fa il codice che ti ho postato...la mia intenzione era però solleticare la curiosità e farti vedere che c'è un mondo "dietro"...detto questo...se tu nel loop() dichiari una variabile "int e = 0"...questa ad ogni ciclo loop() viene creata...gli viene assegnato il valore "0" e distrutta alla fine del loop()...quindi se ti serve per tenere conto di qualche cosa non va bene...almeno che questo conteggio non abbia senso farlo partendo da "0" ad ogni ciclo loop().
se ti serve una variabile che mantenga il suo conteggio o la dichiari esternamente alle funzioni (setup(), loop() sono funzioni)...oppure la crei localmente (all'interno delle funzioni) ma anteponendo il qualificatore const...e quindi "const int e =0;"...questo qualificatore ti lascia creare la variabile con visibilità globale ma non viene distrutta alla fine della funzione e mantiene il suo ultimo valore.

ORSO2001:
oppure la crei localmente (all'interno delle funzioni) ma anteponendo il qualificatore const...e quindi "const int e =0;"

Intendevi dire "static", non "const"... :wink:

static int e = 0;

rende "statica" la variabile che quindi sarà sempre visibile localmente alla funzione dove la si definisce, ma non viene distrutta ad ogni invocazione della funzione.

albepancio:
detto questo se ho capito bene per risparmiare spazio mi conviene usare l istruzione #define per assegnare un nome ad unnpin es:#define LEDBianco 5.

Si, non è obbligatorio ma è consigliato. Sceglierai il nome che per te è più significativo del suo scopo. Se hai solo 4 led senza un colore o significato particolare puoi anche chiamarle LED1 LED2 LED3 e LED4, ma almeno usi dei simboli costanti che non richiedono spazio in memoria (o, meglio, meno di una variabile che, per definizione, è... variabile quindi se un valore è fisso per tutta la vita del codice meglio usare simboli costanti).

e se voglio porre e = 0 mi convienemetterlonel loop , giusto?

Sicuramente non "int e=0;" perché come ti hanno detto giustamente, crei una nuova variabile "e" interna al loop, mentre tu la definizione ("int e;") l'hai fuori da qualsiasi funzione quindi quella è "globale" e non devi ridefinirla.
Quidni se dentro al loop() vuoi portarla a zero (o qualsiasi altro valore) ti basta fare una normale assegnazione:

e = 0;

Intendevi dire "static", non "const"... :wink:

eh eh ...certe volte la mano è più veloce della mente...si intendevo static

eh eh ...certe volte la mano è più veloce della mente...si intendevo static

Avevo letto il tuo intervento questa mattina, ma da cellulare non mi loggo e ho rimandato a questa sera con l'intento di mandarti un PM, chiedendoti di rivedere la questione const e static, ormai ti eri esposto.

Vorrei evitare di confondere un utente che essendo alle prime armi non distingue tra variabili globali e locali.

Comunque usando il qualificatore const si chiede esplicitamente al compilatore di effettuare un controllare a tempo di compilazione. Il controllo consiste nel verificare la presenza o meno di codice che tenta di modificare il valore di quella che è ormai una costante, se la verifica è positiva il compilatore si ferma e segnala la cosa come errore, in quanto non è possibile modificare il valore di un identificatore constante. La costante definita all'interno di una funzione ha ambito di visibilità locale ed effettivamente conserva il proprio valore, in quanto è impossibile modificarlo (inoltre non viene distrutta, in quanto non è presente nello stack).

PS: quest'ultima parte circa lo stack non è rivolta a te @albepancio, per il momento.

Ciao.

// associo le variabili ai pin
#define ledgiallo1  2
#define ledverde1  3
#define ledgiallo2  4
#define ledverde2  5
int e;



void setup() {// definisco ipin

pinMode(ledgiallo1, OUTPUT);
pinMode(ledverde1, OUTPUT);
pinMode(ledverde2, OUTPUT);
pinMode(ledgiallo2, OUTPUT);

//pongo i pin a livello alto 
digitalWrite(ledgiallo1, HIGH);
digitalWrite(ledverde1, HIGH);
digitalWrite(ledgiallo2, HIGH);
digitalWrite(ledverde2, HIGH);
e = 0;// pongo e = 0

  
}

void loop() {
e++;
 
  
   if(e >= 2){
  digitalWrite(ledverde1, LOW);
   delay(50);
  }// se e è uguale a 1 pongo il pin A a livello basso
  else{digitalWrite (ledverde1,HIGH);// altrimenti livello alto
  }
 
   if (e >= 3){
  digitalWrite(ledgiallo1, LOW);
   delay(50);}// se e è = 2 pongo b a livello basso

  else{
  digitalWrite(ledgiallo1, HIGH);}

  if ( e >= 4){
  digitalWrite(ledverde2, LOW);
   delay(50);
  }
 
 else{ digitalWrite(ledverde2, HIGH);}
 
  if(e >= 5){
  digitalWrite(ledgiallo2, LOW);
  
  
  // se e = 4 pongo d a livello basso
 }
 
 
  else {digitalWrite(ledgiallo2, HIGH);}
  
  if ( e > 10){
     
   ;
  digitalWrite(ledgiallo2, HIGH);
   
 
 
   
  digitalWrite(ledgiallo1, HIGH);
 
  digitalWrite(ledverde1, HIGH);
 
 
  digitalWrite(ledverde2, HIGH);
  
  e = 0 ;
  
  
 
  }
    
    
  
}

cosi e piu diciamo ordinato?
oggi provo a otenetre lo stesso risultato ma con un ciclo for ,

// associo le variabili ai pin
#define ledgiallo1  2
#define ledverde1  3
#define ledgiallo2  4
#define ledverde2  5
int e;



void setup() {// definisco ipin

pinMode(ledgiallo1, OUTPUT);
pinMode(ledverde1, OUTPUT);
pinMode(ledverde2, OUTPUT);
pinMode(ledgiallo2, OUTPUT);

//pongo i pin a livello alto 
digitalWrite(ledgiallo1, HIGH);
digitalWrite(ledverde1, HIGH);
digitalWrite(ledgiallo2, HIGH);
digitalWrite(ledverde2, HIGH);
e = 0;// pongo e = 0

  
}

void loop() {
e++;
 delay(500);//tempo di sosta dell intero codice 
  switch (e){
    case 1:
 
  digitalWrite(ledverde1, LOW);
   
  digitalWrite(ledgiallo1, HIGH);
   
  digitalWrite(ledverde2, HIGH);
  
  digitalWrite(ledgiallo2, HIGH);
break;
  
  case 2:
   digitalWrite(ledverde1, HIGH);
   
  digitalWrite(ledgiallo1, LOW);
   
  digitalWrite(ledverde2, HIGH);
  
  digitalWrite(ledgiallo2, HIGH);
break;
  
  case 3:
   digitalWrite(ledverde1, HIGH);
   
  digitalWrite(ledgiallo1, HIGH);
   
  digitalWrite(ledverde2, LOW);
  
  digitalWrite(ledgiallo2, HIGH);
break;
  case 4:
    
 
   digitalWrite(ledverde1, HIGH);
   
  digitalWrite(ledgiallo1, HIGH);
   
  digitalWrite(ledverde2, HIGH);
  
  digitalWrite(ledgiallo2, LOW);

    break;
    case 5:
   

   digitalWrite(ledverde1, HIGH);
   
  digitalWrite(ledgiallo1, HIGH);
   
  digitalWrite(ledverde2, HIGH);
  
  digitalWrite(ledgiallo2, HIGH);
  
  break;
  default:
   e = 0 ;
    break;
  
  }
}

ho usato la funzione sitch / case ,
con questo codice ottengo la sequenza di accensione dei led , per avere altre funzioni devo per forza ridare dei digitalWrite? o potrei lavorare sulle variabile?
p.s. ho cercato in rete e leggendo ne vari forum e i pareri degli acquirenti ho selezionato questi due libri che a detta dei lettori sono libri semlici con esempi , insomma dedicati a chi deve iniziare da zero
e sono manuale di c++ dell hoeply e C e C++. Le chiavi della programmazione
che ne dite?

void setup() {// definisco ipin
Serial.begin(9600);

pinMode(ledgiallo1, OUTPUT);
pinMode(ledverde1, OUTPUT);
pinMode(ledverde2, OUTPUT);
pinMode(ledgiallo2, OUTPUT);

//pongo i pin a livello alto 
digitalWrite(ledgiallo1, HIGH);
digitalWrite(ledverde1, HIGH);
digitalWrite(ledgiallo2, HIGH);
digitalWrite(ledverde2, HIGH);
e = 0;// pongo e = 0

  
}

void loop() {
  
  Serial.println(e)

ho modificato il codice agginugendo un Seria.begin(9600)
nel setup e un Serialprintln(e) nel loop .
funziona perche aprendo il monitor vedo stamparae i vari valori che assume la variabile e da 0 a 9 per poi ritornare a zero ,
la mia domanda e la solita va bene scritto cosi o cè unmodo migliore?
graziew

Se ti funziona, per ora va bene così. Resta il fatto che per le costanti (le #define) la convenzione vuole che siano tutte in maiuscolo, per consentire di identificarle nel codice come tali e non confonderle con le variabili.
Per il resto, eventuali migliorie "stilistiche" devono venirti dall'esperienza.

#define RITARDO 200 // questononlohocapito:(

byte led[] = {2, 3, 4, 5};//arrayper impostare i pin di uscita 
unsigned long myMillis;// my millss  potrei nominarla miotempo giusto????
byte sequenza = 0;// imposti una variabile e la poni a zero

void setup() {
  for (byte i = 0; i < sizeof(led); i++) {/* qui dichiari una variabile i e la poni a zero poi  poni i < di sizeof(led) 
    ( usi sizeof perche nelle parentesi [] non hai inserito il numero dei casetti ) poi aumenti di 1 i */
    pinMode(led[i], OUTPUT);qui imposti il pin come out il numero ti viene fornito dalla funzione for scritta sopra  giusto?
    digitalWrite(led[i], HIGH);stesso pin lo poni ad HIGH 
  }
  myMillis = millis();// potrebbe essere scritta cosi? miotempo = millis(); ?????
}

void loop() {
  if (millis() - myMillis > RITARDO && sequenza < sizeof(led)) /* qui metti se millis - miotempo > di ritardo cioe 200 accendi il led 
  la parte  && sequenza < sizeof(led) non hi capito*/ {
    digitalWrite(led[sequenza], LOW);
    sequenza++;
    myMillis = millis();
  }
  if (millis() - myMillis > RITARDO && sequenza >= sizeof(led)) /*non so se ho capito bene ma se il tempo trascorso ha superato 200 e la sequenza vale piu
  di 5 */{
    for (byte i = 0; i < sizeof(led); i++) {//???????????????????????
      digitalWrite(led[i], HIGH);
    }
    sequenza = 0;
    myMillis = millis();
  }
}

questo e il codice che mi ha consigliato orso accanto ad ogni riga ho scritto quello che per me fanno quei comandi.
alcune righe non sono riuscito a capire il funzionamento
grazie
p.s. ho inserito un serial.println cercando di leggere i valori che assumono le variabili
la variabile sequenza prende il valore da 0 a 4 ( assume 5 valori perche i cassetti nell array sono 4 piu 1 giusto?), ma se provo a stampare i mi da sempre 0 perche?
grazie per il tempo che mi dedicate :slight_smile:

ciao...#define è una direttiva che dai al compilatore (quello che traduce il tuo codice in codice che l'arduino può eseguire)...come ti diceva DOCDOC le costanti abbinate al #define, per migliorarela leggibilità del programma, di solito vanno scritte tutto in MAIUSCOLO; il compilatore non farà altro che sostituire, nel senso letterale del termine, tutte le parole unguali al #define con il valore indicato...cioè se dichiaro #define RITARDO 200 il compilatore cercherà la "parola" RITARDO e la sostituirà con 200. Questo valore non può essere modificato durante l'esecuzione del programma.
myMillis è il nome di una variabile...potrebbe essere miotempo come ciccioPasticcio...altro suggerimento per la leggibilità...se una variabile è composta da più parole...tranne la prima...le altre si scriveranno con la prima lettera in maiuscolo...oppure separati da un "_" mio_tempo.

sizeof(x) è una funzione presente di base e ritorna il numero dei byte che compongono x;cioè se creassimo una variabile int x e facessimo sizeof(x)...avremmo come risultato 2...infatti int è composta da 2 byte...se creassimo un array come byte x[5]; il sizeof(x) ci ritornerebbe 5 perchè quell'array è lunga 5 bytes...ed infine un array int x[5]; ci ritornerebbe 10 in quanto 5 int sono 10 byte.

si nel for puoi creare una variabile inizializzarla al valore che vuoi (sempre riferito al tipo) inserire una o più condizioni ed infine incrementare o decrementare...più avanti scoprirai che si può fare anche altro come verifiche.

i due if() che usa verificano il tempo trascorso facendo un confronto tra millis() che il tempo attuale dall'accensione dell'arduino ed un suo valore precedentemente salvato in una variabile...se è trascorso...ma anche se la variabile sequenza è entrpo certi limiti faccio una cosa altrimenti ne faccio un'altra...

spero sia chiaro