Løkker

    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økke

    for-løkken består av 3 deler:

      -startverdi
      -logisk test (sann eller usann, 1 eller 0, HØY eller LAV)
      -oppdatering av teller

    Et eksempel:

    for(teller=0;teller<20;teller++){
      //Koden som skal utføres
      Serial.println(teller);
      delay(200);
    }

    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:

    for ( ; ; ) { /*koden her */ }

    while-løkke

    while-løkken har tilsynelatende en enklere oppbygging, og består bare av en logisk test:

    teller=0;

    while(teller<20){
      //Koden som skal utføres
      Serial.println(teller);
      teller++;
      delay(200);
    }

    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: 

    while(1){ /*kode her */ }

    1 vil naturlig nok aldri bli noe annet enn «sant», så koden vil kjøre for evig.

     

    do-while-løkke

    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:

    teller=0;

    do {
      //Koden som skal utføres
      Serial.println(teller);
      delay(200);
      teller++;
    } while(teller<20);

    Også her kan vi lage en uendelig loop : 

    do {/*kode her */ } while(1);

    Som før vil 1 naturlig nok aldri bli noe annet enn «sant», så koden vil kjøre for evig.

     

    Oppgaver:

    1: 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 ) 

    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)

     

     

    Løsningsforslag

    Oppgave 1

    /* 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

    /*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);
    }



     

    Neste artikkel -->

    Søk på siden

    © Lilleholt.no 2020
    Free Joomla! templates by Engine Templates