Добрый день.
ТЗ: есть каретка перемещения вверх-вниз. На конце маршрута каретки стоят датчики (герконы). Когда каретка доехала, геркон замыкается. Каретка приводится в движение винтовой парой (вращение двигателя по часовой и против часовой стрелке двигает каретку вверх-вниз.
Для определенности на концевые герконы применил пины 10 (верх) и 9(низ), а для выхода управления применил выходы 20 и 22. Появление высокого уровня на 20 двигает каретку вниз, появление высокого уровня на пине 22 двигает вверх.
Подача лог 1 на 20 и 22 одновременно не допустима (защита есть, но желательно ограничить и программно - исключить)
Логика такая. Когда каретка стоит посередине, концевики разомкнуты и нужно начать двигать каретку вниз до замыкания датчика. Если датчики 10 и 9 = 0 (разомкнуты) и нет сигнала на управление двигателем - 20 и 22 = 0 (каретка стоит, мотор не работает, например после отключения электричества. Тогда должен появлятся лог 1 на 20 и начатся движение вниз.
после того как приехали вниз, пауза 1 сек и появление лг 1 на 22, для движения вверх. В положении верх замыкается датчик 10, пауза 10 сек и начинаем движение вниз. Бесконечный цикл вверх-вниз с паузами внизу и вверху. Написал такой скетч
void setup() {
pinMode(10, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
pinMode(20, INPUT_PULLUP);
pinMode(22, INPUT_PULLUP);
}
void loop() {
if (digitalRead(10) == 0 & (digitalRead(9) == 0 & (digitalRead(20) == 0 | digitalRead(22) == 0))) {
delay(1000);
pinMode(20, OUTPUT);
digitalWrite(20, 1);
} else {
if (digitalRead(10) == 1 & digitalRead(9) == 0) {
pinMode(22, OUTPUT);
digitalWrite(22, 0);
delay(101000);
pinMode(20, OUTPUT);
digitalWrite(20, 1);
} else {
if (digitalRead(10) == 1 & digitalRead(9) == 0) {
pinMode(20, OUTPUT);
digitalWrite(20, 0);
delay(11000);
pinMode(22, OUTPUT);
digitalWrite(22, 1);
}
}
}
}
он запускается и сразу встает в digitalWrite 20 = 1 до бесконечности, на датчики не реагирует. Помогите, пожалуйста, разобраться. что я делаю не так.