Šviesoforas. III dalis. Ciklas

   Pastoviai daryti tą patį veiksmą būtų nuobodu, tam ir sugalvojo žmonės robotus – atlikti pastovų rutininį darbą. Kelis kartus iš eilės pasikarojantis veiksmas vadinamas ciklu. Yra metų ciklas – pavasaris, vasara, ruduo, žiema – ir vėl iš naujo. Yra savaitės ciklas – pimadienis, antradienis… sekmadienis ir vėl iš naujo pirmadienis. Ciklo sąvoka gyvenime mus supa visur. Ciklą programuotojai naudoja kai reikia pakartoti veiksmus ar veiksmų seką kelis kartus. Naudojami sąlyginiai ciklo sakiniai – ciklas vykdomas kol atitinka mūsų nurodytą sąlygą – arba fiksuoto kiekio – kai žinome kiek kartų reikės pakartoti veiksmą.

   Žiūrim į Šviesaforo programytę. Ten jau yra "amžinas ciklas"

// amžinas ciklas
void loop() {
//programos tekstas  
}

   Taip taip, tai "amžinas ciklas", programos kodas bus vykdomas kol mūsų kontroleris gaus maitinimą. Kur dar galime savo programoje panaudoti ciklą? Skaitome programos scenarijų: "…Žalias … 4 kartus sumirksi – mirksėjimo trukmė – 0,5 sekundės, užgęsta…". Kam mums rašyti 4 kartus pasikartojančią komandą, kai ją galime padaryti cikle 🙂 Tam naudosime ciklą for – kai komandas reikia kartoti žinomą kiekį.

 Sintaksė:

for (inicializacija; sąlyga; žingsnis;) {komandos, atliekamos cikle}

inicializacija – pradinės reikšmės nustatymas, jis atliekamas tik 1 kartą – prasidėjus ciklui
sąlyga – ciklas atliekamas kol tenkinama sąlyga – tikrinama kiekvieno ciklo žingsnio metu
žingsnis – reikšmės kitimo dydis

Mūsų atvėju – mirksėti turi 4 kartus, todėl

for (int i=1; i<5; i++){
// programos tekstas  
}

int i=1 – pradinės reikšmės nustatymas
i<5 – ciklas vyks kol i reikšmė bus mažesnė už 5 – i ciklui vykdant įgaus reikšmes 1, 2, 3, 4, 5. Beja sąlygą galima užrašyti ir i<=4
i++ – kiekvieno ciklo žingsnio metu i reikšmė padidės 1 vienetu

Ir štai jau modifikuota mūsų programa:

/* Šviesoforas, mokomoji programa
   programos ver. 3
   ciklas for */
int Raudonas = 2;
int Geltonas = 3;
int Zalias = 4;

void setup() {                
  // skaitmeninių išėjimų nustatymas
  pinMode(Raudonas, OUTPUT);
  pinMode(Geltonas, OUTPUT);
  pinMode(Zalias, OUTPUT);
}

// amžinas ciklas
void loop() {
  digitalWrite(Raudonas, HIGH);   // įjungiam raudoną
  delay(7000);             // laukiam 7 sekundes

  digitalWrite(Geltonas, HIGH);   // įjungiam geltoną
  delay(1000);             // laukiam 1 sekundę
  digitalWrite(Raudonas, LOW);    // išjungiam raudoną
  digitalWrite(Geltonas, LOW);    // išjungiam geltoną

  digitalWrite(Zalias, HIGH);   // įjungiam žalią
  delay(4000);             // laukiam 4 sekundes
  digitalWrite(Zalias, LOW);    // išjungiam žalią
  delay (500);             //  laukiam 0,5 sekundes

// mirksėjimas
  for (int i=1; i<5; i++){
    digitalWrite(Zalias, HIGH);   // įjungiam žalią
    delay(500);              // laukiam 0,5 sekundes
    digitalWrite(Zalias, LOW);    // išjungiam žalią  
    delay (500);             // laukiam 0,5 sekundes
  }
  
  digitalWrite(Geltonas, HIGH);   // įjungiam geltoną
  delay(1000);             // laukiam 1 sekundę
  digitalWrite(Geltonas, LOW);    // išjungiam geltoną
}

   Pasikartojantį darbą ikėlėme į ciklą, o ką jeigu mes norime, kad mirksėtų ne 4 o 8 kartus? tereikės pakeisti tik 1 (!) skaičiuką:

// mirksėjimas
  for (int i=1; i<9; i++){
    digitalWrite(Zalias, HIGH);   // įjungiam žalią
    delay(500);              // laukiam 0,5 sekundes
    digitalWrite(Zalias, LOW);    // išjungiam žalią  
    delay (500);             // laukiam 0,5 sekundes
  }

 

Vienas komentartas

    Arduino programavimo pradžiamokslis

    […] Pamokų sąrašas […]

Parašykite komentarą

El. pašto adresas nebus skelbiamas. Būtini laukeliai pažymėti *

*
*

Time limit is exhausted. Please reload CAPTCHA.