Пытаюсь написать код используя примеры. Задача - принять пакет данных с шины CAN и выполнить условие. С нынешним кодом, при посылке 1 зажигаю светодиод. Но он не выключается даже если пакеты перестают поступать, разрываю шину а светодиод продолжает гореть. Выключить можно если только активирую условие с подачей 0. Помогите пожалуйста поправить скетч.
void setup()
{
pinMode(7,OUTPUT);
Serial.begin(9600);
SPI.begin(); //Begins SPI communication
mcp2515.reset();
mcp2515.setBitrate(CAN_500KBPS,MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz
mcp2515.setNormalMode();
}
void loop() {
int a;
if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK)
{
if (canMsg.can_id == 0x083)
{
a = canMsg.data[0];
}
}
if(a == 0)
{
digitalWrite(7,LOW);
}
if(a == 1)
{
digitalWrite(7,HIGH);
}else { //no can message
digitalWrite(7,LOW);
}
}
Использование такой переменной до присваивания значения является неопределенным поведением (UB), что может привести к непредсказуемой работе программы.
Не могли бы Вы подсказать пример, где используется это? Я пробовал исключить из скетча присваивание переменной a 0 для выключения, оставив только включение. Не помогло.
Вам же вроде бы как раз надо, чтобы он выключался (кстати, при каких условиях Вы хотите, чтобы он выключался), зачем убирать(!) “присвоение переменной a 0 для выключения”?