Prispevki Arduino

Zatemnitev luči s PWM načinom

Zatemnitev luči: Primer nakazuje zatemnitev LED s pomočjo tipke in krmilnika

Za izdelavo preprostega projekta potrebujete:

Osnovna naloga je, da se LED zatemni po pritisku na tipko. Najprej si oglejmo vezalno shemo. LED-iode so na krmilnik priključene na pine 3, 6 in 9. Lahko jih vežemo tudi drugam, vendar moramo kasneje ustrezno popraviti kodo. Tipko pa vežemo na pin 7. Z upori zagotovimo ustrezno omejitev toka skozi elemente vezja.

Arduino PWM
Način povezave krmilnika s tipko in LED-iodami.

KODA – korak po koraku

int ledRed = 9; //definiramo kateri spremenljivki pripada določen pin
int ledYellow = 6;
int ledGreen = 3;

int button = 7;  //definiramo tipko
const int fade = 30;

Sledi vključitev VOID SETUP() funkcije, za inicializacijo vhodov/izhodov portov.

void setup() {
 pinMode(ledRed, OUTPUT);
 pinMode(ledYellow, OUTPUT);
 pinMode(ledGreen, OUTPUT);
 pinMode(button, INPUT);


 digitalWrite(ledRed, LOW); //začetna vrednost ob vklopu (ne sveti)
 digitalWrite(ledYellow, LOW);
 digitalWrite(ledGreen, HIGH);
}

Sledi vključitev glavne, neskončne zanke VOID LOOP().

Koda za zatemnitev LED, v tem primeru npr. samo rdeče:

void loop() { // This is only fading the red light - ledRed
 //ledRed
 for (int i=0; i<=255; i++) {
   analogWrite(ledRed, i);
   delay (30);
 }
 for (int i=255; i>=0; i--) {
   analogWrite(ledRed, i);
   delay (30);
 }
}

RAZLAGA VOID LOOP():

Prva FOR zanka: Ali je i manjši ali enak vrednosti 255? Če je pogoj izpolnjen, potem se i poveča za 1. Vrednosti ledRed vsakič pripišemo vrednost i, ter na ta način spreminjamo svetilnost LED. Po vsakem preverjanju je časovna zakasnitev 30 milisekund.

Druga FOR zanka: Deluje na enak princip, vendar tukaj zmanjšujemo svetilnost LED diode.

Zakasnitev lahko spreminjamo na sledeč način:

const int fade = 30; //deklariramo spremenljivko
delay (fade); //namesto vrednosti 30 uporabimo spremenljivko fade, ki ji samo na začetku pripišemo želeno vrednost, ki je lahko poljubna.

KODA: ZATEMNITEV s TIPKO

V VOID LOOP() funkcije sedaj beremo vrednost tipke in kličemo funkcijo fadeLights(). Hkrati prižgemo določeno LED oz. jo ugasnemo.

void loop() {
 if(digitalRead(button) == HIGH) {
   delay(15);                         // software debounce
   if(digitalRead(button) == HIGH){   // if the button is pressed, the function 
     fadeLights();                    // fadeLights is called
   }
 } else {
   digitalWrite(ledRed, LOW);         // if the button isn't pressed, the green LED is
   digitalWrite(ledYellow, LOW);      // going to be on and the others are not.
   digitalWrite(ledGreen, HIGH);
  }
}

FUNKCIJA void fadeLights(): kar smo v prvem delu pisali v funkcijo VOID LOOP(), smo sedaj zapisali v novo funkcijo.

void fadeLights(){
 for (int i = 255; i >= 0; i--) { //starts on green so needs to make green fade
   analogWrite(ledGreen, i);
   delay (fade);
 }
 //ledYellow
 for (int i = 0; i <= 255; i++) {
   analogWrite(ledYellow, i);
   delay (fade);
 }
 for (int i = 255; i >= 0; i--) {
   analogWrite(ledYellow, i);
   delay (fade);
 }
 //ledRed
 for (int i = 0; i <= 255; i++) {
   analogWrite(ledRed, i);
   delay (fade);
 }
 for (int i = 255; i >= 0; i--) {
   analogWrite(ledRed, i);
   delay (fade);
 }
 //ledYellow
 for (int i = 0; i <= 255; i++) {
   analogWrite(ledYellow, i);
   delay (fade);
 }
 for (int i = 255; i >= 0; i--) {
   analogWrite(ledYellow, i);
   delay (fade);
 }
 //ledGreen
 for (int i = 0; i <= 255; i++) {
   analogWrite(ledGreen, i);
   delay (fade);
 }
 }
Preverite ali deluje pravilno!

KAJ NAJ PREVERIM, ČE PRI MENI NE DELUJE ENAKO?

  • Ali sem kodo pravilno uredil in logično sklepam, da je vse na svojem mestu?
  • Preverim povezave pinov na krmilniku s periferijo.
  • Sem na protoboardu pravilno priključeval vezice?
  • Ali je koda uspešno nameščena?

Dodaj odgovor

Vaš e-naslov ne bo objavljen. * označuje zahtevana polja