Boa Tarde pessoal,

Tenho um módulo veicular que faz envio de informações utilizando protocolo CAN, Estou com dificuldade em receber uma mensagem que está sendo enviada com 16 bits. 

Acredito que o protocolo CAN envie somente 8 bits por pacote, então caso o valor de 1.3 fosse enviado, acredito que eu devesse receber um byte contendo 1 e o outro contendo 3, porém ao invés disso, estou recebendo sempre 1 e 0. Alguém que já realizou uma comunicação parecida poderia me ajudar? 

Mensagem que eu recebo : 102 1 0 39 69 0 0 0
Mensagem que eu acho que deveria receber: 102 1 3 39 69 0 0 0

Meu código:

#include <ESP32CAN.h>
#include <CAN_config.h>
#include <driver/can.h>
/* the variable name CAN_cfg is fixed, do not change */
CAN_device_t CAN_cfg;

void setup() {
Serial.begin(115200);
Serial.println("iotsharing.com CAN demo");
/* set CAN pins and baudrate */
CAN_cfg.speed=CAN_SPEED_250KBPS;
CAN_cfg.tx_pin_id = GPIO_NUM_5;
CAN_cfg.rx_pin_id = GPIO_NUM_4;
/* create a queue for CAN receiving */
CAN_cfg.rx_queue = xQueueCreate(10,sizeof(CAN_frame_t));
//initialize CAN Module
ESP32Can.CANInit();
}

void loop() {
CAN_frame_t rx_frame;
can_message_t message;
//receive next CAN frame from queue
if(xQueueReceive(CAN_cfg.rx_queue,&rx_frame, 3*portTICK_PERIOD_MS)==pdTRUE){

//do stuff!
if(rx_frame.FIR.B.FF==CAN_frame_std)
printf("New standard frame");
else
printf("New extended frame");

if(rx_frame.FIR.B.RTR==CAN_RTR)
printf(" RTR from 0x%08x, DLC %d\r\n",rx_frame.MsgID, rx_frame.FIR.B.DLC);
else{
printf(" from 0x%08x, DLC %d\n",rx_frame.MsgID, rx_frame.FIR.B.DLC);
for(int i = 0; i < 8; i++){
printf("%d\t", rx_frame.data.u8);

}


}
}

}

Exibições: 2637

Responder esta

Respostas a este tópico

Boa noite GDP,

recomendo que V leia Sugestão,

em seguida remva o código que postou na área de texto do seu tópico, e o anexe um arquivo

contendo o código.

RV

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço