Pages: [1] 2   Go Down
Author Topic: led rgb che (dovrebbero) scorrere  (Read 1787 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti,
sono inesperto ed ora capirete il perche'!

Ho un Arduino mega 2560 dove vorrei pilotare 8 led RGB in questa "semplice" maniera: potete immaginare una striscia di  8 led bianchi (RGB) dove scorre, intervallato da 2 bianchi, il rosso , il verde ed infine il blu, praticamente  i tre colori distini si inseguono con 2 bianchi tra un colore e l'altro.

In allegato potete vedere lo sketch con il solo colore rosso, ma credo che non sia la maniera giusta per procedere...vero??? smiley-confuse

Avete qualche suggerimento?
Grazie a tutti.



* espositore_bianco_e_rosso.ino (2.53 KB - downloaded 14 times.)
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

nessuno mi puo' aiutare??
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 272
Posts: 21940
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Che frettoloso, ci dai neanche 4 ore per rispondere?  smiley-wink smiley-wink smiley-wink

L' Arduino Mega ha solo 14 uscite PWM. Non puoi pilotarne 8 LED RGB (che sono in tutto 24 LED di diversi colori).

Le soluzioni sono per un RGB con anodo comune:
2 TLC5940 o 1 TLC5947 (che é solo SMD e percui devi prendere una schedina come per esempio http://www.razorconcepts.net/tlc5947.html  http://docs.macetech.com/doku.php/octobrite ).

Strise LED con controller PWM tipo WS2801, WS2811 o LED smd con controller integrato WS2812 vedi libreria http://code.google.com/p/fastspi/ la libreria sopporta il WS2811/12 basta cambiare:
FastSPI_LED.setChipset(CFastSPI_LED::SPI_WS2801); in:
FastSPI_LED.setChipset(CFastSPI_LED::SPI_WS2811);

Ciao Uwe
« Last Edit: February 13, 2013, 07:07:24 pm by uwefed » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao e scusa per la fretta!! smiley-fat

Non ho la necessita di controllarli con segnali PWM, mi basta solo lo stato acceso-spento, qualche consiglio?
Grazie
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 272
Posts: 21940
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se Ti bastano 7 colori piú spento puoi collegare il LED con relativi resistenze a 24 uscite digitali. Scegli la corrente dei LED bassi (5ma) per non bruciare le ucsite. (certi gruppi di Pin non sopportano 100mA in totele)
Non userei pin1 perché serve per la comunicazione USB.
Poi non userei dei nomi per ogni LED ma userei 3 Array perché cosí puoi usare dei cicli per accendere/spegnere i LED.

Ciao Uwe

« Last Edit: February 14, 2013, 02:38:52 am by uwefed » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il mio problema è lo sketch, solo per far scorrere il rosso ho scritto un papiro, credo di non essere sulla trada giusta.... smiley-confuse

Code:
int led1R=1, led1G=2, led1B= 3;
int led2R=4, led2G=5, led2B=6;
int led3R=7, led3G=8, led3B= 9;
int led4R=10, led4G=11, led4B=12;
int led5R=13, led5G=14, led5B= 15;
int led6R=16, led6G=17, led6B=18;
int led7R=19, led7G=20, led7B= 21;
int led8R=22, led8G=23, led8B=24;
int velo1 = 1000;
int velo2 = 1000;

void setup() {                
  // initialize the digital pin as an output.
  // LED1
  pinMode(led1R, OUTPUT);
  pinMode(led1G, OUTPUT);
  pinMode(led1B, OUTPUT);
   // LED2
  pinMode(led2R, OUTPUT);
  pinMode(led2G, OUTPUT);
  pinMode(led2B, OUTPUT);
   // LED3
  pinMode(led3R, OUTPUT);
  pinMode(led3G, OUTPUT);
  pinMode(led3B, OUTPUT);
   // LED4
  pinMode(led4R, OUTPUT);
  pinMode(led4G, OUTPUT);
  pinMode(led4B, OUTPUT);  
   // LED5
  pinMode(led5R, OUTPUT);
  pinMode(led5G, OUTPUT);
  pinMode(led5B, OUTPUT);
   // LED6
  pinMode(led6R, OUTPUT);
  pinMode(led6G, OUTPUT);
  pinMode(led6B, OUTPUT);  
    // LED7
  pinMode(led7R, OUTPUT);
  pinMode(led7G, OUTPUT);
  pinMode(led7B, OUTPUT);  
   // LED8
  pinMode(led8R, OUTPUT);
  pinMode(led8G, OUTPUT);
  pinMode(led8B, OUTPUT);
  
  }
  void loop() {
  
  

// LED1 ROSSO    
digitalWrite (led1R,HIGH);
delay (velo2);
  
//ACCENSIONE LED 2 ROSSO
digitalWrite (led2R, HIGH);
  
  //LED 1 RGB
  digitalWrite (led1R,HIGH);
  digitalWrite (led1G,HIGH);
  digitalWrite (led1B,HIGH);
  delay (velo2);


    //LED 2 RGB
    digitalWrite (led2R, HIGH);
    digitalWrite (led2G, HIGH);
    digitalWrite (led2B, HIGH);

  
//ACCENSIONE LED 3 ROSSO
digitalWrite (led3R, HIGH);
delay (velo2);

//ACCENSIONE LED 4 ROSSO
digitalWrite (led4R, HIGH);

  //LED 3 RGB
  digitalWrite (led3R, HIGH);
  digitalWrite (led3G, HIGH);
  digitalWrite (led3B, HIGH);
  delay (velo2);

    //LED 4 RGB
    digitalWrite (led4R, HIGH);
    digitalWrite (led4G, HIGH);
    digitalWrite (led4B, HIGH);


//ACCENSIONE LED 5 ROSSO
digitalWrite (led5R, HIGH);
delay (velo2);

//ACCENSIONE LED 6 ROSSO
digitalWrite (led6R, HIGH);

  //LED 5 RGB
  digitalWrite (led5R, HIGH);
  digitalWrite (led5G, HIGH);
  digitalWrite (led5B, HIGH);
  delay (velo2);
  
    //LED 6 RGB
    digitalWrite (led6R, HIGH);
    digitalWrite (led6G, HIGH);
    digitalWrite (led6B, HIGH);
    
//ACCENSIONE LED 7 ROSSO
digitalWrite (led7R, HIGH);
delay (velo2);

//ACCENSIONE LED 8 ROSSO
digitalWrite (led8R, HIGH);

  //LED 7 RGB
  digitalWrite (led7R, HIGH);
  digitalWrite (led7G, HIGH);
  digitalWrite (led7B, HIGH);
  delay (velo2);
  
    //LED 8 RGB
    digitalWrite (led8R, HIGH);
    digitalWrite (led8G, HIGH);
    digitalWrite (led8B, HIGH);




}

EDIT by mod:
per favore usa il tag CODE apposito per includere del codice
« Last Edit: February 14, 2013, 03:34:20 am by leo72 » Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 336
Posts: 23142
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

E' sicuramente la strada sbagliata  smiley-wink
Ad esempio, tu per i led usi i pin dall'1 al 24...
Code:
void setup() {
  for (byte temp = 1; temp < 25; temp++) {
    pinMode(temp, OUTPUT);
  }
}

ecc...
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non vorrei approffittare troppo smiley-kitty
mi potresti creare un codice piu' completo cosi' me lo studio per benino.. smiley-eek

Grazie mille!
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 336
Posts: 23142
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sarebbe bene che ci arrivassi da solo, altrimenti serve a poco  smiley-wink

Ti do alcune dritte. Io al tuo posto userei un paio di variabili: nella prima ci metterei il valore del led precedentemente acceso, nella seconda il led che sto accendendo.
Accendo il led e spengo il precedente. Questo crea l'effetto del led che scorre.

Controlla quando arrivi ai margini, nel caso inverti la direzione di accensione.


 
 
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok, ci provo.
grazie
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 272
Posts: 21940
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Allora incomincia a non usare questo modo di scelta delle variabili
Code:
int led1R=1, led1G=2, led1B= 3;
int led2R=4, led2G=5, led2B=6;
int led3R=7, led3G=8, led3B= 9;
int led4R=10, led4G=11, led4B=12;
int led5R=13, led5G=14, led5B= 15;
int led6R=16, led6G=17, led6B=18;
int led7R=19, led7G=20, led7B= 21;
int led8R=22, led8G=23, led8B=24;
ma
Code:
byte LEDRosso[] = {1, 4, 7, 10, 13, 16, 19, 22};
byte LEDVerde[] = {2, 5, 8, ...};
byte LEDBlu[] = {3, 6, 9, ...};

cosí puoi lavorare con un indice di un array senza dover scrivere ogni LED singolarmente.

Ciao Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gtazie x la dritta!
Per la dichiarazione delle variabili ho capito che:

1.Creare un array e' molto piu' comodo che la dichiarazione singola
2.Nel mio caso, posso utilizzare la variabile di tipo BYTE e non INT xche' occupa meno memoria.

Per il Setup ed il loop:

1. Conviene utilizzare la struttura FOR, evitando cosi' di scrIvere papiri (ed errori) infiniti....

Si
Puo'
Faaree!(?)

Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 272
Posts: 21940
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gtazie x la dritta!
Per la dichiarazione delle variabili ho capito che:

1.Creare un array e' molto piu' comodo che la dichiarazione singola
2.Nel mio caso, posso utilizzare la variabile di tipo BYTE e non INT xche' occupa meno memoria.

Per il Setup ed il loop:

1. Conviene utilizzare la struttura FOR, evitando cosi' di scrIvere papiri (ed errori) infiniti....

Si
Puo'
Faaree!(?)
sí, si puó fare!!!
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti!
Mi auguro che lo sketch fino a qua sia abbastanza corretto... smiley-zipper

Il rosso scorre nei 4 led rgb, a questo punto lo dovrebbe seguire a ruota il verde e dopo il blu...ma come si fa?




Code:
byte LEDRosso[] ={1,4,7,10};
byte LEDVerde[] ={ 2,5,8,11};
byte LEDBlu[] ={3,6,9,12};
byte count1=0;
byte count2=0;
byte count3=0;
int time = 500;

void setup (){
  for (count1=0;count1<4;count1++) {
    pinMode(LEDRosso[count1], OUTPUT);
 }   
  for (count2=0;count2<4;count2++) {
    pinMode(LEDVerde[count2], OUTPUT);
 }   
  for (count3=0;count3<4;count3++) {
    pinMode(LEDBlu[count3], OUTPUT);
}


}

void loop(){
 for (count1=0;count1<4;count1++) {
   digitalWrite(LEDRosso [count1], HIGH);
   delay(time);
   digitalWrite(LEDRosso[count1], LOW);



}


}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

cavoli, mi sono incartato...non riesco andare avanti... smiley-cry
Logged

Pages: [1] 2   Go Up
Jump to: