Løkker / Loops
I C/C++ er det 3 forskjellige løkkestrukturer: for-løkker, while-løkker og do-while-løkker.
Den mest brukte er for-løkker, så vi starter der:
for-løkken består av 3 deler: -startverdi Et eksempel: Først settes teller-variabelen til 0. Deretter tas den logiske testen: er teller mindre enn 20? Er den det, utføres koden i kodeblokken (innenfor { og } ). Til slutt oppdateres telleren (teller++ betyr at teller økes med 1 i dette tilfellet) og den logiske testen gjøres på nytt. For å lage en uendelig loop kan vi skrive: while-løkken har tilsynelatende en enklere oppbygging, og består bare av en logisk test: Selv om strukturen her er enklere, er det kanskje mer å passe på. Før loopen starter, må en sette start-verdien. Testen gjøres deretter, og hvis testen er «sann» kjøres koden. Hvis løkken skal fungere må telleren oppdateres inne i løkken. Deretter kjøres testen på nytt. Den logiske testen må nødvendigvis ikke bestå av en test av en tellevariabel; den kan like gjerne være en test av om en knapp tilkoblet mikrokontrolleren er trykt inn, som vi kommer tilbake til senere. For å lage en uendelig loop med while skriver vi: 1 vil naturlig nok aldri bli noe annet enn «sant», så koden vil kjøre for evig. do-while-løkken er veldig lik while-løkken, men det er en viktig forskjell: den logiske testen gjøres etter kodeblokken, og dermed vil koden uansett kjøres minst en gang: Også her kan vi lage en uendelig loop : Som før vil 1 naturlig nok aldri bli noe annet enn «sant», så koden vil kjøre for evig. 1: Få Arduino først til å regne fra 50 til 100, og så ned fra 150 til 100. Skriv tallene til serieporten. (Tips: teller-- betyr teller=teller-1 ) 2: Skriv et program med en teller-variabel som: -Bruker en for-loop til å telle fra 5 til 55, og viser verdiene på serieporten med ca. 5 verdier i sekundet. -Bruker en while-loop med samme teller-variabel og teller videre til 250. Vis 10 verdier i sekundet. -Bruker en do-while-loop til å telle ned igjen til 5, og viser 20 verdier pr sekund -Starter på nytt (uendelig loop) Oppgave 1 Oppgave 2for-løkke
-logisk test (sann eller usann, 1 eller 0, HØY eller LAV)
-oppdatering av tellerfor(teller=0;teller<20;teller++){
//Koden som skal utføres
Serial.println(teller);
delay(200);
}for ( ; ; ) { /*koden her */ }
while-løkke
teller=0;
while(teller<20){
//Koden som skal utføres
Serial.println(teller);
teller++;
delay(200);
}while(1){ /*kode her */ }
do-while-løkke
teller=0;
do {
//Koden som skal utføres
Serial.println(teller);
delay(200);
teller++;
} while(teller<20);do {/*kode her */ } while(1);
Oppgaver:
Løsningsforslag
/* Få Arduino først til å regne fra 50 til 100, og så ned fra 150 til 100.
* Skriv tallene til seriporten. (Tips: teller-- betyr teller=teller-1 )
*/
void setup() {
// put your setup code here, to run once:
Serial.begin(9600); //Setter opp serieporten til å kommunisere på 9600 baud
}
void loop() {
int teller; // Definerer en tellevariabel
for (teller=50;teller<=100;teller++){ // Teller fra 50 til og med 100
Serial.println(teller); //Skriver telleren ut på serieporten
}
delay(1000); //Pause 1 sekund
for (teller=150;teller>=100;teller--){ // Teller fra 150 ned til og med 100
Serial.println(teller); //Skriver telleren ut på serieporten
}
delay(1000); //Pause 1 sekund
}/*Oppgave 2: Skriv et program med en teller-variabel som:
-Bruker en for-loop til å telle fra 5 til 55, og viser verdiene på serieporten med ca. 5 verdier i sekundet.
-Bruker en while-loop med samme teller-variabel og teller videre til 250. Vis 10 verdier i sekundet.
-Bruker en do-while-loop til å telle ned igjen til 5, og viser 20 verdier pr sekund
-Starter på nytt (uendelig loop)
*/
void setup() {
Serial.begin(115200); //Setter hastigheten på serieporten til 115200 baud
}
void loop() {
int teller; // Lager en tellevariabel som brukes i hele programmet
for (teller=5;teller<=55;teller++){
Serial.println(teller); //Skriver ut telleren til serieporten
delay(200); // Pause på 200 millisekunder gir ca 5 verdier i sekundet
}
while(teller<250){
teller++; // Øker telleren med 1
Serial.println(teller); //Skriver ut telleren til serieporten
delay(100); // Pause på 100 millisekunder gir ca 10 verdier i sekundet
}
do {
teller--; //Reduserer telleren med 1
Serial.println(teller);
delay(50); // Pause på 50 millisekunder gir ca 20 verdier i sekundet
} while(teller>5);
}
- Detaljer
- Skrevet av: Per Sigbjørn
- Kategori: Løkker
- Treff: 3117