Random RGB LED

Odgovori
Message
Autoru
Korisnikov avatar
DenisHD
Početnik
Postovi: 368
Pridružio se: Sre Jan 04, 2017 11:32 am

Random RGB LED

#1 Post od DenisHD » Uto Maj 29, 2018 9:50 pm

Pozz svima! :D
Dakle pala mi je na um jedna ideja, da isprogramiram arduino, tako da kontrolise RGB LED, 4 komada i da svaka naredna boja se ukljuci na narednoj diodi.. Ja sam iskucao kod, i po serial monitoru brojanje diodae koja je na redu, i boje, taj deo bi trebalo da radi... Ali kad sam stigao do samog PWMa, e tu neće da radi.. dakle unutar for petlje ispisuje normalno brojeve od 0, do 255, dok izvan petlje neće nikako.. Probao sam i da definišem još jednu promenljivu koja je izvan for petlje, i da joj dodelim vrednost promenljive koja je unutar for petlje, ali to nije uspelo.. ili prikazuje konstantno 0, ili 1.. kako kad...
Jel postoji neko rešenje da vrednosti iz for petlje mogu koristiti i izvan nje, ili ne? I još nešto.. pošto nemam dovoljno provodnika za povezivanje (a ni pinova na arduinu) da bi svakoj diodi dodelio poseban RGB kanal, ja sam definisao 4 promenljive, kojima upravljam HIGH / LOW, i gnd pinovi dioda su povezani na te pinove arduina, i tako vršim selekciju diode.. e sad, pošto kao što rekoh, nemam dovoljno provodnika, za probu sam spojio samo jednu običnu diodu na jedan od gnd pinova RGB LEDa, i nekako se u čudnom tajmingu pali i gasi.. e sad da li je i to još jedan od problema ili samo PWM, ne znam... Ali prvo moram da rešim PWM, pa ću posle videti kako se sve ponaša, te da li treba korekcija i oko ovog dela koda...

Evo i koda:

Kod: Obeleži sve

const int R = 9;
const int G = 10;
const int B = 11;

const int led1 = 2;
const int led2 = 3;
const int led3 = 4;
const int led4 = 5;

int br_diode;
int boja;
int PWM;

void setup(){
  Serial.begin(9600);
  
  pinMode(R, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(B, OUTPUT);

  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
}

void loop(){
    int pwm;
  
    for(pwm = 0; pwm < 255; pwm++){
    delay(1);
    }

    for(pwm = 255; pwm > 0; pwm--){
    delay(1);
    }
    

    if(pwm == 0){
      br_diode++;
      boja++;
      delay(5);
      }

      if(br_diode == 5){
        br_diode = 1;
        }

        if(boja == 4){
        boja = 1;
        }

      Serial.print("br_diode: ");
      Serial.print(br_diode);

      Serial.print("\t boja: ");
      Serial.print(boja);

      Serial.print("\t PWM: ");
      Serial.print(pwm);

      Serial.println("");

      switch(br_diode){
        case 1: digitalWrite(led1, LOW);
                digitalWrite(led2, HIGH);
                digitalWrite(led3, HIGH);
                digitalWrite(led4, HIGH);
        break;
        case 2: digitalWrite(led1, HIGH);
                digitalWrite(led2, LOW);
                digitalWrite(led3, HIGH);
                digitalWrite(led4, HIGH);
        break;
        case 3: digitalWrite(led1, HIGH);
                digitalWrite(led2, HIGH);
                digitalWrite(led3, LOW);
                digitalWrite(led4, HIGH);
        break;
        case 4: digitalWrite(led1, HIGH);
                digitalWrite(led2, HIGH);
                digitalWrite(led3, HIGH);
                digitalWrite(led4, LOW);
        break;
        default:
        break;
        }

        switch(boja){
          case 1: analogWrite(R, pwm);
          break;
          case 2: analogWrite(G, pwm);
          break;
          case 3: analogWrite(B, pwm);
          break;
          default:
          break;
          }
}
Nemate potrebne dozvole da pogledate prikačene fajlove u ovom postu.

Matrad
Početnik
Postovi: 12
Pridružio se: Ned Mar 25, 2018 11:06 pm

Re: Random RGB LED

#2 Post od Matrad » Sre Maj 30, 2018 2:37 pm

E ovako...

1) tvoje promenjljive boja i br_diode moras da inicijalizujes na neku vrednost da bi mogao u kodu da kazes boja++ ili br_diode++ (primer: int boja=0;)
To je inace jako dobra praksa da svaku promenljivu odmah inicijalizujes kada je stvaras

2) Tvoje for petlje ne rade nista osim sto prave delay od
255 milisekundi. Da bi for petlja imala efekat moras u
nju da stavis ovaj tvoj poslednji switch.
Ovako: for(pwm=0; pwm<255; pwm++){
switch(boja){...}
delay(1);
}

Korisnikov avatar
DenisHD
Početnik
Postovi: 368
Pridružio se: Sre Jan 04, 2017 11:32 am

Re: Random RGB LED

#3 Post od DenisHD » Sre Maj 30, 2018 11:17 pm

@Matrad Hvala na odgovoru! :D Sada radi, samo uvek ubaguje neka dioda i slabo svetli.. tj arduino ubaguje.. i dešava se da meša tj uključuje odjednom dve boje.. Evo linka kako to izgleda...
https://www.youtube.com/watch?v=dSB-HFaBBgs

Matrad
Početnik
Postovi: 12
Pridružio se: Ned Mar 25, 2018 11:06 pm

Re: Random RGB LED

#4 Post od Matrad » Čet Maj 31, 2018 10:01 am

Ajde okaci konacan kod. Ne bi trebao arduino da baguje, pre ce biti da se jos nesto u kod podkralo.

Korisnikov avatar
DenisHD
Početnik
Postovi: 368
Pridružio se: Sre Jan 04, 2017 11:32 am

Re: Random RGB LED

#5 Post od DenisHD » Čet Maj 31, 2018 10:11 am

Evo i koda.. jbg, zaboravio sam da stavim odmah i kod.. :D

Kod: Obeleži sve

const int R = 9;
const int G = 10;
const int B = 11;

const int led1 = 2;
const int led2 = 3;
const int led3 = 4;
const int led4 = 5;

int br_diode;
int boja;
int PWM;

void setup(){
  Serial.begin(9600);
  
  pinMode(R, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(B, OUTPUT);

  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
}

void loop(){
    int pwm;
  
    for(pwm = 0; pwm < 255; pwm++){
    switch(boja){
          case 1: analogWrite(R, pwm);
          break;
          case 2: analogWrite(G, pwm);
          break;
          case 3: analogWrite(B, pwm);
          break;
          default:
          break;
          }
    delay(1);
    }

    for(pwm = 255; pwm > 0; pwm--){
    switch(boja){
          case 1: analogWrite(R, pwm);
          break;
          case 2: analogWrite(G, pwm);
          break;
          case 3: analogWrite(B, pwm);
          break;
          default:
          break;
          }
    delay(1);
    }
    

    if(pwm == 0){
      br_diode++;
      boja++;
      delay(5);
      }

      if(br_diode == 5){
        br_diode = 1;
        }

        if(boja == 4){
        boja = 1;
        }

      
      Serial.print("br_diode: ");
      Serial.print(br_diode);

      Serial.print("\t boja: ");
      Serial.print(boja);

      Serial.print("\t PWM: ");
      Serial.print(pwm);

      Serial.println("");

      switch(br_diode){
        case 1: digitalWrite(led1, LOW);
                digitalWrite(led2, HIGH);
                digitalWrite(led3, HIGH);
                digitalWrite(led4, HIGH);
        break;
        case 2: digitalWrite(led1, HIGH);
                digitalWrite(led2, LOW);
                digitalWrite(led3, HIGH);
                digitalWrite(led4, HIGH);
        break;
        case 3: digitalWrite(led1, HIGH);
                digitalWrite(led2, HIGH);
                digitalWrite(led3, LOW);
                digitalWrite(led4, HIGH);
        break;
        case 4: digitalWrite(led1, HIGH);
                digitalWrite(led2, HIGH);
                digitalWrite(led3, HIGH);
                digitalWrite(led4, LOW);
        break;
        default:
        break;
        }
}


Matrad
Početnik
Postovi: 12
Pridružio se: Ned Mar 25, 2018 11:06 pm

Re: Random RGB LED

#6 Post od Matrad » Čet Maj 31, 2018 12:41 pm

Slika

Matrad
Početnik
Postovi: 12
Pridružio se: Ned Mar 25, 2018 11:06 pm

Re: Random RGB LED

#7 Post od Matrad » Čet Maj 31, 2018 12:42 pm

Slika
Slika
Slika

Korisnikov avatar
DenisHD
Početnik
Postovi: 368
Pridružio se: Sre Jan 04, 2017 11:32 am

Re: Random RGB LED

#8 Post od DenisHD » Pet Jun 01, 2018 9:32 pm

@Matrad uradio sam kako si rekao, medjutim isto radi...

Odgovori

Ko je OnLine

Korisnika u ovom forumu: Nema registrovanih korisnika i 1 gost