20.11.12

analogWrite ja for tsükkel

Tänases Kullo kohtumises õppisime juurde kaks asja: analogWrite ja for tsükkli.

analogWrite(pordi_number, pwm_väärtus);

analogWrite käivitab siis digitaalpordil PWM funktsionaalsuse - ehk väristab väljundit väga kiiresti 0 ja +5 voldi vahel. pwm_väärtus - vahemikus 0 kuni 255 - määrab ära selle, mitu osa iga võnke ajast on sees 0v ja mitu osa 5v. 0 - kogu aeg on sees 0v. 255 - kogu aeg on sees 5v. Ehk iga samm on 1/255%.

Näiteks selline programmijupp:

void setup(){
  pinMode(3,OUTPUT);
  analogWrite(3,20);
}

void loop(){}

paneb siis pin 3 ühendatud ledi põlema 20/255% ajast - ja inimsilmale paistab see üsna tuhmi led lambina.



for tsükkel on siis ette nähtud kontrollitud kordamiseks.

for(mida_ teha_esiteks; mida_kontrollida_iga_samm; mida_teha_enne_järgmist sammu){
  tegevused_mida_korduvalt_teha;
}

Näiteks niimodi:

for(int i=0; i<=255; i=i+1){
  analogWrite(3,i);
  delay(10);
}

Ehk mis siis nüüd tehti:
1) loodi muutuja i ja anti talle väärtus 0
2) viiakse läbi kontroll i<=255 - kui vastab tõele, jätkatakse täitmist. kui ei - siis minnakse edasi peale for() {}'i.
3) täidetakse järjest kõik read for'i {} vahel
4) täidetakse for'i korduse lõpu käsk i=i+1
5) pöördutakse tagasi punkti 2

Reaalselt täitis siis program sellised käsud:
analogWrite(3,0);
analogWrite(3,1);
....
analogWrite(3,255);

Ehk ledi heledus muutus täiesti väljas asendist kuni maksimaalse heleduseni.

Päris programmina midagi sellist:


void setup(){
  pinMode(3,OUTPUT);
}

void loop(){

  for(int i=0; i<=255; i=i+1){
    analogWrite(3,i);
    delay(10);
  }


  for(int i=255; i>=0; i=i-1){
    analogWrite(3,i);
    delay(10);
  }


}

Siin siis pannakse pin 3 ühendatud led aegamööda täisheledaks ja jälle aegamööda tagasi väljalülitatuks.

Kommentaare ei ole:

Postita kommentaar