Обработка кода ОВD1

Может кто проверить код на работоспособность? Либо кто в теме программирования увидит ошибку кода
У меня пару раз сработал при наличии сигнала обд1 переключился на экран spd с экрана No signal,
и все на этом больше не запустился
Использовал ардуино нано 328, так же использовал модемсию 8266 переписав код под него

Код взят с американского сайта
Хотя другой код обд1 работает нормально

Почему в коде датапин 3, а в комментарии 2? Это вы поменяли? В сочетании со следующей строчкой работать не будет

Это не меняет сути так как пин 2 закомментирован
Изменен по причине отвалился
Проверил другим исправным кодом через пин 3 все работает без проблем

Контроллер атмега 328…?

Если да, то в этом месте ошибка и прерывание 0 на пине 3 не работает.
Но вы можете делать как угодно, нам похер.

1 лайк

Шо так грубо, сразу
На пин 2 он так же не работает , к сожалению наны больше нет

Ответ из серии:

  • Машина не заводится!
  • Так у тебя же свечи выкручены!
  • Со свечами пробовал, тоже не заводится.

Выводы 2 и 3 платы Arduino Nano с микроконтроллером ATmega328 используются для формирования внешних прерываний.

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

Дальше-то что? Кроме цитирования документации, ее надо понимать. А вы даже после подсказки, похоже, в этих двух строках ровно ничего не понимаете.

То что вы делаете - это как в коде назначить пин 3, а на схеме соединить с пином 2.
Но я уже написал - делайте как хотите.

Сигнал подключен к пин 3

А номер прерывания на этом пине у вас какой? А должен быть какой?

А номер прерывания от пина 2.

Вас носом, что ли, в ошибку надо ткнуть? Документацию читайте, что означает первый аргумент функции attachInterrupt()

#define DEBUG_OUTPUT true
#define ENGINE_DATA_PIN 3 // pin 2
#define ENGINE_DATA_INT 1 // for attachInterrupt
#define LED_PIN 13

А ещё правильнее не назначать номер прерывания вручную, а пользоваться встроенной функцией digitalPintoInterrupt()

1 лайк

Я вот никогда не мог (и сейчас не могу) с первого раза правильно написать её название. Вот и Вы не смогли :frowning:

:slight_smile: :slight_smile: :slight_smile:

2 лайка

#define ENGINE_DATA_INT 1 // for attachInterrupt Сменил на 1 но увы не помогло
Сигнал не запускает действие
attachInterrupt(digitalPinToInterrupt(ENGINE_DATA_INT), ChangeState, CHANGE);
так же не помогло

Я бы посоветовал Вам читать документацию, а не подбирать строчки методом тыка.

А должно было?

Интересно, что побудило Вас испытывать такие надежды?

пытаюсь понять почему не работает

Для того чтобы понять, надо сначало отдать минимум 10 лет учёбы и практики, чтобы потом получать $1000 за один удар молоточком в нужное место.Вы собрались что то обрабатывать, влезая в мозги авто. Сначала такие ТС безобидно читают, но потом к ним приходит мысль туда писать, и вот это уже становится страшно, за тех, кто едит в такой тачке, и тех участников движения кто оказывается на дороге рядом. Печаль. Лучше не подсказывать этим дилетантам, пусть и дальше остаётся в неведении. Себя угробит ладно, но других жаль.

1 лайк

Вы правда считаете, что можно взять чужой код

размером в почти полтысячи строк и, ничего в нём не понимая, разобраться почему он работает так, а не иначе? А Вы ведь ничерта не понимаете в этом коде, так ведь?

Или Вы всерьёз думаете, что кто-то с ногами полезет в чужой полтыщистрочный код с целью проверять его на работоспособность, понимая, что Вы даже не сможете понять ни слова из объяснений почему он работает не так, как Вам хочется?

Если уж Вы

то, Вы не подумали, что

для Вас просто неподъёмная задача? Начинать надо не с марсохода, а с мигающих ходовых огней на нём. Вы не думали об этом?