{"id":989,"date":"2018-03-11T15:29:30","date_gmt":"2018-03-11T15:29:30","guid":{"rendered":"http:\/\/www.budus.it\/Blog\/?p=989"},"modified":"2018-03-11T19:30:31","modified_gmt":"2018-03-11T19:30:31","slug":"kit-kuman-arduino-uno-r3-dot-matrix","status":"publish","type":"post","link":"https:\/\/www.budus.it\/Blog\/kit-kuman-arduino-uno-r3-dot-matrix\/","title":{"rendered":"Kit Kuman Arduino UNO R3- Dot Matrix"},"content":{"rendered":"<p>Dopo il <a href=\"https:\/\/www.budus.it\/Blog\/?p=983\">Sensore di Fiamma<\/a> mi sono cimentato con la Matrice di LED 1588BS.<\/p>\n<p>Ho tribolato parecchio perch\u00e9 non capivo il funzionamento. Le difficolt\u00e0 per un principiante &#8211; come me &#8211; sono le seguenti:<\/p>\n<ol>\n<li>La matrice \u00e8 composta da 64 LED disposti in 8 righe da 8 colonne (8&#215;8 = 64)<\/li>\n<li>Nella parte inferiore presenta 8+8 PIN (16 in tutto) che governano righe e colonne\u00a0<em>in un certo modo<\/em> (che poi vi spiego)<\/li>\n<li>Arduino UNO non dispone di 16 uscite digitali, quindi, bisogna ricorrere anche a quelle analogiche per gestire la matrice.<\/li>\n<li>La matrice ha una discreta dimensione, quindi, non si riesce &#8211; almeno non facilmente &#8211; a piazzare su un&#8217;unica breadboard; nel mio caso ne ho usato una grande e una piccola.<\/li>\n<li>Su ogni\u00a0<em>Catodo<\/em> (alcuni PIN della matrice sono catodi [-] e altri anodi [+]) \u00e8 opportuno mettere una resistenza da 220 Ohm e, non essendo particolarmente chiara la documentazione fornita da Kuman (ma anche quella che ho trovato in rete \u00e8 chiara il giusto), ho faticato molto a capire come andavano eseguiti i collegamenti.<\/li>\n<\/ol>\n<figure id=\"attachment_991\" aria-describedby=\"caption-attachment-991\" style=\"width: 840px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-991\" src=\"https:\/\/www.budus.it\/Blog\/wp-content\/uploads\/2018\/03\/20180310_200200-1024x576.jpg\" alt=\"\" width=\"840\" height=\"473\" srcset=\"https:\/\/www.budus.it\/Blog\/wp-content\/uploads\/2018\/03\/20180310_200200-1024x576.jpg 1024w, https:\/\/www.budus.it\/Blog\/wp-content\/uploads\/2018\/03\/20180310_200200-300x169.jpg 300w, https:\/\/www.budus.it\/Blog\/wp-content\/uploads\/2018\/03\/20180310_200200-768x432.jpg 768w, https:\/\/www.budus.it\/Blog\/wp-content\/uploads\/2018\/03\/20180310_200200-1200x675.jpg 1200w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption id=\"caption-attachment-991\" class=\"wp-caption-text\">Implementazione della Lezione 6 del Kit Kuman Arduino UNO r3<\/figcaption><\/figure>\n<p><!--more--><\/p>\n<p>Devo fare subito un avvertimento riguardo alla mia implementazione della Lezione 6 del Kit Kuman: quella proposta non mi piace, la trovo poco chiara e ho preferito realizzare la cosa\u00a0<em>a modo mio<\/em>.<\/p>\n<p>Prima di tutto, la distinta di quello che ci serve:<\/p>\n<h2>Assembly List<\/h2>\n<table>\n<thead>\n<tr>\n<th>Label<\/th>\n<th>Part Type<\/th>\n<th>Properties<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Componente1<\/td>\n<td>Arduino Uno (Rev3)<\/td>\n<td class=\"props\">tipo Arduino UNO (Rev3)<\/td>\n<\/tr>\n<tr>\n<td>Disp1<\/td>\n<td>LBT2088AH<\/td>\n<td class=\"props\">size 60.5mm; variant variant 1; part number LBT2088AH<\/td>\n<\/tr>\n<tr>\n<td>R1<\/td>\n<td>220\u03a9 Resistor<\/td>\n<td class=\"props\">package THT; tolerance \u00b15%; bands 4; pin spacing 400 mil; resistenza 220\u03a9<\/td>\n<\/tr>\n<tr>\n<td>R2<\/td>\n<td>220\u03a9 Resistor<\/td>\n<td class=\"props\">package THT; tolerance \u00b15%; bands 4; pin spacing 400 mil; resistenza 220\u03a9<\/td>\n<\/tr>\n<tr>\n<td>R3<\/td>\n<td>220\u03a9 Resistor<\/td>\n<td class=\"props\">package THT; tolerance \u00b15%; bands 4; pin spacing 400 mil; resistenza 220\u03a9<\/td>\n<\/tr>\n<tr>\n<td>R4<\/td>\n<td>220\u03a9 Resistor<\/td>\n<td class=\"props\">package THT; tolerance \u00b15%; bands 4; pin spacing 400 mil; resistenza 220\u03a9<\/td>\n<\/tr>\n<tr>\n<td>R5<\/td>\n<td>220\u03a9 Resistor<\/td>\n<td class=\"props\">package THT; tolerance \u00b15%; bands 4; pin spacing 400 mil; resistenza 220\u03a9<\/td>\n<\/tr>\n<tr>\n<td>R6<\/td>\n<td>220\u03a9 Resistor<\/td>\n<td class=\"props\">package THT; tolerance \u00b15%; bands 4; pin spacing 400 mil; resistenza 220\u03a9<\/td>\n<\/tr>\n<tr>\n<td>R7<\/td>\n<td>220\u03a9 Resistor<\/td>\n<td class=\"props\">package THT; tolerance \u00b15%; bands 4; pin spacing 400 mil; resistenza 220\u03a9<\/td>\n<\/tr>\n<tr>\n<td>R8<\/td>\n<td>220\u03a9 Resistor<\/td>\n<td class=\"props\">package THT; tolerance \u00b15%; bands 4; pin spacing 400 mil; resistenza 220\u03a9<\/td>\n<\/tr>\n<tr>\n<td>R9<\/td>\n<td>10k\u03a9 Resistor<\/td>\n<td class=\"props\">package THT; tolerance \u00b15%; bands 4; pin spacing 400 mil; resistenza 10k\u03a9<\/td>\n<\/tr>\n<tr>\n<td>S1<\/td>\n<td>Pushbutton<\/td>\n<td class=\"props\">package [THT]<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Shopping List<\/h2>\n<table>\n<thead>\n<tr>\n<th>Amount<\/th>\n<th>Part Type<\/th>\n<th>Properties<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>Arduino Uno (Rev3)<\/td>\n<td class=\"props\">tipo Arduino UNO (Rev3)<\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>LBT2088AH<\/td>\n<td class=\"props\">size 60.5mm; variant variant 1; part number LBT2088AH<\/td>\n<\/tr>\n<tr>\n<td>8<\/td>\n<td>220\u03a9 Resistor<\/td>\n<td class=\"props\">package THT; tolerance \u00b15%; bands 4; pin spacing 400 mil; resistenza 220\u03a9<\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>10k\u03a9 Resistor<\/td>\n<td class=\"props\">package THT; tolerance \u00b15%; bands 4; pin spacing 400 mil; resistenza 10k\u03a9<\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>Pushbutton<\/td>\n<td class=\"props\">package [THT]<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Dopodich\u00e9 dobbiamo collegare il nostro Arduino alla matrice: <a href=\"https:\/\/www.tinkercad.com\/things\/lcxY7JYgxdL\">qui trovate uno schema che spero sia comprensibile<\/a>.<\/p>\n<p>L&#8217;ho realizzato con TinkerCAD e, non essendo disponibile tra i componenti di libreria la 8&#215;8 Dot Matrix (Codice: 1588BS), mi sono dovuto arrangiare\u00a0<strong><em>ricostruendo la matrice di led (ben 64!) e relativo circuito<\/em><\/strong>.<\/p>\n<p>Ci credete se vi dico che ci ho preso al primo colpo ? Ok, non ci credevo nemmeno io !<\/p>\n<p>Purtroppo, simulando, i LED sono abbastanza scuri e non si capisce bene ma, aprendo la console di output, \u00e8 possibile vedere l&#8217;output che ho previsto e che rappresenta &#8220;con i caratteri&#8221; quello che viene visualizzato sui LED e risulta tutto pi\u00f9 semplice.<\/p>\n<p>Come si pu\u00f2 notare dalla foto, lo schema non combacia per nulla, quindi, mi sono preso pure la briga di implementarne uno pi\u00f9 fedele tramite un software open-source che ho trovato (che ha numerosissimi componenti): <a href=\"http:\/\/fritzing.org\">Fritzing<\/a>.<\/p>\n<figure style=\"width: 3183px\" class=\"wp-caption alignleft\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large\" src=\"http:\/\/www.budus.it\/Arduino\/Lezione_6_8x8_Dot_Matrix_v6\/Lezione_6_8x8_Dot_Matrix_v6_bb.png\" width=\"3183\" height=\"2439\" \/><figcaption class=\"wp-caption-text\">Schema della Lezione 6 del Kit Kuman Arduino UNO r3<\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Nel caso in cui neanche questo sia chiaro, ci provo con lo schema elettrico:<\/p>\n<figure style=\"width: 2196px\" class=\"wp-caption alignleft\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large\" src=\"http:\/\/www.budus.it\/Arduino\/Lezione_6_8x8_Dot_Matrix_v6\/Lezione_6_8x8_Dot_Matrix_v6_schem.png\" width=\"2196\" height=\"1020\" \/><figcaption class=\"wp-caption-text\">Schema Elettrico Lezione 6 Kit Kuman Arduino UNO r3<\/figcaption><\/figure>\n<p>Quello che segue \u00e8 il codice (<a href=\"http:\/\/www.budus.it\/Arduino\/Lezione_6_8x8_Dot_Matrix_v6\/Lezione_6_8x8_Dot_Matrix_v6.ino\">che potete scaricare anche cliccando qui<\/a>, cos\u00ec da non perdere la formattazione)\u00a0<em>autoesplicativo<\/em> (nel senso che l&#8217;ho commentato parecchio):<\/p>\n<pre><code>\/*\r\n\r\nNel KIT Kuman Arduino UNO r3 \u00e8 inclusa una 8x8 Dot Matrix Cod.: 1588BS\r\n\r\nPossiede 8+8 pin che, visti da sopra (cio\u00e8 guardando i LED e immaginando i\r\npiedini sotto, dato che non sono visibili) e numerati in senso antiorario,\r\nsono cos\u00ec disposti:\r\n\r\n16 15 14 13 12 11 10 9\r\n- - + - + - - +\r\n\r\n+ + - - + - + +\r\n1 2 3 4 5 6 7 8\r\n\r\n+ = Anodo\r\n\r\n- = Catodo\r\n\r\nQuando si collegano i PIN della Matrice a quelli di Ardiono \u00e8 opportuno\r\nprevedere una resistenza, su ogni catodo, da 220 Ohm.\r\n\r\nI PIN della Matrice vanno a pilotare RIGHE e COLONNE secondo il seguente\r\nschema:\r\n\r\n- - - - - - - - -&gt; CATODO\r\n13 3 4 10 6 11 15 16 -&gt; PIN\r\n1 2 3 4 5 6 7 8 -&gt; COLONNA\r\n+ 9 1 O O O O O O O O\r\n+ 14 2 O O O O O O O O\r\n+ 8 3 O O O O O O O O\r\n+ 12 4 O O O O O O O O\r\n+ 1 5 O O O O O O O O\r\n+ 7 6 O O O O O O O O\r\n+ 2 7 O O O O O O O O\r\n+ 5 8 O O O O O O O O\r\n| | |\r\n| | |_&gt; RIGA\r\n| |___&gt; PIN\r\n|______&gt; ANODO\r\n\r\nVolendo mettere in ordine di PIN della Matrice si ottiene:\r\n\r\n- - - - - - - - -&gt; CATODO\r\n3 4 6 10 11 13 15 16 -&gt; PIN\r\n2 3 5 4 6 1 7 8 -&gt; COLONNA\r\n+ 1 5 O O O O O O O O\r\n+ 2 7 O O O O O O O O\r\n+ 5 8 O O O O O O O O\r\n+ 7 6 O O O O O O O O\r\n+ 8 3 O O O O O O O O\r\n+ 9 1 O O O O O O O O\r\n+ 12 4 O O O O O O O O\r\n+ 14 2 O O O O O O O O\r\n| | |\r\n| | |_&gt; RIGA\r\n| |___&gt; PIN\r\n|______&gt; ANODO\r\n\r\nDato che nell'Ardiono:\r\n\r\n- Esistono 13 PIN Digitali\r\n- I primi due PIN (0 e 1) non sono utilizzabili (sono usati per RX e TX)\r\n\r\nNon \u00e8 possibile associare direttamente ogni PIN della Matrice ad uno\r\ncorrispondente dell'Arduino.\r\nPer ovviare al problema bisogna:\r\n\r\n1) Utilizzare i PIN Digitali dal 2 al 13 (per un totale di 12 PIN)\r\n2) Utilizzare i PIN Analogici da A0 ad A3 (per un totale di 4 PIN)\r\n\r\nin modo da avere un totale di 16 PIN di comando.\r\n\r\nComandare l'accensione delle RIGHE e' semplice perch\u00e9 sufficiente mettere ad\r\nHIGH il PIN relativo alla riga da illuminare; ad esempio, volendo accendere la\r\nriga 5, bisogna mettere in HIGH il PIN 1 della matrice.\r\n\r\nViceversa, l'accensione delle COLONNE, risulta complicata perch\u00e9 bisogna\r\neseguire 2 operazioni:\r\n\r\n1) Accendere tutte le RIGHE mettendole in HIGH.\r\n2) Spegnere tutte le COLONNE mettendole in HIGH (s\u00ec, il contrario) tranne\r\nquella desiderata, che va messa in LOW.\r\n\r\nLa visualizzazione di caratteri poi \u00e8 ulteriormente complicata dal fatto che\r\nnon \u00e8 possibile decidere quali punti della matrice lasciare accesi e quali\r\nspenti contemporaneamente, semplicemente intervenendo sui PIN.\r\n\r\nLo stratagemma utilizzato prevede di sfruttare alcune caratteristiche:\r\n\r\n1) La velocit\u00e0 di Arduino nell'eseguire le operazioni.\r\n2) La lentezza dell'occhio umano nel percepire quando un LED viene spento\r\n3) La \"persistenza luminosa\" di un LED anche dopo che \u00e8 stato spento.\r\n\r\nOperando in questo modo \u00e8 possibile dare l'illusione che i LED della matrice\r\nsiano contemporaneamente accesi, anche se questo non \u00e8 vero praticamente.\r\n\r\n********************************************************************************\r\n*\/\r\n\r\n#define PIN_MIN 1\r\n#define PIN_MAX 16\r\n\r\n#define MAX_INT 32768\r\n\r\n\/* Numero di \"ripetizioni\" del carattere affinche' risulti visibile. *\/\r\n#define REPEAT_CHAR 128\r\n\r\n\/* Tempo di attesa quando viene premuto il pulsante. *\/\r\n#define DEFAULT_DELAY 1000\r\n\r\n\/* Corrispondenza PIN Analogici: Nome PIN -&gt; Valore Numerico\r\n* A0 -&gt; 14\r\n* A1 -&gt; 15\r\n* A2 -&gt; 16\r\n* A3 -&gt; 17\r\n* A4 -&gt; 18 (non usato)\r\n* A5 -&gt; 19 (non usato)\r\n*\r\n*\/\r\n\r\nconst long clTimerPause = 10000; \/\/ Pausa quando viene premuto il pulsante\r\n\r\n\/* Array contenente l'Associazione PIN Matrice -&gt; PIN Arduino\r\n* Il primo valore dell'Array (0) non va considerato, serve solo affinch\u00e9 al\r\n* PIN 1 della Matrice corrisponda il PIN A3 di Arduino e cos\u00ec via fino al\r\n* PIN 16 della Matrice che corrisponde il PIN 13 di Arduino.\r\n*\r\n* L'associazione di questo Array pu\u00f2 essere usata per eseguire in modo\r\n* relativamente facile il collegamento tra Arduino e la Matrice.\r\n*\r\n*\/\r\nconst int ciMatrix_Arduino[] = {0,\r\nA3, A1, 7, 8, A0, 10, A2, 4, 2, 9, 11, 5, 6, 3, 12, 13};\r\n\/\/ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 -&gt; Matrice\r\n\r\n\/* Array contenente l'Associazione PIN Arduino -&gt; PIN Matrice *\/\r\nconst int ciArduino_Matrix[] = {0, 1,\r\n9, 14, 8, 12, 13, 3, 4, 10, 6, 11, 15, 16, 5, 2, 7, 1};\r\n\/\/ 2 3 4 5 6 7 8 9 10 11 12 13 A0 A1 A2 A3 -&gt; Arduino\r\n\r\n\/* Una matrice di corrispondenza per le RIGHE. *\/\r\nconst int ciRow[] = {0,\r\n2, 3, 4, 5, A3, A2, A1, A0}; \/\/ -&gt; PIN ARDUINO\r\n\/\/ 1 2 3 4 5 6 7 8 -&gt; RIGA MATRICE\r\n\/\/ 9 14 8 12 1 7 2 5 -&gt; PIN MATRICE\r\n\r\n\/* Una matrice di corrispondenza per le COLONNE. *\/\r\nconst int ciCol[] = {0,\r\n6, 7, 8, 9, 10, 11, 12, 13}; \/\/ -&gt; PIN ARDUINO\r\n\/\/ 1 2 3 4 5 6 7 8 -&gt; COLONNA MATRICE\r\n\/\/13 3 4 10 6 11 15 16 -&gt; PIN MATRICE\r\n\r\n\/* Dichiara un array di array contenente una mappa di font unicode 8x8 *\/\r\nunsigned char font8x8_basic[128][8] = {\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0000 (nul) 0\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0001\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0002\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0003\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0004\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0005\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0006\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0007\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0008\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0009\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+000A 10\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+000B\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+000C\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+000D\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+000E\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+000F\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0010\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0011\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0012\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0013\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0014 20\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0015\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0016\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0017\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0018\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0019\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+001A\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+001B\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+001C\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+001D\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+001E 30\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+001F\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0020 (space)\r\n{ 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00}, \/\/ U+0021 (!)\r\n{ 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0022 (\")\r\n{ 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, \/\/ U+0023 (#)\r\n{ 0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00}, \/\/ U+0024 ($)\r\n{ 0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00}, \/\/ U+0025 (%)\r\n{ 0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00}, \/\/ U+0026 (&amp;)\r\n{ 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0027 (')\r\n{ 0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00}, \/\/ U+0028 (() 40\r\n{ 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00}, \/\/ U+0029 ())\r\n{ 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, \/\/ U+002A (*)\r\n{ 0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, \/\/ U+002B (+)\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06}, \/\/ U+002C (,)\r\n{ 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, \/\/ U+002D (-)\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00}, \/\/ U+002E (.)\r\n{ 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00}, \/\/ U+002F (\/)\r\n{ 0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, \/\/ U+0030 (0)\r\n{ 0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, \/\/ U+0031 (1)\r\n{ 0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00}, \/\/ U+0032 (2) 50\r\n{ 0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00}, \/\/ U+0033 (3)\r\n{ 0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, \/\/ U+0034 (4)\r\n{ 0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, \/\/ U+0035 (5)\r\n{ 0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, \/\/ U+0036 (6)\r\n{ 0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00}, \/\/ U+0037 (7)\r\n{ 0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, \/\/ U+0038 (8)\r\n{ 0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00}, \/\/ U+0039 (9)\r\n{ 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00}, \/\/ U+003A (:)\r\n{ 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06}, \/\/ U+003B (\/\/)\r\n{ 0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00}, \/\/ U+003C (&lt;) 60\r\n{ 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00}, \/\/ U+003D (=)\r\n{ 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, \/\/ U+003E (&gt;)\r\n{ 0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00}, \/\/ U+003F (?)\r\n{ 0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00}, \/\/ U+0040 (@)\r\n{ 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, \/\/ U+0041 (A)\r\n{ 0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, \/\/ U+0042 (B)\r\n{ 0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, \/\/ U+0043 (C)\r\n{ 0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00}, \/\/ U+0044 (D)\r\n{ 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00}, \/\/ U+0045 (E)\r\n{ 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00}, \/\/ U+0046 (F) 70\r\n{ 0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, \/\/ U+0047 (G)\r\n{ 0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, \/\/ U+0048 (H)\r\n{ 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, \/\/ U+0049 (I)\r\n{ 0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, \/\/ U+004A (J)\r\n{ 0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, \/\/ U+004B (K)\r\n{ 0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, \/\/ U+004C (L)\r\n{ 0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, \/\/ U+004D (M)\r\n{ 0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, \/\/ U+004E (N)\r\n{ 0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, \/\/ U+004F (O)\r\n{ 0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, \/\/ U+0050 (P) 80\r\n{ 0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, \/\/ U+0051 (Q)\r\n{ 0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, \/\/ U+0052 (R)\r\n{ 0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, \/\/ U+0053 (S)\r\n{ 0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, \/\/ U+0054 (T)\r\n{ 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00}, \/\/ U+0055 (U)\r\n{ 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, \/\/ U+0056 (V)\r\n{ 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, \/\/ U+0057 (W)\r\n{ 0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, \/\/ U+0058 (X)\r\n{ 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, \/\/ U+0059 (Y)\r\n{ 0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, \/\/ U+005A (Z) 90\r\n{ 0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00}, \/\/ U+005B ([)\r\n{ 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00}, \/\/ U+005C (\\)\r\n{ 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, \/\/ U+005D (])\r\n{ 0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, \/\/ U+005E (^)\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, \/\/ U+005F (_)\r\n{ 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+0060 (`)\r\n{ 0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00}, \/\/ U+0061 (a)\r\n{ 0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00}, \/\/ U+0062 (b)\r\n{ 0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00}, \/\/ U+0063 (c)\r\n{ 0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00}, \/\/ U+0064 (d) 100\r\n{ 0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00}, \/\/ U+0065 (e)\r\n{ 0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00}, \/\/ U+0066 (f)\r\n{ 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F}, \/\/ U+0067 (g)\r\n{ 0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00}, \/\/ U+0068 (h)\r\n{ 0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, \/\/ U+0069 (i)\r\n{ 0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E}, \/\/ U+006A (j)\r\n{ 0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00}, \/\/ U+006B (k)\r\n{ 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, \/\/ U+006C (l)\r\n{ 0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, \/\/ U+006D (m)\r\n{ 0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00}, \/\/ U+006E (n) 110\r\n{ 0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, \/\/ U+006F (o)\r\n{ 0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F}, \/\/ U+0070 (p)\r\n{ 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78}, \/\/ U+0071 (q)\r\n{ 0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00}, \/\/ U+0072 (r)\r\n{ 0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00}, \/\/ U+0073 (s)\r\n{ 0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, \/\/ U+0074 (t)\r\n{ 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00}, \/\/ U+0075 (u)\r\n{ 0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, \/\/ U+0076 (v)\r\n{ 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00}, \/\/ U+0077 (w)\r\n{ 0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00}, \/\/ U+0078 (x) 120\r\n{ 0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F}, \/\/ U+0079 (y)\r\n{ 0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00}, \/\/ U+007A (z)\r\n{ 0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, \/\/ U+007B ({)\r\n{ 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, \/\/ U+007C (|)\r\n{ 0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, \/\/ U+007D (})\r\n{ 0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, \/\/ U+007E (~)\r\n{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} \/\/ U+007F 127\r\n};\r\n\r\n\/*\r\n* Per capire come funziona l'array cui sopra, basta prendere la definizione\r\n* di un carattere, la \"A\" (ad esempio) e convertire i valori esadecimali in\r\n* valori binari a 8 bit:\r\n*\r\n* { 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, \/\/ U+0041 (A)\r\n*\r\n* 0x0C = 0 0 0 0 1 1 0 0\r\n* 0x1E = 0 0 0 1 1 1 1 0\r\n* 0x33 = 0 0 1 1 0 0 1 1\r\n* 0x33 = 0 0 1 1 0 0 1 1\r\n* 0x3F = 0 0 1 1 1 1 1 1\r\n* 0x33 = 0 0 1 1 0 0 1 1\r\n* 0x33 = 0 0 1 1 0 0 1 1\r\n* 0x00 = 0 0 0 0 0 0 0 0\r\n*\r\n* Dopodich\u00e8 lo 0 \u00e8 uno spazio (LED spento) e 1 un punto (LED acceso); cos\u00ec\r\n* si capisce meglio:\r\n*\r\n* 0x0C = X X\r\n* 0x1E = X X X X\r\n* 0x33 = X X X X\r\n* 0x33 = X X X X\r\n* 0x3F = X X X X X X\r\n* 0x33 = X X X X\r\n* 0x33 = X X X X\r\n* 0x00 =\r\n*\r\n*\/\r\n\r\n\/*\r\n********************************************************************************\r\n* Vengono definite alcune funzioni che possono risultare utili per operare sulla\r\n* matrice.\r\n********************************************************************************\r\n*\/\r\n\/*\r\n********************************************************************************\r\n* Accende tutte le righe.\r\n*\/\r\nvoid SetHighAllRows() {\r\nfor (int i = 1; i &lt;= 8; i++) {\r\ndigitalWrite(ciRow[i], HIGH);\r\n}\r\n}\r\n\r\n\/*\r\n********************************************************************************\r\n* Spegne tutte le righe.\r\n*\/\r\nvoid SetLowAllRows() {\r\nfor (int i = 1; i &lt;= 8; i++) {\r\ndigitalWrite(ciRow[i], LOW);\r\n}\r\n}\r\n\r\n\/*\r\n********************************************************************************\r\n* Spegne tutte le colonne usando \"iExclude\" uguale a 0.\r\n* Se ha un valore diverso da 0, la relativa colonna, non viene spenta.\r\n*\/\r\nvoid SetHighAllCols(int iExclude = 0) {\r\nfor (int i = 1; i &lt;= 8; i++) {\r\nif (!iExclude || iExclude != i)\r\ndigitalWrite(ciCol[i], HIGH);\r\n}\r\n}\r\n\r\n\/*\r\n********************************************************************************\r\n* Accende tutte le colonne usando \"iExclude\" uguale a 0.\r\n* Se ha un valore diverso da 0, la relativa colonna, non viene accesa.\r\n*\/\r\nvoid SetLowAllCols(int iExclude = 0) {\r\nfor (int i = 1; i &lt;= 8; i++) {\r\nif (!iExclude || iExclude != i)\r\ndigitalWrite(ciCol[i], LOW);\r\n}\r\n}\r\n\r\n\/*\r\n********************************************************************************\r\n* Esegue una pausa mentre controlla che non sia stato premuto il pulsante.\r\n* Se e' stato premuto, la pause viene prolungata al valore impostato.\r\n*\/\r\nvoid CheckPause() {\r\nint iReadButton = analogRead(A5);\r\n\r\nwhile (iReadButton &gt; 0) {\r\nSerial.print(\"PAUSA di \" + String(clTimerPause \/ 1000) + \" secondi....\");\r\ndelay(clTimerPause);\r\nSerial.println(\" finita, si riparte !\");\r\niReadButton = analogRead(A5);\r\n}\r\n\r\ndelay(DEFAULT_DELAY);\r\n}\r\n\r\n\/*\r\n********************************************************************************\r\n* Accende o Spegne un singolo LED della matrice, in base alla riga, colonna e il\r\n* flag booleano.\r\n*\/\r\nvoid DisplayPixel(int iRow, int iCol, bool bShow = true) {\r\nif (bShow == true) {\r\ndigitalWrite(ciRow[iRow], HIGH);\r\nSetHighAllCols(iCol);\r\n} else {\r\ndigitalWrite(ciRow[iRow], LOW);\r\nSetLowAllCols(iCol);\r\n}\r\n}\r\n\r\n\/*\r\n********************************************************************************\r\n* Visualizza un singolo carattere, passato come parametro e formato da una\r\n* matrice di 8 x 8 bit.\r\n*\/\r\nvoid RenderChar(unsigned char *bitmap) {\r\nint iMask = 0; \/\/ Numero utilizzato come flag\r\nbool bShowRow = false; \/\/ Booleano che determina se la riga deve essere accesa\r\n\r\nfor (int r = 0; r &lt; 8; r++) { \/\/ Esegue un ciclo per ogni riga\r\nfor (int c = 0; c &lt; 8; c++) { \/\/ Esegue un ciclo per ogni colonna\r\n\/* Lo scopo \u00e8 quello di determinare se la colonna presa in esame deve\r\n* essere accesa.\r\n*\r\n* bitmap[r] contiene il byte che rappresenta la riga \"r\" del carattere\r\n* da visualizzare, composto da un numero binario a 8 bit.\r\n* Questi 8 bit vengono \"spostati verso destra\" della quantit\u00e0 \"c\" che,\r\n* inizialmente, vale 0 (quindi nessun spostamento all'inizio).\r\n* Dopodich\u00e9 viene eseguita un'operazione logica AND (&amp;) con il valore\r\n* esadecimale 0x1 che corrisponde a 1 decimale e 00000001 in binario.\r\n*\r\n* Dato che l'operatore AND lavora in questo modo (sui numeri binari):\r\n* 0 &amp; 0 = 0\r\n* 1 &amp; 0 = 0\r\n* 1 &amp; 1 = 1\r\n*\r\n* il numero binario rappresentato da bitmap[r] far\u00e0 quindi assumere\r\n* alla variabile iMask il valore 0 se l'ultimo bit \u00e8 0 e 1 se l'ultimo\r\n* bit \u00e8 1.\r\n*\r\n* Ad esempio, se bitmap[r] vale \"10010010\" abbiamo che:\r\n* 10010010 &amp;\r\n* 00000001 =\r\n* 00000000\r\n* Mentre se vale \"10010011\" abbiamo che:\r\n* 10010011 &amp;\r\n* 00000001 =\r\n* 00000001\r\n*\r\n* Lo spostamento binario tramite \"&gt;&gt;\" di \"c\" posti serve per analizzare\r\n* tutti i bit delle 8 colonne della riga analizzata. \"c\" infatti varia da\r\n* 0 a 7.\r\n*\r\n* Se, ad esempio, bitmap[r] vale \"10010010\", quando viene eseguito\r\n* \"&gt;&gt; 7\" si ottiene \"00000001\" perch\u00e9 l' 1 che stava all'inizio \u00e8 stato\r\n* spostato 7 volte verso destra e i valori che c'erano prima rimpiazzati\r\n* da 0.\r\n*\r\n*\/\r\niMask = (bitmap[r] &gt;&gt; c)&amp;(0x1);\r\n\r\nif (iMask) {\r\nSerial.print(\" X \");\r\n} else {\r\nSerial.print(\" \");\r\n}\r\n}\r\nSerial.println(\"\");\r\n}\r\nSerial.println(\"\");\r\n\r\nfor (int t = 0; t &lt; REPEAT_CHAR || analogRead(A5) &gt; 0; t++) {\r\nfor (int r = 0; r &lt; 8; r++) {\r\nbShowRow = false;\r\nSetLowAllRows(); \/\/ Tutte le righe spente\r\nSetHighAllCols(); \/\/ Tutte le colonne \"spente\"\r\n\r\nfor (int c = 0; c &lt; 8; c++) {\r\niMask = (bitmap[r] &gt;&gt; c)&amp;(0x1);\r\n\r\nif (iMask) { \/\/ Colonna da accendere\r\nif (bShowRow == false) {\r\n\/* Nel momento in cui una colonna risulta da accendere,\r\n* bisogna necessariamente accendere tutta la riga,\r\n* che altrimenti resta spenta per migliorare la qualit\u00e0\r\n* del numero visualizzato.\r\n*\r\n*\/\r\nbShowRow = true;\r\ndigitalWrite(ciRow[r+1], HIGH);\r\n}\r\n\r\ndigitalWrite(ciCol[c+1], LOW);\r\n} else {\r\n\/\/ Colonna da spegnere.\r\ndigitalWrite(ciCol[c+1], HIGH);\r\n}\r\n}\r\n}\r\n\r\nSetLowAllRows(); \/\/ Tutte le righe spente\r\nSetHighAllCols(); \/\/ Tutte le colonne \"spente\"\r\n}\r\n}\r\n\r\n\/*\r\n********************************************************************************\r\n*\/\r\nvoid setup() {\r\n\/\/ Inizializza le porte di output\r\nfor (int i = PIN_MIN; i &lt;= PIN_MAX; i++) {\r\n\/* Imposta i vari PIN come output.\r\n*\/\r\npinMode(ciMatrix_Arduino[i], OUTPUT);\r\n}\r\nSetLowAllRows(); \/\/ Tutte le righe spente\r\nSetHighAllCols(); \/\/ Tutte le colonne \"spente\"\r\n\r\nSerial.begin(9600); \/\/ Inizializza la seriale\r\n}\r\n\r\nvoid loop() {\r\n\/* Crea una tabella di 94 caratteri contenente i caratteri ASCII che vanno\r\n* dal codice 32 al 126.\r\n*\r\n* Per vedere la corrispondenza, fare affidamento alla dichiarazione della\r\n* variabile array font8x8_basic .\r\n*\/\r\nunsigned char *bitmap[95];\r\nfor (int l = 0; l &lt; 94; l++) {\r\nbitmap[l] = font8x8_basic[l + 32];\r\n}\r\nbitmap[94] = 0;\r\n\r\nSerial.println(\"PARTENZA.\");\r\n\/* Il ciclo \u00e8 costruito per stampare al massimo MAX_INT caratteri e fermarsi\r\n* quando incontra che \"bitmap\" vale 0.\r\n*\/\r\nfor (int i = 0; i &lt; MAX_INT; i++) {\r\nif (bitmap[i] == 0)\r\nbreak;\r\n\r\n\/\/ Visualizza il carattere.\r\nRenderChar(bitmap[i]);\r\n}\r\n\r\n\/\/ Esegue una pausa prima di ripartire.\r\ndelay(DEFAULT_DELAY);\r\nSerial.println(\"RESET: Si riparte !\");\r\n}\r\n<\/code><\/pre>\n<p>Infine il video che ho caricato su YouTube dove si vede tutto in funzione:<\/p>\n<iframe width='425' height='344' src='\/\/www.youtube.com\/embed\/CENjWUdTTLQ?autoplay=0&loop=0&rel=0' frameborder='0' allowfullscreen><\/iframe>\n<p>Spero che a qualcuno sia d&#8217;aiuto. Se avete dubbi, chiedete pure: sono un\u00a0<em>niubbo ma forse una mano riesco a darla<\/em>.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dopo il Sensore di Fiamma mi sono cimentato con la Matrice di LED 1588BS. Ho tribolato parecchio perch\u00e9 non capivo il funzionamento. Le difficolt\u00e0 per un principiante &#8211; come me &#8211; sono le seguenti: La matrice \u00e8 composta da 64 LED disposti in 8 righe da 8 colonne (8&#215;8 = 64) Nella parte inferiore presenta &hellip; <a href=\"https:\/\/www.budus.it\/Blog\/kit-kuman-arduino-uno-r3-dot-matrix\/\" class=\"more-link\">Leggi tutto<span class=\"screen-reader-text\"> &#8220;Kit Kuman Arduino UNO R3- Dot Matrix&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[57,245],"tags":[246,247],"class_list":["post-989","post","type-post","status-publish","format-standard","hentry","category-development","category-elettronica","tag-arduino","tag-kuman"],"_links":{"self":[{"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/posts\/989","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/comments?post=989"}],"version-history":[{"count":6,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/posts\/989\/revisions"}],"predecessor-version":[{"id":996,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/posts\/989\/revisions\/996"}],"wp:attachment":[{"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/media?parent=989"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/categories?post=989"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/tags?post=989"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}