arduino
- Bill Humble
- Специалист
- Темы: 8
- Сообщений: 1523
- Зарегистрирован: 09 июл 2009, 00:12
- Авто: A4Q 1.8T AMB '04
- Имя:
- Откуда: Логойск
- Контактная информация:
- Статус: Не в сети
arduino
Сообщение Bill Humble » 14 фев 2017, 07:05
Bill Humble
Rokky
- Maxxtro2
- Механик
- Темы: 30
- Сообщений: 1024
- Зарегистрирован: 10 ноя 2009, 00:46
- Имя:
- Статус: Не в сети
arduino
Сообщение Maxxtro2 » 14 фев 2017, 14:01
Maxxtro2
- Rokky
- Наездник
- Темы: 3
- Сообщений: 423
- Зарегистрирован: 15 сен 2016, 14:41
- Авто: Audi A4 B8, 1.8 TFSI
- Имя: Жека
- Откуда: Минск
- Контактная информация:
- Статус: Не в сети
arduino
Сообщение Rokky » 14 фев 2017, 14:05
сразу вопросы возникают..:
какой формат команд?
как поступают команды на устройство?
RX/TX или через цифру или аналог?
пока идет интервал времени, идет процесс ввода команды на сколько большой этот пул команд который должна хранить плата?
https://www.drive2.ru/r/audi/a4/453354483729040251/
Rokky
- Maxxtro2
- Механик
- Темы: 30
- Сообщений: 1024
- Зарегистрирован: 10 ноя 2009, 00:46
- Имя:
- Статус: Не в сети
arduino
Сообщение Maxxtro2 » 14 фев 2017, 14:21
Фильтрацию, проверку и отправку, уже осуществлял ранее, а вот фильтрацию в течении времени и по последовательности ввода, тут и застопорился
Maxxtro2
- Rokky
- Наездник
- Темы: 3
- Сообщений: 423
- Зарегистрирован: 15 сен 2016, 14:41
- Авто: Audi A4 B8, 1.8 TFSI
- Имя: Жека
- Откуда: Минск
- Контактная информация:
- Статус: Не в сети
arduino
Сообщение Rokky » 14 фев 2017, 14:32
SomeType array[ItemCount]; - массив команд которые считали до того как сработал таймер
а по срабатыванию таймера бежим по всему этому массиву и смотрим:
array[i] = XXX и array[i+1] = YYY, то меняем например переменную, которая указывает, что надо или не надо выполнять действие на соответствующие значение
как, то так.
Кодом смогу наверное только сегодня вечером или завтра..
пс: при работе с таймером почитайте про прерывания на ардуине
https://www.drive2.ru/r/audi/a4/453354483729040251/
Rokky
- Rokky
- Наездник
- Темы: 3
- Сообщений: 423
- Зарегистрирован: 15 сен 2016, 14:41
- Авто: Audi A4 B8, 1.8 TFSI
- Имя: Жека
- Откуда: Минск
- Контактная информация:
- Статус: Не в сети
arduino
Сообщение Rokky » 14 фев 2017, 14:47
можно вообще сделать, если нашли в вашей последовательности команд, стоп-команду, прибить таймер, и запустить его с начала
или я глупый и не до конца догнал вашу задачу

