Добрый день. Вообщем есть моторизированный монитор который открывается при подаче 12в. Подали 12в монитор открылся, далее есть кнопка (tilt в коде) при нажатии которой монитор по значению потенциометра опускается на определенный угол. Код (C++): #include <Eeprom24C01_02.h> #include <Wire.h> // устанавливаем порты: const uint8_t motor_in1 = 8; // номер порта к которому подключен драйвер мотора с входом 1 const uint8_t motor_in2 = 9; // номер порта к которому подключен драйвер мотора с входом 2 const uint8_t acc = 12; // номер порта к которому подключен acc const uint8_t btn_open = 11; // номер порта к которому подключена кнопка OpenClose const uint8_t btn_tilt = 10; // номер порта к которому подключена кнопка Tilt const uint8_t pot = 1; // переменные: bool acc_val = 0; // переменная для хранения состояния ACC bool btn_open_close_val = 1; // переменная для чтения статуса кнопки OpenClose bool btn_tilt_val = 1; // переменная для чтения статуса кнопки Tilt void setup() { delay(200); //устанавливаем скорость 9600 бит/сек Serial.begin(9600); // инициализировать порты драйвера электродвигателей: pinMode(motor_in1, OUTPUT); pinMode(motor_in2, OUTPUT); // инициализировать кнопки в качестве входа: pinMode(btn_open, INPUT_PULLUP); pinMode(btn_tilt, INPUT_PULLUP); // инициируем порт потенциометра pinMode(pot, INPUT); } // адреса eeprom const byte address = 0; void loop() { acc_val = digitalRead(acc); // читаем состояние значения ACC: btn_open_close_val = digitalRead(btn_open); btn_tilt_val = digitalRead(btn_tilt); pot_val = analogRead(pot) / 4; Serial.println(pot_val); if (acc_val == HIGH) { // если на acc пришел сигнал 12+ if (pot_val <= 30) { //если монитор закрыт то. digitalWrite(motor_in1, HIGH); // открываем монитор do { Serial.println("motor up"); // delay(50); // подождать, пока датчик стабилизируется pot_val = analogRead(pot) / 4; // проверить датчик } while (pot_val < 220); // если крышка поднялась то сигнал будет больше 220, цикл разрывается digitalWrite(motor_in1, LOW); // отключаем мотор для поднятия крышки } else { tilt(); } } void tilt() { if (btn_tilt_val == LOW && pot_val == constrain(pot_val, 180, 256)) { if (pot_val >= 218) { digitalWrite(motor_in2, HIGH); { delay(50); pot_val = analogRead(pot) / 4; } while (pot_val > 216); digitalWrite(motor_in2, LOW); } else if (pot_val == constrain(pot_val, 200, 216)) { digitalWrite(motor_in2, HIGH); do { delay(50); pot_val = analogRead(pot) / 4; } while (pot_val > 198); digitalWrite(motor_in2, LOW); } else if (pot_val == constrain(pot_val, 180, 190)) { digitalWrite(motor_in1, HIGH); do { delay(50); pot_val = analogRead(pot) / 4; } while (pot_val < 220 ); digitalWrite(motor_in1, HIGH); } } else { digitalWrite(motor_in1, LOW); // отключаем мотор digitalWrite(motor_in2, LOW); // отключаем мотор } } Теперь 2 вопроса. 1. Я хочу добавить доп. кнопку опен, она должна закрывать монитор даже если поданы 12в, я добавил условие для нее через if , и такая проблема, при нажатии кнопки монитор закрывается, НО тут же открывается, потому что начинает выполняться условие if (acc_val == HIGH) { , т.е как мне сделать что бы ACC как бы отслеживал, если кнопка опен была нажата , то не начинал отслеживать значение потенциометра и выполнять свой цикл?) /Надеюсь понятно объяснил. 2. В блоке void tilt при нажатии кнопки меняться положение монитора, и я заметил такой момент, если зажать кнопку tilt то монитор начинает двигаться из начального положения в третье непрерывно, туда сюда. Драйвер движка l293b если это имеет роль. Заранее спасибо за подсказки.