Accendere tutti i led su MOD-LED8X8 RGB

Ciao,
sto provando a utilizzare il MOD-LED8X8 RGB ( MOD-LED8x8RGB - Open Source Hardware Board) . Sono riuscito a collegarlo al mio Arduino e a utilizzare i vari esempi di testo scorrevole, utilizzando le librerie font.h e lcd8x8rgb.h. Io però vorrei capire come poter fare per accendere tutti e 64 i led insieme del colore desiderato. Mi piacerebbe inizialmente riuscire a creare un semplice semaforo che dal verde vada al giallo e poi al rosso. Come devo procedere?

Grazie a tutti
Alberto

@axterx: Come da regolamento, il cross-posting è proibito (anche tra sezioni di diversa lingua) e tu hai già aperto la stessa discussione QUI.

Decidi dove vuoi proseguire perché uno dei due thread verrà cancellato ...

Guglielmo

Mi scuso della svista. Preferirei proseguire nella sezione italiana.
Alberto

OK, thread nella sezione inglese eliminato, prosegui pure qui :wink: - gpb01

Non conosco quel modulo, ma guardando la sua libreria vedo due metodi un metodo che probabilmente potresti usare per fare quello che vuoi ...

• color - drawing color (unsigned char)
• drawSolidRectangle(x1,y1,x2,y2) - draws solid rectangle

... se selezioni il colore e fai un rettangolo pieno grande quanto tutto il modulo ... dovresti riuscirci :wink:

Guglielmo

Grazie Guglielmo,
sono finalmente riuscito quantomeno a capire come accendere tutti i led. Ora vorrei solo comprendere come vengono gestiti i colori. Provando a inserire l'istruzione color(x,x,x) con all'interno il codice rgb del colore desiderato non funziona. Mi sembra di comprendere che posso utilizzare solo valori da 1 a 7 ma mi pare strano non poter inviare il codice rgb del colore.
Il verde ok, il giallo ok, il rosso ok ma ora non riesco a ottenere l'arancione.

Se esamini la drawPixel() vedi come usa la variabile “color” :

void drawPixel (unsigned int X, unsigned int Y) {    //draw drawPixel at x,y coordinates to MOD-LED8x8RGB 1,1 is upper left corner
   if (Y<=bigY*8 && X<=bigX*8 && X>0 && Y>0) {
      if (Y>8) X=(X+bigX*8)*((Y-1)/8);
      Y=Y%8;
      if (Y==0) Y=8;
      
      int p;
      p=NumberX-((X-1)/8)-1;

      videobuf[3*(Y-1)+24*p]&=~(1<<((X-1)%8));                  //turn off chosen drawPixel
      videobuf[3*(Y-1)+1+24*p]&=~(1<<((X-1)%8));
      videobuf[3*(Y-1)+2+24*p]&=~(1<<((X-1)%8));

      if (color&1) videobuf[3*(Y-1)+24*p]|=(1<<((X-1)%8));      //set color to the drawPixel
      if (color&2) videobuf[3*(Y-1)+1+24*p]|=(1<<((X-1)%8));
      if (color&4) videobuf[3*(Y-1)+2+24*p]|=(1<<((X-1)%8));
   }
}

Come vedi, per accendere i tre colori di ogni LED RGB fa:

color AND 1 (0x01 … primo bit) per accendere un primo colore, poi fa color AND 2 (0x02 … secondo bit) per accendere il secondo colore ed infine color AND 4 (0x04 … terzo bit) per accendere il terzo colore.

Impostando opportunamente color da 0 a 7 hai 8 possibili colori … NON hai invece la possibilità di avere tutti i possibili colori che normalmente si hanno con LED RGB.

Guglielmo

Ora è chiaro. Grazie Guglielmo. In effetti mi mancava quella parte per comprendere come venissero gestiti i colori. Volendo creare un pannello di circa 16 cm di lato gestibile con Arduino che possa rappresentare tutti i colori RGB cosa potrei usare? Scusa la domanda forse banale ma è il primo esperimento che sto facendo con pannelli rgb.

Grazie ancora

Alberto

Io userei delle strisce di neoPixel (come li chiama Adafruit) o comunque strisce con LED WS2812 … controlli colore e intensità di ogni singolo LED il tutto con soli … 3 fili (+Vcc, GND, data) :slight_smile:

Guglielmo

Ok. Provo a dare un'occhiata.
Grazie infinatemente per il consiglio