Can BUS Shield на Arduino Leonardo - не удается инициализировать CAN

Я надеюсь получить помощь в этом, так как я не могу инициализировать CAN.

У меня есть щит Sparkfun Can-Bus: https://www.sparkfun.com/products/13262< /p>

и плату Arduino Leonardo.

Я использую следующий код, чтобы попытаться подключить свою Audi S6 2008 года к плате Arduino:

#include <Canbus.h>
#include <defaults.h>
#include <global.h>
#include <mcp2515.h>
#include <mcp2515_defs.h>
#include <Canbus.h>
char UserInput;
int data;
char buffer[456];  //Данные будут временно сохранены в этом буфере перед записью в файл

//*********************************Цикл настройки************** *******************//

void setup(){
Serial.begin(9600);
while(!Serial);
Serial.println("CAN-Bus Demo");

if(Canbus.init(CANSPEED_500))  /* Initialise MCP2515 CAN controller at the  specified speed */
  {
Serial.println("CAN Init ok");
  } else
  {
    Serial.println("Can't init CAN");
  } 

  delay(1000); 

Serial.println("Please choose a menu option.");
Serial.println("1.Speed");
Serial.println("2.RPM");
Serial.println("3.Throttle");
Serial.println("4.Coolant Temperature");
Serial.println("5.O2 Voltage");
Serial.println("6.MAF Sensor");

}



//*********************************Основной цикл************** *******************//

void loop(){

while(Serial.available()){
   UserInput = Serial.read();

if (UserInput=='1'){
 data=Canbus.ecu_req(VEHICLE_SPEED, buffer);
 Serial.print("Vehicle Speed: ");
 Serial.print(data);
 Serial.println(" km/hr ");
 delay(1000);
}
else if (UserInput=='2'){
 data= Canbus.ecu_req(ENGINE_RPM, buffer);
 Serial.print("Engine RPM: ");
 Serial.print(data);
 Serial.println(" rpm ");
 delay(1000);

}
else if (UserInput=='3'){
 data= Canbus.ecu_req(THROTTLE, buffer);
 Serial.print("Throttle: ");
  Serial.print(data);
 Serial.println(" %% ");
 delay(1000);

}
else if (UserInput=='4'){
 data =Canbus.ecu_req(ENGINE_COOLANT_TEMP, buffer);
 Serial.print("Engine Coolant Temp: ");
 Serial.print(data);
 Serial.println(" degC");
 delay(1000);

}
else if (UserInput=='5'){
 data=Canbus.ecu_req(O2_VOLTAGE, buffer);
 Serial.print("O2 Voltage: ");
 Serial.print(data);
 Serial.println(" V");
 delay(1000);

}
else if (UserInput=='6'){
 data=Canbus.ecu_req(MAF_SENSOR, buffer);
 Serial.print("MAF Sensor: ");
 Serial.print(data);
 Serial.println(" g/s");
 delay(1000);

}
else
{
  Serial.println(UserInput);
  Serial.println("Not a valid input.");
  Serial.println("Please enter a valid option.");
}

}
}

В целом, я просто не могу инициализировать CAN. Я посмотрел в Интернете и просто не могу найти твердое решение. Я пробовал и другие библиотеки, но безрезультатно.

Пожалуйста, помогите!

, 👍1

Обсуждение

Леонардо имеет контакты SPI на заголовке ICSP. Ваш шилд ожидает контакты SPI на контактах 11,12 и 13. Возможно, это поможет: http://www.seeedstudio.com/wiki/CAN-BUS_Shield#How_to_Compatible_With_Arduino_Mega_and_Leonardo, @gre_gor

Я зашел так далеко; Странно то, что даже если я подключу контакты SPI к контактам 11, 12 и 13, это все равно не сработает ... есть ли еще контакты, которые мне нужно подключить?, @calcazar


2 ответа


Лучший ответ:

1

Сталкивался с этой проблемой сам. Нашел, исправил

Измените следующую строку...

_delay_us(10);

К...

_delay_us(50);

В файле MCP2515.c в библиотеке

,

1

Увеличение этой задержки в файле MCP2515.c также решило эту проблему для меня. Я запускаю шилд Sparkfun Can-Bus на Arduino pro-mini, и вот мой последовательный вывод монитора до изменения и после:

12:56:38.580 --> CAN Read — проверка получения сообщения CAN-шины 12:56:39.556 -> Не могу инициализировать CAN 13:01:40.992 -> CAN Read — проверка получения сообщения CAN-шины 13:01:42.016 -> CAN Инициализация в порядке

,