Здравствуйте, товарищи!
Помогите абсолютному новичку в программировании. Долго искал куда приспособить свою ардуинку и вот представился случай сделать подобную индикацию передач МКПП на мотоцикле. Схема простая до невозможного (см. скриншот). Два Геркона, Ардуино и панель на 6 контактов с соответствующими передачами 1-6, подтягиваемых к “земле”. Начал хорошо, 1 и 2 переключаются, а вот дальше застопорился, 3я не отображается, пробовал складывать условия, пробовал с разными операторами “if”, “else” снимать сигнал со смежных пинов, не хочет и всё. Гугл ничего толкового не даёт, искал подобные скетчи. Общая концепция - задать 7 режимов (не знаю точно как их назвать) и в каждом режиме задающие пины А0 и А1, переключают индикатор на смежные передачи КПП, но как это правильно написать, моих мозгов нехватило, для вас, я думаю, не составит труда подсказать. Спасибо.
У вас концепт неправильный.
Рычаг передач в мото ведь как работает - он не включает конкретную передачу, а только понижает или повышает.
Вот и вам с диодами надо работать так же - при замыкании верхнего геркона повышать номер передачи, а при замыкании нижнего - понижать.
Заведите переменную “текущая передача” и в своих условиях чтения герконов не включайте светодиоды, а только прибавляйте или отнимайте от номера передачи единицу.
И только потом включайте светодиод в соответствии с полученным номером.
Кроме того, герконы у вас включены неправильно и будут глючить. Нужно использовать подтяжку.
Именно резюки и номиналом где то пару килоОм и конденсатор 10 нф или около того параллельно контактам и задержку на сотню миллисекунд после срабатывания , а потом ждать когда отпустится педаль и только потом плюсовать или минусовать переменную передача и гасить старый зажигать новый светодиод.
Вопрос , а почему нельзя написать в лупе просто
складывать или вычитать номер передачи в зависимости от срабатывания входных импульсов. Добавить еще проверку на последнюю и первую передачу. А по номеру зажигать нужный светодиод. Если нужно по нулю, то инвертировать математику.
нет, тут не 2 входа, как вы выразились, а 2 раздельных независимых последовательных входа. Вы можете подавать на 1 вход постоянно импульсы и они будут складываться, а на второй вычитаться.
Можно. Но импульсов может быть больше чем 2 из за дребезга контактов. Совсем рядом свеча с высоковольтными импульсами, которые могут как завесить МК и так и дать ложные импульсы. И возникает вопрос а как узнать что передача первая? При любом ложном импульсе счётчик собьётся и вернуть его в нормальную работу не получится.
Это уже не относится к логике, с дребезгом бороться другими методами надо.
По логике вам нужно: получил импульс - увеличил счетчик, другой уменьшил. А при вашем коде , лишний импульс вернет все в исходное?
Передачу ,можно косвенно, определять по скорости и обороту двигателя.
В корне не верный подход ограничивать логику желаемой областью. Когда пишется программа нужно учесть все возможные варианты развития событий. Я уже писал, если от наводки произойдёт увеличение счетчика хотя бы один раз то в дальнейшем показания будут неверными всегда. В логике программы не предусмотрена такая ситуация.
Тс , это не рабочий код, это одна из версий как можно считать. Чтобы он заработал нужно ещё кучу условий, убрать дребезг, контроль переключений и ещё всякого которое всплывёт по ходу.