Pages: [1]   Go Down
Author Topic: Ricevere via Seriale tutte le variabili Booleane di 3 Array Bidimensionali!  (Read 373 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 45
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
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:

Code:
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-grin
« Last Edit: April 22, 2013, 12:56:06 am by UweFederer » Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21615
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 45
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!.
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21615
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Offline Offline
Newbie
*
Karma: 0
Posts: 45
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 102
Posts: 6548
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se vuoi trasferite i dati in blocco ti può essere utile la librerie EasyTransfer (https://github.com/madsci1016/Arduino-EasyTransfer)
Si tratta di creare una struttura dati che viene trasferita tra 2 Arduino. --> http://www.billporter.info/2011/05/30/easytransfer-arduino-library/
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 0
Posts: 45
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 102
Posts: 6548
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Fra Arduino e PC, no.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 0
Posts: 45
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 45
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?

 
Code:
// 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
« Last Edit: April 22, 2013, 11:29:22 am by leo72 » Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21615
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Se ti è funzionale, perché no?
Logged


Pages: [1]   Go Up
Jump to: