PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Общение с машиной (http://pccar.ru/forumdisplay.php?f=14)
-   -   Arduino+CANBUS Shield (http://pccar.ru/showthread.php?t=23221)

ganson 25.09.2018 01:18

Вот, навоял. Реагирует на изменения двух байт
void can()
{
if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) {
if (canMsg.can_id == 0x32A) {
if (canMsg.data[1] == 0x02 && canMsg.data[2] == 0x10) {
Serial.println("Press Vol Up");
digitalWrite(vol_up, HIGH);
}
else{
Serial.println("Unpress Vol Up");
digitalWrite(vol_up, LOW);
}
if (canMsg.data[1] == 0x03 && canMsg.data[2] == 0x20) {
Serial.println("Press Vol Down");
digitalWrite(vol_down, HIGH);
}
else{
Serial.println("Unpress Vol Down");
digitalWrite(vol_down, LOW);
}


}
}
}
На = в дате ругалась, пока не написал ==. И при id = 32A отключало порты от любого сообщения в шине. А если id==32A, то отключает от сообщения с id 32A и датой отличной от прописанной на порты. Правильно вроде получилось написать ?

T_r_D 25.09.2018 17:26

Да, всё ок.
Яж с телефона пишу, синтаксис не особо проверяю, просто общий смысл доношу.
Да и Arduino IDE не запускал 100 лет.
Я STM32 в СubeMx и IAR пилю.

И ни чего ни кто не отключает. :)
Сообщение если пришло, то оно хранится в буфере. А вот что с ним делать решать тебе.

Ты задал условие что если id отличается от 0х32А, то внутрь условия не заходить, а внутри этого условия ещё условия которые проверяют содержимое пришедшего пакета.

PS. Кстати из за того, что в Ардуино нельзя задать нормальные фильтры аппаратные на CAN, то бедной атмеге с 12 мегагерцами приходится жрать всё то, что валится из CAN и переваривать это.
Черевато пропусками пакетов. И я даже скажу с уверенностью и проверкой опытным путём что они пропадают! У меня в машине до сих пор Ардуино трудится, уже лет 5 наверное... Ни как на stm не поменяю.
И очень короткие нажатия на кнопки она теряет...

ganson 25.09.2018 23:14

Ещё раз спасибо за помощь, завтра в машине уже проверю. STM понравился, делал как то диктофон на нём. Не дорогой, запустилось с первого тычка, отлично работает. Но я больше "паяльщик" и ремонтник, в программах - в ардуино чужой скетч мозгов не хватило поправить. Открыл похожий проект на STM, посмотреть на предмет поправить под себя, посмотрел и закрыл...

T_r_D 26.09.2018 02:11

Ну не знаю...
Для стм и обвес проще, всего одна микруха трансиверы и если в фильтры не лезть, то только тайминги для can посчитать правильно в кубе...
А вот в коде будет примерно тоже количество строк, но процедура будет вызываться только по приходу пакета. А если настроить фильтры аппаратные, так вообще красота.

Но если скорость не нужна и нужна простота кода и доступность библиотек разных, то тут Ардуино более подходит...
А если есть силы и желание разобраться, то СТМ окупит затраты с лихвой.

НСО154 01.10.2018 10:39

Цитата:

Сообщение от T_r_D (Сообщение 405496)
И очень короткие нажатия на кнопки она теряет...

Скетч твой можно посмотреть, тоже столкнулся с такой проблемой.
Но у меня скорее всего проблемка из за функции "delay", "рубит" работу контроллера, и естественно теряет данные, которые продолжают течь по com.

T_r_D 01.10.2018 11:26

Да такой же как и на этой странице выше.
Делеев нету и в коде их быть не должно!
Совсем не должно!
Нужно пользоваться таймером.

НСО154 01.10.2018 11:31

Цитата:

Сообщение от T_r_D (Сообщение 405599)
Да такой же как и на этой странице выше.
Делеев нету и в коде их быть не должно!
Совсем не должно!
Нужно пользоваться таймером.

Ну вот и развеял мои сомнения, перепишу.

T_r_D 02.10.2018 00:24

По слову millis ищи примеры.

Но если в шине идёт активный обмен пакетами, то даже избавление от делея не до конца спасёт.
Ну не способна ардуина на 12 мегагерцах выступать программным фильтром да ещё и что-то делать при этом. Если конечно код включает только слежение за кнопками, то может и нормально будет...

НСО154 02.10.2018 08:15

Функция Millis решила вопрос, данные стабильно считываются, все ок)
Пишут есть ещё лучше библиотеки https://smartmodules.ru/timerone-arduino, что меньше кода-это факт, а на сколько лучше...надо тестить.

T_r_D 03.10.2018 01:09

Ни на сколько.
Просто удобнее.
Но если там есть хоть какие глюки, то они будут и у тебя в проекте.
И за все удобства придётся платить скоростью и памятью.

Да и можно вообще без библиотек всяких просто читая параметры регистров таймера атмеги.
В общем этим библиотеки и занимаются...


Часовой пояс GMT +4, время: 10:05.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot