Ricevere via Seriale tutte le variabili Booleane di 3 Array Bidimensionali!

Ciao Ragazzi, sto cercando di escogitare un metodo per ricevere continuamente, via seriale, i valori di 3 Array bidimensionali:

boolean REDvalue[4][4] = {
  {true,true,true,true},
  {true,true,true,true},
  {false,false,false,false},
  {true,true,true,true}
};

boolean GREENvalue[4][4] = {
  {true,true,true,true},
  {false,false,false,false},
  {true,true,true,true},
  {true,true,true,true}
};
boolean BLUEvalue[4][4] = {
  {false,false,false,false},
  {true,true,true,true},
  {true,true,true,true},
  {true,true,true,true}
};

Vorrei fare in modo di ricevere in continuazione, via seriale, tutti i valori di quegli array binari (booleani),

un idea ce l'avrei, usare un 3 cicli for che da 0 a 3, mettano ti valori di ogni fila dell'array, assegnandoli al valore serial read:

void loop() {

  // send data only when you receive data:
  if (Serial.available() > 0) {

    for(n2=0; n2<4; n2++){
      for(n=0; n<4; n++) {
        REDvalue[n2][n] = Serial.read();
      }
    }

    for(n2=0; n2<4; n2++){
      for(n=0; n<4; n++) {
        BLUEvalue[n2][n] = Serial.read();
      }
    }

    for(n2=0; n2<4; n2++){
      for(n=0; n<4; n++) {
        GREENvalue[n2][n] = Serial.read();
      }
    }
  }
}

Non l'ho ancora provato, prima devo creare un programma in c++ che controlli quelle variabili dal pc, comunque, in teoria dovrebbe funzionare, però non so come faccia a riconoscere quale dei valori inviati dal computer sia quello giusto, e che quindi magari riceva valori sfasati, e non sincronizzati, che dite?

Grazie :smiley:

Usa un piccolo protocollo. Metti un byte di start e uno di stop per racchiudere i valori tra 2 estremi, poi puoi usare anche un piccolo checksum come CRC16/32:
http://arduino.cc/forum/index.php/topic,161221.0.html

O mio Dio, che stupido! E dire che studio a scuola Telecomunicazioni
Ho appena studiato i protocolli, come l'xmodem, e tanti altri!
Oltre ai protocolli, conosco anche i codici , come il crc, il codice di paritá ed il codice di maggioranza, effettivamente ci avevo pensato, ma mi ero chiesto se nella libreria seriale dell'arduino, ci fosse giá un protocollo software per la correzione dei bit errati, grazie!.

Che io sappia nell lib di Arduino non c'è nessuna funzione per il controllo dei byte errati.

Oook, sai darmi un esempio di utilizzo di bit di start o di stop, oppure nell'utilizzo di un protocollo sincrono (per velocizzare)?
Magari un tuo vecchio skatch :slight_smile:

Se vuoi trasferite i dati in blocco ti può essere utile la librerie EasyTransfer (GitHub - madsci1016/Arduino-EasyTransfer: An Easy way to Transfer data between Arduinos)
Si tratta di creare una struttura dati che viene trasferita tra 2 Arduino. --> EasyTransfer Arduino Library « The Mind of Bill Porter

Ook! Grazie, ma non credo funzioni anche fra arduino e.pc!

Fra Arduino e PC, no.

Ok, sto cercando di creare un sistema con bit di start e bit di stop, come il protocollo XON e XOFF, comelo fareste voi?

Elius94:
Ok, sto cercando di creare un sistema con bit di start e bit di stop, come il protocollo XON e XOFF, comelo fareste voi?

Stai facendo un sacco di confusione tra protocollo di trasmissione, protocolo uart e handshake, l'UART gestisce in hardware la trasmissione del byte con tanto di relativi bit di start e stop, XON e XOFF sono due fossili dell'era passata, si usavano al posto del handshake hardware, e sono stati pensionati da molti anni.
Quello che a te serve è un protocollo trasmissione dati, ne esistono tanti più o meno complessi e sicuri a seconda di quello che devi fare, prova a cercare modbus e trovi librerie pronte all'uso sia per Arduino che per il PC.

ok, questo l'avevo caito, scusate, mi sono espresso male!
La connessione che dovrei fare, è davvero semplice, quindi ho fatto una cosa del genere! che ne dite?

// send data only when you receive data:
  if (Serial.available() > 0) {
   if (Serial.read() == 0xCD){
    StringComplete = false;
    for(n2=0; n2<4; n2++){
      for(n=0; n<4; n++) {
        REDvalue[n2][n] = Serial.read();
      }
    }

    for(n2=0; n2<4; n2++){
      for(n=0; n<4; n++) {
        BLUEvalue[n2][n] = Serial.read();
      }
    }

    for(n2=0; n2<4; n2++){
      for(n=0; n<4; n++) {
        GREENvalue[n2][n] = Serial.read();
      }
    }
   }
   if (Serial.read() == 0xDC){
   StringComplete = true;
   }
  }

Che ne dite?

usare i tag code per favore

Se ti è funzionale, perché no?