25.09.2018, 01:18 | #241 |
Новый Пользователь
Регистрация: 24.05.2017
Регион: Беларусь
Сообщений: 13
|
Вот, навоял. Реагирует на изменения двух байт
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 и датой отличной от прописанной на порты. Правильно вроде получилось написать ? |
25.09.2018, 17:26 | #242 |
Старший Пользователь
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
|
Да, всё ок.
Яж с телефона пишу, синтаксис не особо проверяю, просто общий смысл доношу. Да и Arduino IDE не запускал 100 лет. Я STM32 в СubeMx и IAR пилю. И ни чего ни кто не отключает. Сообщение если пришло, то оно хранится в буфере. А вот что с ним делать решать тебе. Ты задал условие что если id отличается от 0х32А, то внутрь условия не заходить, а внутри этого условия ещё условия которые проверяют содержимое пришедшего пакета. PS. Кстати из за того, что в Ардуино нельзя задать нормальные фильтры аппаратные на CAN, то бедной атмеге с 12 мегагерцами приходится жрать всё то, что валится из CAN и переваривать это. Черевато пропусками пакетов. И я даже скажу с уверенностью и проверкой опытным путём что они пропадают! У меня в машине до сих пор Ардуино трудится, уже лет 5 наверное... Ни как на stm не поменяю. И очень короткие нажатия на кнопки она теряет... Последний раз редактировалось admin; 28.09.2018 в 21:14. |
25.09.2018, 23:14 | #243 |
Новый Пользователь
Регистрация: 24.05.2017
Регион: Беларусь
Сообщений: 13
|
Ещё раз спасибо за помощь, завтра в машине уже проверю. STM понравился, делал как то диктофон на нём. Не дорогой, запустилось с первого тычка, отлично работает. Но я больше "паяльщик" и ремонтник, в программах - в ардуино чужой скетч мозгов не хватило поправить. Открыл похожий проект на STM, посмотреть на предмет поправить под себя, посмотрел и закрыл...
|
26.09.2018, 02:11 | #244 |
Старший Пользователь
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
|
Ну не знаю...
Для стм и обвес проще, всего одна микруха трансиверы и если в фильтры не лезть, то только тайминги для can посчитать правильно в кубе... А вот в коде будет примерно тоже количество строк, но процедура будет вызываться только по приходу пакета. А если настроить фильтры аппаратные, так вообще красота. Но если скорость не нужна и нужна простота кода и доступность библиотек разных, то тут Ардуино более подходит... А если есть силы и желание разобраться, то СТМ окупит затраты с лихвой. |
01.10.2018, 10:39 | #245 |
Старший Пользователь
Регистрация: 01.01.2014
Возраст: 38
Город: Новосибирск
Регион: 54
Машина: РРС, Форд
Сообщений: 954
|
Скетч твой можно посмотреть, тоже столкнулся с такой проблемой.
Но у меня скорее всего проблемка из за функции "delay", "рубит" работу контроллера, и естественно теряет данные, которые продолжают течь по com.
__________________
Тесла по-русски |
01.10.2018, 11:26 | #246 |
Старший Пользователь
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
|
Да такой же как и на этой странице выше.
Делеев нету и в коде их быть не должно! Совсем не должно! Нужно пользоваться таймером. |
01.10.2018, 11:31 | #247 |
Старший Пользователь
Регистрация: 01.01.2014
Возраст: 38
Город: Новосибирск
Регион: 54
Машина: РРС, Форд
Сообщений: 954
|
Ну вот и развеял мои сомнения, перепишу.
__________________
Тесла по-русски |
02.10.2018, 00:24 | #248 |
Старший Пользователь
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
|
По слову millis ищи примеры.
Но если в шине идёт активный обмен пакетами, то даже избавление от делея не до конца спасёт. Ну не способна ардуина на 12 мегагерцах выступать программным фильтром да ещё и что-то делать при этом. Если конечно код включает только слежение за кнопками, то может и нормально будет... |
02.10.2018, 08:15 | #249 |
Старший Пользователь
Регистрация: 01.01.2014
Возраст: 38
Город: Новосибирск
Регион: 54
Машина: РРС, Форд
Сообщений: 954
|
Функция Millis решила вопрос, данные стабильно считываются, все ок)
Пишут есть ещё лучше библиотеки https://smartmodules.ru/timerone-arduino, что меньше кода-это факт, а на сколько лучше...надо тестить.
__________________
Тесла по-русски |
03.10.2018, 01:09 | #250 |
Старший Пользователь
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
|
Ни на сколько.
Просто удобнее. Но если там есть хоть какие глюки, то они будут и у тебя в проекте. И за все удобства придётся платить скоростью и памятью. Да и можно вообще без библиотек всяких просто читая параметры регистров таймера атмеги. В общем этим библиотеки и занимаются... |
Здесь присутствуют: 2 (пользователей: 0 , гостей: 2) | |
|
|