https://www.drive2.ru/r/audi/a4/453354483729040251/
Rokky
- Maxxtro2
- Механик
- Темы: 30
- Сообщений: 1024
- Зарегистрирован: 10 ноя 2009, 00:46
- Имя:
- Статус: Не в сети
arduino
Сообщение Maxxtro2 » 14 фев 2017, 14:48
Отправлено спустя 2 минуты 13 секунды:
Доберусь до компьютера, сброшу то, что есть и работает, к этому я хочу добавить таймер и вылавливание из данных последовательно поступивших команд
Maxxtro2
- Bill Humble
- Специалист
- Темы: 8
- Сообщений: 1523
- Зарегистрирован: 09 июл 2009, 00:12
- Авто: A4Q 1.8T AMB '04
- Имя:
- Откуда: Логойск
- Контактная информация:
- Статус: Не в сети
arduino
Сообщение Bill Humble » 14 фев 2017, 18:45
Есть функция millis() - количество миллисекунд с момента начала работы ардуины.
void loop()
{
if (got_event) {
prev_event = millis();
got_event = FALSE;
}
if (millis()-prev_event) >= 1000) {
do_timeout_code();
}
}
По прерыванию в отдельно функции получаем данные с SPI и анализируем. Если пришло то, что хотели, выставляем got_event в истину.
Если по истечению некоторого времени (1000 миллисекунд в моем примере) не было событий, считаем таймаут наступившим и выполняем процедуру do_timeout_code()
Bill Humble
- Maxxtro2
- Механик
- Темы: 30
- Сообщений: 1024
- Зарегистрирован: 10 ноя 2009, 00:46
- Имя:
- Статус: Не в сети
arduino
Сообщение Maxxtro2 » 14 фев 2017, 19:09
Код: Выбрать все
#include <mcp_can.h>
#include <SPI.h>
int A;
const int SPI_CS_PIN = 10;
long unsigned int rxId;
unsigned char len = 0;
unsigned char rxBuf[8];
char str[20];
unsigned char stmp1[8] = {0, 0, 0, 0, 128, 0, 0, 0};
unsigned char stmp2[8] = {0, 0, 0, 1, 0, 0, 0, 0};
MCP_CAN CAN(SPI_CS_PIN);
void setup()
{
while (CAN_OK != CAN.begin(CAN_500KBPS))
pinMode(2, INPUT);
attachInterrupt(0, MCP2515_ISR, FALLING);
}
void MCP2515_ISR()
{
rxId, A;
}
void loop()
{
if (rxId == 0x3bc)
{
if (A = (unsigned char)rxBuf[0x01] == 32)
{
CAN.sendMsgBuf(0x3b4, 0, 8, stmp1);
delay(300);
}
}
if (rxId == 0x3bc)
{
if (A = (unsigned char)rxBuf[0x02] == 32)
{
CAN.sendMsgBuf(0x3b1, 0, 8, stmp2);
delay(300);
}
}
}
К этому необходимо: чтобы при включении устройства в первые 30 секунд шел поиск в буфере необходимых значений в rxId == 0x3bc, которые появляются последовательно, сначала rxBuf[0x01] == 32, а после xBuf[0x02] == 32. И если значения в течении 30 секунд найдены, то устройство молчит, а при их отсутствии идет посылка данных в 0x3b4 и 0x3b1. На этом работа устройства должна прекращаться и возобновляться только при следующем включении.
Maxxtro2
- Bill Humble
- Специалист
- Темы: 8
- Сообщений: 1523
- Зарегистрирован: 09 июл 2009, 00:12
- Авто: A4Q 1.8T AMB '04
- Имя:
- Откуда: Логойск
- Контактная информация:
- Статус: Не в сети
arduino
Сообщение Bill Humble » 14 фев 2017, 23:04
Код: Выбрать все
boolean event1 = false;
boolean event2 = false;
void loop()
{
unsigned char len = 0;
unsigned char buf[8];
if(!event2 && CAN_MSGAVAIL == CAN.checkReceive())
{
CAN.readMsgBuf(&len, buf);
unsigned int canId = CAN.getCanId();
if (!event1 && canId == 0x3BC && buf[1] == 32) then event1 = true;
if (event1 && !event2 && canId == 0x3BC && buf[2] == 32) then event2 = true;
}
if (!event2 && millis() > 30000) {
unsigned char stmp1[8] = {0, 0, 0, 0, 128, 0, 0, 0};
CAN.sendMsgBuf(0x3b4, 0, 8, stmp1);
unsigned char stmp2[8] = {0, 0, 0, 1, 0, 0, 0, 0};
CAN.sendMsgBuf(0x3b1, 0, 8, stmp2);
event2 = true;
}
}
В бесконечном цикле крутятся две проверки. Их можно даже переставить, поведение не поменяется.
В первой ожидаем прихода информации. Если информация получена, выставляем флаг event2 и больше никогда ничего не делаем.
Во второй ожидаем наступления 30 секунд. Если они наступили и информация до сих пор не получена, отправляем данные и точно так же выставляем event2 и проверки больше не выполняются.
Bill Humble
- Bill Humble
- Специалист
- Темы: 8
- Сообщений: 1523
- Зарегистрирован: 09 июл 2009, 00:12
- Авто: A4Q 1.8T AMB '04
- Имя:
- Откуда: Логойск
- Контактная информация:
- Статус: Не в сети
arduino
Сообщение Bill Humble » 14 фев 2017, 23:18
Bill Humble
- Maxxtro2
- Механик
- Темы: 30
- Сообщений: 1024
- Зарегистрирован: 10 ноя 2009, 00:46
- Имя:
- Статус: Не в сети
arduino
Сообщение Maxxtro2 » 14 фев 2017, 23:28
мы в строчке 3bc 8 00:00:00:00:00:00:00:00 ищем совпадение,
сперва 3bc 8 00:32:00:00:00:00:00:00, а после 3bc 8 00:00:32:00:00:00:00:00,
ели эта последовательность не выполнена, то совершаем отправку 3b4 8 00:00:00:00:128:00:00:00: и 3b1 8 00:00:00:1:00:00:00:00
В моем случае совпадение будет равняться около 10 значениям, а на отправку будет довольно много данных
Кстати дополнительно было бы неплохо прописать кроме последовательных данных и совместные, к примеру 3bc 8 00:32:32:00:00:00:00:00.
Отправлено спустя 1 час 18 минуты 45 секунды:
и кстати по твоему сообщению
лучше писатьunsigned int canId = CAN.getCanId();
чтобы принимала значения более 255 (FF). Иначе при фильтре мы не поймаем правильные и нужные Id.long unsigned int canId = CAN.getCanId();
Maxxtro2
alexstr81
- Bill Humble
- Специалист
- Темы: 8
- Сообщений: 1523
- Зарегистрирован: 09 июл 2009, 00:12
- Авто: A4Q 1.8T AMB '04
- Имя:
- Откуда: Логойск
- Контактная информация:
- Статус: Не в сети
arduino
Сообщение Bill Humble » 15 фев 2017, 07:02
Maxxtro2 писал(а):Источник цитаты мы в строчке 3bc 8 00:00:00:00:00:00:00:00 ищем совпадение,
сперва 3bc 8 00:32:00:00:00:00:00:00, а после 3bc 8 00:00:32:00:00:00:00:00,
ели эта последовательность не выполнена, то совершаем отправку 3b4 8 00:00:00:00:128:00:00:00: и 3b1 8 00:00:00:1:00:00:00:00
Как раз в моем примере кода должно работать и то и другое.
Как только в позиции 1 найдено 32, начинаем искать 32 в позиции 2, в том числе в текущем пакете.
Если поменять местами
Код: Выбрать все
if (event1 && !event2 && canId == 0x3BC && buf[2] == 32) then event2 = true;
if (!event1 && canId == 0x3BC && buf[1] == 32) then event1 = true;
То 32 на позиции 2 начнет искаться со следующего пакета после нахождения 32 на позиции 1.
А вообще можно завести хоть 20 логических переменных и зажигать каждую в зависимости от полученных данных и состояния остальных.
Bill Humble
- Maxxtro2
- Механик
- Темы: 30
- Сообщений: 1024
- Зарегистрирован: 10 ноя 2009, 00:46
- Имя:
- Статус: Не в сети
arduino
Сообщение Maxxtro2 » 15 фев 2017, 10:00
then
alexstr81,
alexstr81 писал(а):Источник цитатыОффтопик:Maxxtro2, это таким образом избавляемся от ошибки по диодам???
Можно пробовать любой чек, но тут все зависит от количества посылок, шину можно легко перегрузить. В этом случае можно просто слать бит с меньшей задержкой.
Maxxtro2
- Bill Humble
- Специалист
- Темы: 8
- Сообщений: 1523
- Зарегистрирован: 09 июл 2009, 00:12
- Авто: A4Q 1.8T AMB '04
- Имя:
- Откуда: Логойск
- Контактная информация:
- Статус: Не в сети
arduino
Сообщение Bill Humble » 15 фев 2017, 11:27
Maxxtro2 писал(а):Источник цитаты ругается на then
Это я лишнего посидел за Delphi на работе. Ну какой "then" в языке C?
Код: Выбрать все
if (!event1 && canId == 0x3BC && buf[1] == 32) event1 = true;
if (event1 && !event2 && canId == 0x3BC && buf[2] == 32) event2 = true;
Maxxtro2 писал(а):Источник цитаты лучше писать long unsigned int canId = CAN.getCanId();
unsigned int - это уже 16 бит. У нас будут на шине id больше чем 2 байта?
alexstr81 писал(а):Источник цитаты это таким образом избавляемся от ошибки по диодам???
Цель вторична. Полюбому научиться работать с автомобильным CAN весьма полезно. Вот например знакомого бесит, что китайский CAN-бридж от китайской автомагнитолы вырубает ее через 10 минут после выключения зажигания. Умел бы программировать - сделал бы собственный бридж с 30 минутами вместо 10.
Bill Humble
- FAQ (ЧИТАТЬ ОБЯЗАТЕЛЬНО!)
- Правила форума
- Расписание съездов Белорусского Audi Клуба
- Как вступить в Белорусский Ауди Клуб?
- Как добавить изображение в сообщение на форуме?
- Как связаться с Администрацией сайта?
- Клубная жизнь
- Жизнь клуба
- Съезды клуба
- Архив анонсов Клубных мероприятий
- Филиалы клуба
- Брестский филиал
- Витебский филиал
- Гомельский филиал
- Гродненский филиал
- Могилёвский филиал
- Бобруйский филиал
- Клубы-побратимы
- Друзья клуба
- Автосервисы СТО
- Предложения з/ч
- Exist.by
- Клубные сувениры с символикой
- О нашем проекте
- Модели Audi
- Audi 80, 90, Coupe
- Двигатель
- Трансмиссия
- Топливная система
- Подвеска и Рулевое управление
- Тормозная система
- Охлаждение, отопление и кондиционирование
- Выхлопная система
- Кузов и Салон
- Электрооборудование
- Audi 100, 200 и V8
- Audi A2
- Двигатель
- Трансмиссия
- Топливная система
- Подвеска и Рулевое управление
- Тормозная система
- Охлаждение, отопление и кондиционирование
- Выхлопная система
- Кузов и Салон
- Электрооборудование
- Audi A3
- 8L
- Двигатель
- Трансмиссия
- Топливная система
- Подвеска и Рулевое управление
- Тормозная система
- Охлаждение, отопление и кондиционирование
- Выхлопная система
- Кузов и Салон
- Электрооборудование
- 8P
- Audi A4
- B5
- Двигатель
- Трансмиссия
- Топливная система
- Подвеска и Рулевое управление
- Тормозная система
- Охлаждение, отопление и кондиционирование
- Выхлопная система
- Кузов и Салон
- Электрооборудование
- B6
- Двигатель
- Трансмиссия
- Топливная система
- Подвеска и Рулевое управление
- Тормозная система
- Охлаждение, отопление и кондиционирование
- Выхлопная система
- Кузов и Салон
- Электрооборудование
- B7
- Двигатель
- Трансмиссия
- Топливная система
- Подвеска и Рулевое управление
- Тормозная система
- Охлаждение, отопление и кондиционирование
- Выхлопная система
- Кузов и Салон
- Электрооборудование
- B8
- Двигатель
- Трансмиссия
- Топливная система
- Подвеска и Рулевое управление
- Тормозная система
- Охлаждение, отопление и кондиционирование
- Выхлопная система
- Кузов и Салон
- Электрооборудование
- Audi A5
- Двигатель
- Трансмиссия
- Топливная система
- Подвеска и Рулевое управление
- Тормозная система
- Охлаждение, отопление и кондиционирование
- Выхлопная система
- Кузов и Салон
- Электрооборудование
- Audi A6
- C4
- Двигатель
- Трансмиссия
- Топливная система
- Подвеска и Рулевое управление
- Тормозная система
- Охлаждение, отопление и кондиционирование
- Выхлопная система
- Кузов и Салон
- Электрооборудование
- C5
- Двигатель
- Трансмиссия
- Топливная система
- Подвеска и Рулевое управление
- Тормозная система
- Охлаждение, отопление и кондиционирование
- Выхлопная система
- Кузов и Салон
- Электрооборудование
- C6
- Двигатель
- Трансмиссия
- Топливная система
- Подвеска и Рулевое управление
- Тормозная система
- Охлаждение, отопление и кондиционирование
- Выхлопная система
- Кузов и Салон
- Электрооборудование
- C7
- Двигатель
- Трансмиссия
- Топливная система
- Подвеска и Рулевое управление
- Тормозная система
- Охлаждение, отопление и кондиционирование
- Выхлопная система
- Кузов и Салон
- Электрооборудование
- С8
- Audi A8
- D2
- Двигатель
- Трансмиссия
- Топливная система
- Подвеска и Рулевое управление
- Тормозная система
- Охлаждение, отопление и кондиционирование
- Выхлопная система
- Кузов и Салон
- Электрооборудование
- D3
- Audi TT
- Audi Allroad
- Audi Q3
- Audi Q5
- Audi Q7
- Эксплуатация автомобиля
- Расшифровка VIN + История обслуживания (Audi, VW, Skoda, Seat)
- Руководства по эксплуатации
- Программы для диагностики авто
- ETKA, ELSA
- VAG-Com
- Автодата
- Общетехнические вопросы и системы
- Выбор масла
- Выбор запчастей
- Средства по уходу за автомобилем
- Автозвук
- Электрооборудование
- GPS навигация
- Тюнинг
- Шины, диски
- Кузов, салон, оптика
- Выбираем автомобиль
- Новинки от Audi
- Юридическая консультация
- Выбор СТО
- Отзывы об СТО
- Оффтоп
- Всё обо всём
- Всё о мото-вело
- Всё о компьютерах, мобильниках и IT
- Всё о бизнесе
- Юмор
- Путешествия
- Беларусь
- Постсоветское пространство
- Россия
- Украина
- Европа
- Ближний восток
- Азия
- Америка
- Африка
- Австралия
- Антарктида
- На досуге...
- Онлайн игра
- Поздравления
- Объявления
- Автомобили
- Диски/Шины
- Запчасти
- Другое
- Отдам даром! Приму в дар!
Кто сейчас на форуме
Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 2 гостей