Mi hanno dato un distanziometro laser che comunica con il PC tramite un adattatore, questo:
Ho fatto un programmino in VB net e comunica perfettamente.
Ho poi tolto la schedina e l'ho collegata all'arduino Mega, invio il comando di lettura e poi mi metto in "ascolto" della misura, il sistema funziona ma ogni tanto alcuni byte ritornano errati.
Il comando di lettura lo mando così:
- Codice: Seleziona tutto
byte CmdFastMeasure[] = {0xAA,0x00,0x00,0x20,0x00,0x01,0x00,0x02,0x23};//Cmd lettura
char Cmd;
const int BUFFER_SIZE = 13;
byte Buff[BUFFER_SIZE];
Serial1.write(CmdFastMeasure,9);
La ricezione e stampa a monitor così:
- Codice: Seleziona tutto
if(Serial1.available() > 0) {
Serial1.readBytes(Buff,BUFFER_SIZE);
if (Buff[0]==0xAA){
for( int i=0; i<BUFFER_SIZE; i++ ){
Serial.print(Buff[i],HEX);
Serial.print(" - ");
}
Serial.println("");
for( int i=0; i<BUFFER_SIZE; i++ ){
Serial.print(Buff[i],DEC);
Serial.print(" - ");
}
Serial.println("");
int A = Buff[9];
int B = Buff[8];
int C = Buff[7];
int D = Buff[6];
int Tot = A +(B*256) + (B*256*256) + (A*256*256*256);
Serial.print(Tot);
}
}
I byte 6,7,8,9 contengono la misura che interessa a me ma alcune volte soprattutto il byte 8 ha valore 0 inaspettatamente, alleo alcune misure (la misura che mi aspetto è 5120):
- Codice: Seleziona tutto
AA - 0 - 0 - 22 - 0 - 3 - 0 - 0 - 14 - 0 - 0 - 2 - 8E -
170 - 0 - 0 - 34 - 0 - 3 - 0 - 0 - 20 - 0 - 0 - 2 - 142 -
5120
AA - 0 - 0 - 20 - 0 - 3 - 0 - 0 - 14 - 0 - 0 - 42 - 85 -
170 - 0 - 0 - 32 - 0 - 3 - 0 - 0 - 20 - 0 - 0 - 66 - 133 -
5120
AA - 0 - 0 - 22 - 0 - 3 - 0 - 0 - 15 - 0 - 0 - 32 - 7E -
170 - 0 - 0 - 34 - 0 - 3 - 0 - 0 - 21 - 0 - 0 - 50 - 126 -
5376
AA - 0 - 0 - 0 - 0 - 2 - 0 - 0 - 0 - 8 - 0 - 3F - 81 -
170 - 0 - 0 - 0 - 0 - 2 - 0 - 0 - 0 - 8 - 0 - 63 - 129 -
8
AA - 0 - 0 - 22 - 0 - 3 - 0 - 0 - 14 - 0 - 0 - 30 - 7A -
170 - 0 - 0 - 34 - 0 - 3 - 0 - 0 - 20 - 0 - 0 - 48 - 122 -
5120
AA - 0 - 0 - 0 - 0 - 2 - 0 - 0 - 0 - 8 - 0 - 3B - 78 -
170 - 0 - 0 - 0 - 0 - 2 - 0 - 0 - 0 - 8 - 0 - 59 - 120 -
8
AA - 0 - 0 - 22 - 0 - 3 - 0 - 0 - 14 - 0 - 0 - 30 - 7B -
170 - 0 - 0 - 34 - 0 - 3 - 0 - 0 - 20 - 0 - 0 - 48 - 123 -
5120
AA - 0 - 0 - 22 - 0 - 3 - 0 - 0 - 14 - 0 - 0 - 2 - 85 -
170 - 0 - 0 - 34 - 0 - 3 - 0 - 0 - 20 - 0 - 0 - 2 - 133 -
5120
AA - 0 - 0 - 20 - 0 - 2 - 0 - 0 - 0 - 9 - 0 - 3C - 7E -
170 - 0 - 0 - 32 - 0 - 2 - 0 - 0 - 0 - 9 - 0 - 60 - 126 -
9
AA - 0 - 0 - 20 - 0 - 3 - 0 - 0 - 14 - 0 - 0 - 38 - 7E -
170 - 0 - 0 - 32 - 0 - 3 - 0 - 0 - 20 - 0 - 0 - 56 - 126 -
5120
AA - 0 - 0 - 22 - 0 - 3 - 0 - 0 - 14 - 0 - 0 - 38 - 80 -
170 - 0 - 0 - 34 - 0 - 3 - 0 - 0 - 20 - 0 - 0 - 56 - 128 -
5120
Con l'adattatore USB la misura era molto più stabile, sbaglio qualcosa io nel programma o serve qualcosa di hardware? magari delle resistenze di pull/up o pull/down sui fili della seriale?