Aiutino, comunicazione seriale!!

Ciao ragazzi! :smiley:
ho realizzato uno sketch che permette di controllare i colori di una matrice di 16 led RGB ( 4x 4) (con le masse controllate da 4 bjt)
funziona, per configurare i led, bisogna regolare i valori binari dei 3 array 2D (matrici), uno per ogni colore!

Il mio lavoro ora, consiste nel fare in modo che quei valori negli array vengano cambiati in tempo reale tramite seriale, quindi per poterli

int ledGND[] = {10,11,12,13};
int red[] = {17,16,15,14};
int green[] = {2,3,4,5};
int blue[] = {6,7,8,9};
int n = 0;
int n2 = 0;

byte REDvalue[4][4] = {
{HIGH,LOW,LOW,HIGH},
{LOW,HIGH,HIGH,LOW},
{LOW,HIGH,HIGH,LOW},
{HIGH,LOW,LOW,HIGH}
};

byte GREENvalue[4][4] = {
{LOW,HIGH,HIGH,LOW},
{LOW,LOW,LOW,LOW},
{LOW,LOW,LOW,LOW},
{LOW,HIGH,HIGH,LOW}
};
byte BLUEvalue[4][4] = {
{LOW,LOW,LOW,LOW},
{HIGH,LOW,LOW,HIGH},
{HIGH,LOW,LOW,HIGH},
{LOW,LOW,LOW,LOW}
};

// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
for (int thisPin = 0; thisPin < 4; thisPin++) {
pinMode(ledGND[thisPin], OUTPUT);
}
for (int thisPin = 0; thisPin < 4; thisPin++) {
pinMode(red[thisPin], OUTPUT);
}
for (int thisPin = 0; thisPin < 4; thisPin++) {
pinMode(green[thisPin], OUTPUT);
}
for (int thisPin = 0; thisPin < 4; thisPin++) {
pinMode(blue[thisPin], OUTPUT);
}
Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
for(n2=0; n2<4; n2++){
digitalWrite(ledGND[n2], HIGH);
for(n=0; n<4; n++) {
digitalWrite(red[n],REDvalue[n2][n]);
digitalWrite(green[n], GREENvalue[n2][n]);
digitalWrite(blue[n], BLUEvalue[n2][n]);
//delay(500);
//digitalWrite(green[n], LOW);
}
// turn the LED off by making the vol // wait for a second
delayMicroseconds(500);
digitalWrite(ledGND[n2], LOW);

digitalWrite(red[0], LOW);
digitalWrite(red[1], LOW);
digitalWrite(red[2], LOW);
digitalWrite(red[3], LOW);

digitalWrite(green[0], LOW);
digitalWrite(green[1], LOW);
digitalWrite(green[2], LOW);
digitalWrite(green[3], LOW);

digitalWrite(blue[0], LOW);
digitalWrite(blue[1], LOW);
digitalWrite(blue[2], LOW);
digitalWrite(blue[3], LOW);
}
}

Grazie :slight_smile:

gli appunti, qua e la non centrano, sono provenienti da un vecchio sketch da cui ho preso alcuni algoritmi

Dovresti studiarti la libreria Serial ed i metodi che mette a disposizione per l'invio e la ricezione dei dati:

Ricordati che i dati viaggiano in forma binaria per cui se spedisci una stringa "100" essa arriverà scomposta in "1", "0", "0" mentre se spedisci il byte 100 esso arriverà come singolo byte.
Per capire questo ti consiglio una ricerca sul forum, la trasmissione dei dati è un argomento di discussione ricorrente e ripetere quello che è stato scritto in centinaia di posta sarebbe sfiancante :sweat_smile:

Ti inserisco una funzione di uno sketch.

void CheckSerial(void){ 
 if(Serial.available() >0) 
 { 
   switch (Serial.read()){ 

   case 'A': 
     digitalWrite(moton, HIGH); 
     delay(1000); 
     digitalWrite(moton, LOW); 
     break; 

   case 'B': 
     digitalWrite(motoff, HIGH); 
     delay(1000); 
     digitalWrite(motoff, LOW); 
     break; 

   case 'C': 
     digitalWrite(aumenta, HIGH); 
     delay(1000); 
     digitalWrite(aumenta, LOW); 
     break; 

   case 'D': 
     digitalWrite(diminuisci, HIGH); 
     delay(1000); 
     digitalWrite(diminuisci, LOW); 
     break; 

   default: 
     break; 
   } 
 }

Analisi Codice:

if(Serial.available() >0) 
 { 


...

}

Legge quello che viene dalla seriale.Il resto del codice è l'utilizzo che ho fatto di ciò che mi veniva dalla seriale ma tu puoi inserire quel che vuoi

Grazie, domani provo :slight_smile: