057 slingor loop

Snart kommer samma slingor med funktionen loop() som med while- och for-slingor.

Men först ett annat exempel som visar på hur funktionen loop() fungerar.

Flödesdiagram

Exempel på evighetsprogram

  // global variabel 
  // finns i setup och loop
  int i = 1;

  void setup() {
      Serial.begin(9600);
  }

  // funktionen loop anropas om och om igen av Arduinon
  void loop() {
      Serial.println(i);
      i = i + 1;
  }

Utskriften blir:

  1
  2
  3
  ...
  32 766
  32 767 (största möjliga int)
  -32 768 (hoppar till minsta)
  -32 767
  -32 766
  ...
  -1
  0
  1
  2
  ...

Anledningen till att -32 768 kommer efter 32 767 är att de som gjort programmeringsspråket C har bestämt att det ska vara så.

För att få stopp på utskriften kan man använda sig av en if-sats och bara skriva ut i som är mindre än 4.

Skriv ut 1, 2, 3

Observera att flödesschemat ser nästa lika dant ut som för while-slingan eller for-slingan. Nu leder dock pilen med nej tillbaka till frågan.

  // global variabel 
  // finns i setup och loop
  int i = 1;

  void setup() {
      Serial.begin(9600);
  }

  // skriv ut 1, 2, 3
  // funktionen loop anropas om och om igen av Arduinon
  void loop() {
      if (i < 4)
      {
          Serial.println(i);
          i = i + 1;
      }
  }

Jämför med koden för while.

Skriv ut 3, 5, 7

  // global variabel 
  // finns i setup och loop
  int i = 3;

  void setup() {
      Serial.begin(9600);
  }

  // skriv ut 3, 5, 7
  // funktionen loop anropas om och om igen av Arduinon
  void loop() {
      if (i < 8)
      {
          Serial.println(i);
          // öka med två
          i = i + 2;
      }
  }

Skriv ut 10, 7, 4, 1

  // global variabel 
  // finns i setup och loop
  int i = 10;

  void setup() {
      Serial.begin(9600);
  }

  // skriv ut 10, 7, 4, 1
  // funktionen loop anropas om och om igen av Arduinon
  void loop() {
      if (i > 0)
      {
          Serial.println(i);
          // minska med 3
          i = i - 3;
      }
  }