022 Exempel kasta tärning

Mål

Tryck på knappen för att kasta tärning.

Tärningskastet animeras. Sedan visas resultatet.

Kod

Kod på GitHub

Använda funktioner

  pinMode()   //bara för OUTPUT, default är INPUT
  digitalRead()
  delay()
  random()
  digitalWrite()

Definiera egna funktioner

Kode för tre funktioner visas nedan.

Funktion som bara gör

Nyckelordet void berättar att funktionen gör något utan att lämna ett svar tillbaka.

Funktionen heter animateRoll.

  void animateRoll()  
  {
      int numberOfPreDisplay = random(7, 12);
      for (int i = 0; i < numberOfPreDisplay; i = i + 1)
      {
          int numberOfDots = rollDie();
          showDots(numberOfDots);
          delay(150);
          hideAllDots();
          delay(150);
      }
  }

Funktion som lämnar tillbaka ett svar

Nyckelordet int berättar att funktionen lämnar ett svar. Svaret har datatypen int som är beteckningen för ett heltal.

Funktionen heter rollDie().

Nyckelordet return följs av det svara som funktionen lämnar tillbaka.

  int rollDie()
  {
      //1, 2, eller 3
      return random(1, 4);    
  }

Anrop av en funktion som måste få extra information

Nyckelordet void betyder att funktionen inte lämnar tillbaka ett svar utan bara gör något.

Funktionen heter showDots().

Nyckelordet int berättar att variabeln numberOfDots kan innehålla ett heltal. Vid anropet

  showDots(2);

får variabeln numberOfDots värdet 2.

  void showDots(int numberOfDots)
  {
      if (numberOfDots == 1)
      {
          digitalWrite(dotPins[0], HIGH);
          digitalWrite(dotPins[1], LOW);
          digitalWrite(dotPins[2], LOW);
      }
      else if (numberOfDots == 2)
      {
          digitalWrite(dotPins[0], LOW);
          digitalWrite(dotPins[1], HIGH);
          digitalWrite(dotPins[2], HIGH);
      }   
      else if (numberOfDots == 3)
      {
          digitalWrite(dotPins[0], HIGH);
          digitalWrite(dotPins[1], HIGH);
          digitalWrite(dotPins[2], HIGH);
      }
  }

Anrop av egna funktioner

Anrop av egna funktioner och redan färdiga funktioner sker på samma vis.

  void loop()
  {
      if (digitalRead(13) == HIGH)
      {
          // Anrop av animateRoll()
          animateRoll();  

          // Anrop av rollDie(), som ger ett heltal tillbaka.
          // Svaret sparas i variabeln numberOfDots.
          int numberOfDots = rollDie(); 

          // Anrop av showDots() som tar extra information.
          // showDots(2); // för att visa 2 prickar på tärningen
          showDots(numberOfDots);

          delay(3000);    
      }
  }

Koppling