Преобразование аналогового входа в цифровой для CAN на mbed LPC1768

#can-bus #mbed

#can-bus #mbed

Вопрос:

Мне нужна помощь с кодом для преобразования аналогового входа на mbed LPC1768 в цифровой для использования контроллером CAN.Пример синтаксиса, который я использую

 if(can1.write(CANMessage(1337, amp;counter, 2))) {
..........
}
 

где « counter » — это данные, которые должны быть переданы и определены мной как подписанный int (пример, однако, определяет его как символ). Но я продолжаю получать сообщение об ошибке

 Error: No instance of constructor "mbed::CANMessage::CANMessage" matches the argument list in "project_test.cpp"
 

Синтаксис CANMessage контроллера

 CANMessage(int _id, const char *_data, char _len = 8, CANType _type = CANData, CANFormat _format = CANStandard) {

  len    = _len amp; 0xF;
  type   = _type;
  format = _format;
  id     = _id;
  memcpy(data, _data, _len);
}
 

Я действительно не понимаю синтаксис контроллера и как его применять. Любая помощь в объяснении будет оценена. Спасибо

Ответ №1:

Поскольку CANMessage принимает только char * для параметра данных, вы можете преобразовать значение int со знаком (которое составляет 4 байта) в символ без знака, например:

 unsigned char buf[0x8];
buf[0]=value amp; 0x000000ff;
buf[1]=(value >> 8)  amp; 0x000000ff;
buf[2]=(value >> 16) amp; 0x000000ff;
buf[3]=(value >> 24) amp; 0x000000ff;
 

и затем

 if (can1.write(CANMessage(1337, amp;buf, 8))) {
..........
}