Go Down

Topic: Duvida para ler uma trama (Read 2 times) previous topic - next topic

tretas

Boas,

penso que percebi em parte de onde vem o problema

Code: [Select]
if (temp == 0xbb)//Comprova que recebeste o startByte e estas pronto para receber os restantes 17 bytes, o que tens de esperar que eles entrem no buffer da Serial Port

para que o teste seja verdadeiro tenho que meter 0xBB em decimal
Code: [Select]

if (temp == 187)//Comprova que recebeste o startByte e estas pronto para receber os restantes 17 bytes, o que tens de esperar que eles entrem no buffer da Serial Port


Agora a pergunta é como é que posso ler os dados em hex directamente da porta COM com o Serial.read()
Arduino Mega 2560
Arduino Nano
Arduino UNO Rev3
Raspberry PI Model B
EasyPIC v4

bubulindo

#11
Feb 10, 2013, 06:16 pm Last Edit: Feb 10, 2013, 06:37 pm by bubulindo Reason: 1
isso não importa... para o arduino os dados serão sempre binários. Hex, ou decimal ou octal ou binario é como te dá mais jeito a ti ver.

queres explicar o que é a carta de entrada\saida que estás a usar para ver se conseguimos ajudar mais?

Isto:

Code: [Select]
if (temp == 0xbb)//

é igual a isto:

Code: [Select]
if (temp == 187)//
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

tretas

#12
Feb 11, 2013, 07:13 pm Last Edit: Feb 11, 2013, 07:17 pm by tretas Reason: 1
Boas,

Quote

isso não importa... para o arduino os dados serão sempre binários. Hex, ou decimal ou octal ou binario é como te dá mais jeito a ti ver.

queres explicar o que é a carta de entrada\saida que estás a usar para ver se conseguimos ajudar mais?

Isto:

Code:
if (temp == 0xbb)//

é igual a isto:

Code:
if (temp == 187)//



o problema é que

Code: [Select]

if (temp == 187)//Comprova que recebeste o startByte e estas pronto para receber os restantes 17 bytes, o que tens de esperar que eles entrem no buffer da Serial Port
       {
         rx_trama[0]=187 ;
         Serial.print("DEBUG - entrou\n\r ");  
         
        while(Serial.available() <16);//Espera pelos 17 bytes restantes, nao sai desta linha ate que eles entrem
           
            for(uint8_t i = 1; i<= 17; i++)
            {
             rx_trama[i] = Serial.read();//Carrega os bytes para cada posiçao no vector
             Serial.print (" DEBUG - rx_trama");
             Serial.print (rx_trama[i]);
            }
       }


Se não meter  if (temp == 187) na vez de  if (temp == 0xBB) nunca obtenho o print "debug - entrou" ... logo tem que haver algo ... será porque a tabela rx_trama estar declarada como char ?

PS : E carta E/S funciona bem pois com ligo direcetamente a uma porta COM do pc e recebo a trama como deve ser

Cpts

ZÉ tretas
Arduino Mega 2560
Arduino Nano
Arduino UNO Rev3
Raspberry PI Model B
EasyPIC v4

HugoPT

#13
Feb 12, 2013, 12:15 am Last Edit: Feb 12, 2013, 12:21 am by HugoPT Reason: 1
Code: [Select]

char a = 65; //Teste a variavel a

void setup()
{                
Serial.begin(9600);  
}
void loop()
{
if(a == 'a')Serial.println("Variavel a e igual ao carater a"); //este If nao e corrido por ser falso por estar a comparar o valor de a (65) ao CARACTER e nao ao seu valor
if(a == 65)Serial.println("Variavel a e igual a 65"); //este IF é corrido por ser verdadeiro
if(a == 0x41)Serial.println("Variavel a e igual a 0x41");//este IF tambem é corrido por ser verdadeiro
delay(2000);
}

Porque nao tentas carregar os 18 bytes para um array apenas uma vez e depois olhares para ver o que la tens dentro de cada elemento.
Depois para veres o que esta dentro de cada elemento usas
Code: [Select]
Serial.print(rxBuffer[n_elemento],HEX);
Desta forma ira ser imprimido na porta serie nao em caracteres mas em codigo hexadecimal para teres a certeza com o que estas a lidar
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

tretas

#14
Feb 12, 2013, 08:07 pm Last Edit: Feb 12, 2013, 08:09 pm by tretas Reason: 1
Boas,

Code: [Select]


byte tabela_rx_trama[18] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};


byte rx_trama (byte *trama)
{
byte cpt = 0;

     if (Serial.available() > 17 )
      {
         
           for (cpt = 0; cpt < 18; cpt ++ )
            {
              trama[cpt] = Serial.read();
            }
           
         trame_OK = true;
         return 1;
      }
     
}
}


Com a vossa ajuda este código esta a funcionar ... penso que o erro era estar a usar uma array de char ... na vez de uma de bytes

Cpts

Zé tretas
Arduino Mega 2560
Arduino Nano
Arduino UNO Rev3
Raspberry PI Model B
EasyPIC v4

Go Up