Offline
Newbie
Karma: 0
Posts: 28
|
 |
« on: February 13, 2013, 10:41:43 am » |
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???  Avete qualche suggerimento? Grazie a tutti.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 28
|
 |
« Reply #1 on: February 13, 2013, 02:18:45 pm » |
nessuno mi puo' aiutare??
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 162
Posts: 15742
+39 349 2158303
|
 |
« Reply #2 on: February 13, 2013, 07:04:21 pm » |
Che frettoloso, ci dai neanche 4 ore per rispondere?  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
Newbie
Karma: 0
Posts: 28
|
 |
« Reply #3 on: February 14, 2013, 02:18:48 am » |
Ciao e scusa per la fretta!!  Non ho la necessita di controllarli con segnali PWM, mi basta solo lo stato acceso-spento, qualche consiglio? Grazie
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 162
Posts: 15742
+39 349 2158303
|
 |
« Reply #4 on: February 14, 2013, 02:27:48 am » |
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
Newbie
Karma: 0
Posts: 28
|
 |
« Reply #5 on: February 14, 2013, 02:37:45 am » |
Il mio problema è lo sketch, solo per far scorrere il rosso ho scritto un papiro, credo di non essere sulla trada giusta....  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
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16495
Don't know what I do
|
 |
« Reply #6 on: February 14, 2013, 03:39:34 am » |
E' sicuramente la strada sbagliata  Ad esempio, tu per i led usi i pin dall'1 al 24... void setup() { for (byte temp = 1; temp < 25; temp++) { pinMode(temp, OUTPUT); } } ecc...
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 28
|
 |
« Reply #7 on: February 14, 2013, 05:14:39 am » |
Non vorrei approffittare troppo  mi potresti creare un codice piu' completo cosi' me lo studio per benino..  Grazie mille!
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16495
Don't know what I do
|
 |
« Reply #8 on: February 14, 2013, 05:48:19 am » |
Sarebbe bene che ci arrivassi da solo, altrimenti serve a poco  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
Newbie
Karma: 0
Posts: 28
|
 |
« Reply #9 on: February 14, 2013, 12:41:21 pm » |
ok, ci provo. grazie
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 162
Posts: 15742
+39 349 2158303
|
 |
« Reply #10 on: February 14, 2013, 03:03:02 pm » |
Allora incomincia a non usare questo modo di scelta delle variabili 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 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
Newbie
Karma: 0
Posts: 28
|
 |
« Reply #11 on: February 14, 2013, 05:53:50 pm » |
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
Brattain Member
Karma: 162
Posts: 15742
+39 349 2158303
|
 |
« Reply #12 on: February 14, 2013, 07:01:03 pm » |
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
Newbie
Karma: 0
Posts: 28
|
 |
« Reply #13 on: February 15, 2013, 04:01:53 am » |
Ciao a tutti! Mi auguro che lo sketch fino a qua sia abbastanza corretto...  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? 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
Newbie
Karma: 0
Posts: 28
|
 |
« Reply #14 on: February 15, 2013, 09:23:53 am » |
cavoli, mi sono incartato...non riesco andare avanti... 
|
|
|
|
|
Logged
|
|
|
|
|
|