Chiarimenti ciclo do while

Salve e da poco che mi sto a vicinare a studiare la programmazione arduino, vorrei dei chiarimenti sui ciclo ,
Do while , sto facendo delle prove per fare pratica ma mi trovo in una situazione che non riesco a capire. Ecco il codice:

 int cost=0;
int pinLed=9;

void setup() {
 
  pinMode(pinLed, OUTPUT);
}


void loop() {
  do {

 digitalWrite(pinLed, HIGH); 
  delay(1000);                       
  digitalWrite(pinLed, LOW);  
  delay(1000);  
  cost++;                  
} while  (cost <10);{
}
{

Perché dopo che ha ripetuto 10 il clico non esce?
Mi ripete ancora il lampeggiare il led.

Perchè sei in un loop
e quindi rincomincia da capo

Cioè quindi per uscire dal ciclo "do while " come si deve fare?pensavo che la variabile cost una volta arrivata uguale 10 non ripeteva più do ma proseguiva con esecuzione del codice delle graffe dopo il while

Mi sono espresso male
Fino a che la variabile non è 10 il do while esegue il ciclo
Quando arriva a 10, esce dal ciclo e prosegue, solo che tu dopo non fai altro e siccome è in un ciclo di loop, continua a lampeggiare perche’ il do while è comunque soddisfatto
Metti qualcosa dopo tutto ad esempio un while(1) che blocca tutto e serve solo a farti capire quando è terminato

  cost++;                  
} while  (cost <10);{
}
while(1); // Blocca tutto
}

non ho voglia di scrivere, leggi qua

Grazie e un po più chiara la cosa ,dopo finito di lavorare darò un occhiata al link.

cost++;                  
} while  (cost <10);{
}
while(digitalWrite(pinLed2,HIGH)); // esce dal ciclo accende led2
}

In questo caso finisce ciclo a ccende led2 giusto.
Grazie mille

Questa è la differenza fra il

while (condizione) {faiqualcosa}

ed il

do {faiqualcosa} while (condizione)

:
con il primo metodo, il faiqualcosa viene eseguito solo se la condizione è vera
con il secondo metodo, il faiqualcosa viene comunque eseguito almeno una volta, anche se la condizione è falsa
Quindi essendo nel loop viene ripetutamente eseguito indipendentemente dalla condizione

Se vuoi farlo eseguire solo se la condizione è vera allora usa il primo metodo

Grazie in teoria lo avevo capito il funzionamento,ma quando lo mettevo in atto non faceva il funzionamento che pensavo , ma come mi ha spiegato brunello era un errore che facevo io ,cioè non bloccavo uscita , e quindi il loop continuava a fare il suo giro

Esatto.
Se vuoi ottenere l'effetto senza bloccare il loop, basta usare il primo metodo, con while(condizione) {istruzioni}

Salve rieccomi,facevo ancora delle prove con i cicli,prima di andare avanti voglio capirli bene.

 while  , sto facendo delle prove per fare pratica ma mi trovo in una situazione che non riesco a capire. Ecco il codice:
Code: [Select]

 int cost=0;
int pinLed=9;

void setup() {
 
  pinMode(pinLed, OUTPUT);
}


void loop() {
  do {

 digitalWrite(pinLed, HIGH); 
  delay(1000);                       
  digitalWrite(pinLed, LOW);  
  delay(1000);  
  cost++;                  
} while  (cost <10);
 cost=20;
if (cost==20){
digitalWrite  ( pinLed,HIGH);
}
}

dopo arrivato 10 continua a lampeggiare non va finire nel if ,come mai scusate che voglio capire bene prima di proseguire.
Grazie mille a tutti

Secondo me ti conviene imparare a usare un pò di debug con il monitor seriale.

  1. Nel setup() abilita la seriale, aggiungi
    delay(1000);
    Serial.Begin(9600);
  2. nel programma in punti strategici puoi inserire Serial.println(“messaggio”);
    Ad esempio nel tuo ciclo puoi inserire
    Serial.print(“count=”); Serial.println(count);
  3. poi nel if che hai aggiunto metti anche Serial.println(“count uguale a 20”);
  4. poi upload su Arduino e da dentro l’IDE apri il monitor seriale e vedrai quei messaggi. Dovrebbe farti capire cosa fa Arduino.

Ricorda quello abbiamo detto prima: il do ... while viene comunque eseguito una volta, anche se la condizione è falsa, infatti la condizione viene vista ALLA FINE del do ... while.
Quindi il tuo programma entra nel do ... while la prima volta, esegue 10 lampeggi, esce dal do ... while ed entra nell'if, quindi accende il LED. A questo punto il loop ricomincia, il do ... while, come abbiamo detto, viene eseguito UNA VOLTA quindi il LED dovrebbe accendersi ma è già acceso quindi rimane acceso, poi si spegne, quindi va nell'if e lo accende. A questo punto il loop ricomincia e....