Добрый день. Делаю, значит, поливашку для уборки помещения под управление Arduino - две направляющие, по которым с помощью мотора перемещаются две рампы с форсунками, из которых распыляется вода. В начале направляющих стоит концевой датчик, в конце тоже. По идее система должна работать так: после нажатия кнопки "пуск", если датчик парковки зажат, включаются поливашки (режим "предуборка"), через некоторое время они начинают движение вперёд (режим "очистка"), по достижении концевика поливашка останавливается, льёт ещё какое-то время (состояние "холд") и, выключив оросители, возвращается назад до тех пор, пока не упрётся в датчик парковки. После этого она должна войти в режим "парковка" и ждать нового нажатия кнопки. Я попробовал написать программу, но она не работает так, как предполагается. После загрузки в ардуину она сама запускается и тупо гоняет режимы по кругу, никак не реагируя (или реагируя, но это невозможно понять) на нажатие кнопок на макетке. Подскажите, что с программой не так, я уже голову сломал. Можете бросить тапком - это первая в моей жизни программа, я всё пойму. Код (C++): #define POLIVAKAFRONT 4 //передняя поливашка #define POLIVAKABACK 5 //задняя поливашка #define KONIEC 6 //концевой выключатель #define PARKINGSWITCH 3 //датчик парковки в исходное состояние #define SWITCHPIN 8 //кнопка запуска #define MOTORBACK 11 //Движок назад #define MOTORFORWARD 12 // Движок вперёд #define TESTLEDCLEANUP 10 //Тестовые диоды состояний #define TESTLEDBACKROLL 9 #define TESTLEDPARKING 2 //СОСТОЯНИЯ СИСТЕМЫ #define STATE_CLEANUP 14 #define STATE_BACKROLL 15 #define STATE_PARKING 18 #define STATE_FAILURE 19 #define STATE_PRECLEAN 20 #define STATE_HOLD 21 int systemState = STATE_PARKING; bool wasButtonDown = false; void setup() // Назначения пинов { pinMode(POLIVAKAFRONT, OUTPUT); pinMode(POLIVAKABACK, OUTPUT); pinMode(SWITCHPIN, INPUT); pinMode(KONIEC, INPUT); pinMode(PARKINGSWITCH, INPUT); pinMode(MOTORFORWARD, OUTPUT); pinMode(MOTORBACK, OUTPUT); pinMode (TESTLEDCLEANUP, OUTPUT); pinMode (TESTLEDBACKROLL, OUTPUT); pinMode (TESTLEDPARKING, OUTPUT); } void loop() { //логика действий поливашки bool isButtonDown = digitalRead(SWITCHPIN); if (isButtonDown && !wasButtonDown) { systemState = STATE_PRECLEAN; delay(10); } wasButtonDown = isButtonDown; if (systemState = STATE_PRECLEAN && digitalRead(PARKINGSWITCH == HIGH)) //ПРЕДОЧИСТКА { digitalWrite(TESTLEDPARKING, LOW); digitalWrite(TESTLEDCLEANUP, HIGH); delay(1000); digitalWrite(POLIVAKAFRONT, HIGH); //включаем переднюю поливаку delay(10000); //держим включенной 10 секунд digitalWrite(POLIVAKAFRONT, LOW); //выключаем переднюю поливаку digitalWrite(POLIVAKABACK, HIGH); //и включаем заднюю delay(5000); } //ждём 5 секунд, чтобы намокла щетка systemState = STATE_CLEANUP; if (systemState = STATE_PRECLEAN && digitalRead(PARKINGSWITCH == LOW)) {systemState = STATE_FAILURE; } //АВАРИЯ if (systemState = STATE_FAILURE) { digitalWrite(POLIVAKAFRONT, LOW); digitalWrite(POLIVAKABACK, LOW); digitalWrite(MOTORFORWARD,LOW); digitalWrite(MOTORBACK, LOW); digitalWrite (TESTLEDCLEANUP, LOW); digitalWrite(TESTLEDBACKROLL, LOW); digitalWrite(TESTLEDPARKING, HIGH); } else if (systemState == STATE_CLEANUP && digitalRead(KONIEC == LOW)) //УБОРКА { digitalWrite(TESTLEDCLEANUP, HIGH); digitalWrite(MOTORFORWARD, HIGH); digitalWrite(POLIVAKABACK, HIGH); delay(3000); } else if (systemState == STATE_CLEANUP && digitalRead(KONIEC == HIGH)) delay(10); { digitalWrite(TESTLEDCLEANUP, LOW); digitalWrite(MOTORFORWARD, LOW); systemState = STATE_HOLD; } if (systemState == STATE_HOLD); //ХОЛД { digitalWrite(POLIVAKAFRONT, HIGH); digitalWrite(POLIVAKABACK, HIGH); delay(5000); systemState == STATE_BACKROLL; } //ЗАДНИЙ ХОД if (systemState = STATE_BACKROLL && digitalRead (PARKINGSWITCH == LOW)) { digitalWrite(TESTLEDBACKROLL, HIGH); digitalWrite(TESTLEDCLEANUP, LOW); digitalWrite(MOTORBACK, HIGH); digitalWrite(POLIVAKABACK, LOW); digitalWrite(POLIVAKAFRONT, LOW); digitalWrite(MOTORFORWARD, LOW); delay (3000); } else if (systemState = STATE_BACKROLL && digitalRead (PARKINGSWITCH == HIGH)) { delay(10); digitalWrite(MOTORBACK, LOW); systemState = STATE_PARKING; } else (systemState = STATE_PARKING); { digitalWrite(TESTLEDBACKROLL, LOW); digitalWrite(TESTLEDPARKING, HIGH); digitalWrite(MOTORBACK, LOW); digitalWrite(POLIVAKABACK, LOW); digitalWrite(MOTORFORWARD, LOW); } }
Всё, вроде пошло дело, вопрос был в неправильной расстановке знаков. Закройте тему или удалите, более не актуально.