Видимо у вас не было двухколёсный техники. Замок зажигания и зажигание на мопеде это разные вещи. Там ключ, а там прерыватель/коммутатор.
а где оно не так?
видно товарищ boom - пешеход, для него это тождественно.
Скорее не ездил на мопеде
Ошибаетесь.
А в чем суть обратки от оборотов? Если экономить топливо, то обычно переключаюсь от 2,5 до 3х тыс, вплоть до 6й, но если выкручиваю, то от 6 до 7 тыс, соответственно скорость выше между переключениями, получается диапазоны оборотов разные.
Вот это рабочий вариант, хотя и довольно сложный для начинающего.
Суть оборотов двигателя и знание скорости движения может косвенно дать знание какая передача включена и иметь хоть какую обратную связь. Ведь на мопеде нет датчика передач.
Есть еще одна обратная связь- от датчика разряжения. Например, зажигание Шкильменского. Насколько помню, в нем задействован такой датчик.
Вот не знаю, зачем оно только нужно? Сколько ездил(правда было 4 скорости) , даже и мысли не пришло, что неплохо-бы такую индикацию иметь
Для регулировки угла опережения зажигания. Например на старых лодочных только за счет этого обороты управлялись, только вручную, без процессора.
Да нет, я про индикацию включённой передачи, то что ТС делает
У меня 2ю выбивает после 3000 об. Ремонтировать коробку пока нет возможности, т.к. з/ч нет, вот и решил выйти из ситуации с помощью индикации, ну и хотел как-то реализовать ардуино на моте.
Все равно мот зимует и есть время разобраться.
Приветствую. Почитал про считывание показаний датчика скорости и оборотов и понял, что слишком сложно. Решил пока сделать просто индикатор передач. Переделал ваш код на включение передачи, только после отпускания кнопки и повторного нажатия(а то индикация проскальзывала при зажатии кнопки), но при этом столкнулся с проблемой последнего условия, задающего диапазон. При нажатии на кнопку UP_G на 6й передаче, она гаснет и не загорается при повторных нажатиях, только когда нажму DOWN_G, тогда загорается 5я передача, как можно сохранить условия, которые вы написали изначально - при превышении значения переменной Peredacha, всё равно загорается крайняя передача 1я и 6я.
#define ST1 4
#define ST6 9
#define DOWN_G 12
#define UP_G 11
int Peredacha = 4;
boolean butt_flag = 0;
boolean butt_flag1 = 0;
boolean butt;
boolean butt1;
void setup()
{
pinMode(ST1, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(ST6, OUTPUT);
pinMode(DOWN_G, INPUT_PULLUP);
pinMode(UP_G, INPUT_PULLUP);
digitalWrite(ST1, 0);
digitalWrite(5, 1);
digitalWrite(6, 1);
digitalWrite(7, 1);
digitalWrite(8, 1);
digitalWrite(ST6, 1);
}
void loop()
{
butt = digitalRead(11);
if (butt == 1 && butt_flag == 0){butt_flag = 1;}
if(butt == 0 && butt_flag == 1){butt_flag = 0;
digitalWrite(Peredacha, !butt_flag);
Peredacha= Peredacha + !digitalRead(UP_G);
Peredacha= Peredacha - !digitalRead(DOWN_G);
digitalWrite(Peredacha, butt_flag);
}
butt1 = digitalRead(12);
if (butt1 == 1 && butt_flag1 == 0){butt_flag1 = 1;}
if(butt1 == 0 && butt_flag1 == 1)
{butt_flag1 = 0;
digitalWrite(Peredacha, !butt_flag1);
Peredacha= Peredacha + !digitalRead(UP_G);
Peredacha= Peredacha - !digitalRead(DOWN_G);
digitalWrite(Peredacha, butt_flag1);
}
if(Peredacha <ST1){Peredacha=ST1 + butt_flag;}
else if(Peredacha >ST6){Peredacha=ST6;}
}
Задачу решайте по кусочкам . Сделайте отдельную функцию управления светодиодами передач. И скармливайте ее либо + либо - (0 или 1). Работу функции проверьте хоть даже скармливая ей значения через терминал . Как это нормально заработает - Дальше разбирайтесь с блоком программы определения что произошло + или - передач . (Можно как вариант пока библиотекой для кнопок воспользоваться например титановый велосипед ) Потом соедините эти два блока.
Давай по порядку.
Вот, что это в условии написано? "Если номер передачи меньше 1, то …??? передача равна 1 + флаг. ?
Зачем ты его прибавляешь к номеру передачи? Ведь тебе нужно просто ограничить индикацию чтобы она не уходила в не нужный диапазон…
А чтобы код заработал, необходимо было всего то организовать “триггер” на кнопки". То есть проверка по нажатию . Например такое
if (digitalRead(buttonPin) == LOW) { // Если кнопка нажата (состояние LOW)
delay(50); // Небольшая задержка для устранения дребезга контактов
while(digitalRead(buttonPin) == LOW) {} // Ждем отпускания кнопки
Четкий алгоритм тут можно сделать такой: считаем число оборотов двигателя N на (10) оборотов колеса, и для каждой передачи будет оно своё, по нему определяем Номер передачи.
Если N< n1 P=1,
иначе если N <n2 P=2 и тп.
Будет работать 100% и надежно.
Условия перехода сделать “посредине” чтобы четко отделялись передачи одна от другой, ну это уже нюансы. На нейтрали конечно будет врать, а может удастся условие подобрать, но вряд ли надежно.
При отладке выводить это число на дисплей и записать его для каждой передачи, потом в программе поставить границы переключение посередине. А может не посередине, а в границах, а если не попадает то типа нейтраль. Ну это уже можно поиграться условиями.
Стоим на месте с включенной передачей и выжатым сцеплением. Как будем определять номер передачи?
Никак, разумеется. Нейтраль пусть кажет.
Ну и на месте какбы 3ю передачу включать не правильно, например.