Моторчик в одну сторону крутится медленнее

Всем добрый день! Моторчик при нажатии на button1 едет в одну сторону, пока не включается концевик (button2). Если button1 отжать, моторчик едет в другую сторону, пока не нажмется концевик (button3). Проблема в том, что когда мотор едет в обратную сторону, он почему-то едет гораздо медленнее! Если убираю из кода button3, все нормально. Подскажите, может как-то по-другому тогда код написать? В чем может быть проблема? Заранее спасибо!

int IN2 = 2; // мотор 1
int IN3 = 3; // мотор 2
const int button1 = 13;  // кнопка
const int button2 = 8;  // концевик верх
const int button3 = 9;  // концевик низ
int button1State = 0;         // статус кнопки - нажата или отпущена
int button2State = 0;         // статус кнопки - нажата или отпущена
int button3State = 0;         // статус кнопки - нажата или отпущена

void setup()
{
pinMode (IN2, OUTPUT);
pinMode (IN3, OUTPUT);
pinMode(button1, INPUT);
pinMode(button2, INPUT);
pinMode(button3, INPUT);
}
void loop()
{
button1State = digitalRead(button1);
button2State = digitalRead(button2);
button3State = digitalRead(button3);
if (button1State == HIGH && button2State == LOW) {
digitalWrite (IN3, HIGH);
digitalWrite (IN2, LOW);
}
else {
digitalWrite (IN2, LOW);
digitalWrite (IN3, LOW);
    
}

if (button1State == LOW && button3State == LOW) {
digitalWrite (IN2, HIGH);
digitalWrite (IN3, LOW);
}
else {
digitalWrite (IN2, LOW);
digitalWrite (IN3, LOW);
}
  }

какой моторчик?, как подключен? - ХЗ? Ответ - ХЗ.

В строках 14-16 поставьте подтяжку INPUT_PULLUP

1 лайк

Двигатель постоянного тока GA-12-N20 на 6 вольт, подключен через модуль L9110

Так 1 или 2 мотора?
Схем надо.

Один мотор, который управляется модулем L9110

В схеме подключения кнопок/концевиков.
Приведите вашу схему, хотя-бы от руки нарисуйте и сделайте фото

Кнопки и концевики работают, просто почему-то мотор медленнее работает!

Потому что он каждый проход loop сначала выключается строками 28-29, а потом включается строками 34-35.
Исправляйте логику.

Кнопки , на вашей схеме, когда нажаты читаются LOW, поэтому должны быть INPUT_PULLUP (см. #3)
Концевики же, скорее всего, когда нажаты, читаются HIGH.(проверьте это), и, значит должны быть просто INPUT.

Сначала с этим разобраться, а дальше ещё с логикой разбираться надо (как выше сказали)

В условии 22 включается, в условии 33 выключается. Это при нажатии одной любой кнопки. Кривая логика. @kalapanga уже сказал об этом.
Условия без ELSE перепиши.

А как без else? Для каждого направления моторчика создать свой цикл? Если просто else убрать, концевики перестают работать.

Ну вот прям так. В чем вопрос?

Без else перестают работать концевики

Опиши сам для себя логику простыми словами.
Внтмательно посмотри алгоритм. При нажатой кнопке1 срабатывает в первом IF ветка ИСТИНА, во втором IF ветка ЛОЖЬ

При НЕ НАЖАТОЙ в первом IF ЛОЖЬ,во втором IF ИСТИНА:

В связи с чем возникает вопрос: мотор как-то механически возвращается? Т.к. судя по коду при не нажатой кнопке он или обесточен или заторможен.

Алгоритм - если нажата кнопка 1 и не нажат концевик 2, мотор двигается вперед. Если концевик 2 нажимается, мотор останавливается.
Если отжимаем кнопку 1, мотор едет назад, пока не нажмется концевик 3. Если концевик нажат, остановить моторы.
Если я во всем этом убираю else, то нажатия концевиков не срабатывают

Дело не в наличии оператора else или его отсутствии. Никто не говорит, что его нельзя использовать. Используйте на здоровье!
Но у Вас желаемое поведение запрограммировано неправильно. Вам поняли, в чём именно? Подумайте и попробуйте переписать.

Да вот думаю уже пол дня. Сделал для нажатия кнопки отдельный цикл, для отжатия кнопки отдельный - он также медленно едет назад. Понять не могу в чем дело уже.

Конечный автомат нужен.