![]() |
![]() |
#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 и датой отличной от прописанной на порты. Правильно вроде получилось написать ? |
![]() |
![]() |
![]() |
#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. |
![]() |
![]() |
![]() |
#243 |
Новый Пользователь
![]() Регистрация: 24.05.2017
Регион: Беларусь
Сообщений: 13
![]() |
![]() Ещё раз спасибо за помощь, завтра в машине уже проверю. STM понравился, делал как то диктофон на нём. Не дорогой, запустилось с первого тычка, отлично работает. Но я больше "паяльщик" и ремонтник, в программах - в ардуино чужой скетч мозгов не хватило поправить. Открыл похожий проект на STM, посмотреть на предмет поправить под себя, посмотрел и закрыл...
|
![]() |
![]() |
![]() |
#244 |
Старший Пользователь
![]() Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
![]() ![]() ![]() |
![]() Ну не знаю...
Для стм и обвес проще, всего одна микруха трансиверы и если в фильтры не лезть, то только тайминги для can посчитать правильно в кубе... А вот в коде будет примерно тоже количество строк, но процедура будет вызываться только по приходу пакета. А если настроить фильтры аппаратные, так вообще красота. Но если скорость не нужна и нужна простота кода и доступность библиотек разных, то тут Ардуино более подходит... А если есть силы и желание разобраться, то СТМ окупит затраты с лихвой. |
![]() |
![]() |
![]() |
#245 |
Старший Пользователь
![]() Регистрация: 01.01.2014
Возраст: 39
Город: Новосибирск
Регион: 54
Машина: РРС, Форд
Сообщений: 954
![]() |
![]() Скетч твой можно посмотреть, тоже столкнулся с такой проблемой.
Но у меня скорее всего проблемка из за функции "delay", "рубит" работу контроллера, и естественно теряет данные, которые продолжают течь по com.
__________________
Тесла по-русски |
![]() |
![]() |
![]() |
#246 |
Старший Пользователь
![]() Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
![]() ![]() ![]() |
![]() Да такой же как и на этой странице выше.
Делеев нету и в коде их быть не должно! Совсем не должно! Нужно пользоваться таймером. |
![]() |
![]() |
![]() |
#247 |
Старший Пользователь
![]() Регистрация: 01.01.2014
Возраст: 39
Город: Новосибирск
Регион: 54
Машина: РРС, Форд
Сообщений: 954
![]() |
![]() Ну вот и развеял мои сомнения, перепишу.
__________________
Тесла по-русски |
![]() |
![]() |
![]() |
#248 |
Старший Пользователь
![]() Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
![]() ![]() ![]() |
![]() По слову millis ищи примеры.
Но если в шине идёт активный обмен пакетами, то даже избавление от делея не до конца спасёт. Ну не способна ардуина на 12 мегагерцах выступать программным фильтром да ещё и что-то делать при этом. Если конечно код включает только слежение за кнопками, то может и нормально будет... |
![]() |
![]() |
![]() |
#249 |
Старший Пользователь
![]() Регистрация: 01.01.2014
Возраст: 39
Город: Новосибирск
Регион: 54
Машина: РРС, Форд
Сообщений: 954
![]() |
![]() Функция Millis решила вопрос, данные стабильно считываются, все ок)
Пишут есть ещё лучше библиотеки https://smartmodules.ru/timerone-arduino, что меньше кода-это факт, а на сколько лучше...надо тестить.
__________________
Тесла по-русски |
![]() |
![]() |
![]() |
#250 |
Старший Пользователь
![]() Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
![]() ![]() ![]() |
![]() Ни на сколько.
Просто удобнее. Но если там есть хоть какие глюки, то они будут и у тебя в проекте. И за все удобства придётся платить скоростью и памятью. Да и можно вообще без библиотек всяких просто читая параметры регистров таймера атмеги. В общем этим библиотеки и занимаются... |
![]() |
![]() |
![]() |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | Поиск в этой теме |
|
|