Написал программу для управления роботом, теперь просьба к знатокам , нужно сделать так, чтобы после перехода в автоматический режим, операция не начиналась пока не будет нажата кнопка 'C', тобишь пуск, так же сделать кнопку "СТОП" (кнопка 'D') , пробовал разные варианты, не выходит это сделать Код (C++): #include <Keypad.h> // Подключаем библиотеку int HWAT = 0; int BACK = 1; int FORWARD = 2; int LEFT = 3; int RIGHT = 4; int UP = 5; int DOWN = 6; int ZOOM = 7; int ledAUTO = 12; int ledRU4 = 13; const byte ROWS = 4; // 4 строки const byte COLS = 4; // 4 столбца char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowPins[ROWS] = {17, 16, 15, 14}; byte colPins[COLS] = {11, 10, 9, 8}; Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup(){ pinMode(HWAT, OUTPUT); pinMode(BACK, OUTPUT); pinMode(FORWARD, OUTPUT); pinMode(LEFT, OUTPUT); pinMode(RIGHT, OUTPUT); pinMode(UP, OUTPUT); pinMode(ZOOM, OUTPUT); digitalWrite(HWAT, LOW); digitalWrite(BACK, LOW); digitalWrite(FORWARD, LOW); digitalWrite(LEFT, LOW); digitalWrite(RIGHT, LOW); digitalWrite(UP, LOW); digitalWrite(DOWN, LOW); digitalWrite(ZOOM, LOW); } void loop(){ char key = keypad.getKey(); switch(key){ //Ручной режим управления case 'A': { digitalWrite(ledAUTO, LOW) ; digitalWrite(ledRU4, HIGH) ; digitalWrite(ZOOM, HIGH) ; delay(100) ; digitalWrite(ZOOM, LOW) ; digitalWrite(HWAT, LOW); digitalWrite(BACK, LOW); digitalWrite(FORWARD, LOW); digitalWrite(LEFT, LOW); digitalWrite(RIGHT, LOW); digitalWrite(UP, LOW); digitalWrite(DOWN, LOW); digitalWrite(ZOOM, LOW); break; case '2': { digitalWrite(ZOOM, HIGH) ; delay(100) ; digitalWrite(ZOOM, LOW) ; digitalWrite(BACK, LOW); delay (500); digitalWrite(FORWARD, HIGH); break; } case '4': { digitalWrite(ZOOM, HIGH) ; delay(100) ; digitalWrite(ZOOM, LOW) ; digitalWrite(RIGHT, LOW); delay(500); digitalWrite(LEFT, HIGH); break; } case '5': { digitalWrite(ZOOM, HIGH) ; delay(100) ; digitalWrite(ZOOM, LOW) ; digitalWrite(HWAT, HIGH); delay(3000); digitalWrite(HWAT, LOW); break; } case '6': { digitalWrite(ZOOM, HIGH) ; delay(100) ; digitalWrite(ZOOM, LOW) ; digitalWrite(LEFT, LOW); delay(500); digitalWrite(RIGHT, HIGH); break; } case '8': { digitalWrite(ZOOM, HIGH) ; delay(100) ; digitalWrite(ZOOM, LOW) ; digitalWrite(FORWARD, LOW); delay(500); digitalWrite(BACK, HIGH); break; } case '*': { digitalWrite(ZOOM, HIGH) ; delay(100) ; digitalWrite(ZOOM, LOW) ; digitalWrite(DOWN, LOW); delay(500); digitalWrite(UP, HIGH); break; } case '#': { digitalWrite(ZOOM, HIGH) ; delay(100) ; digitalWrite(ZOOM, LOW) ; digitalWrite(UP, LOW); delay(500); digitalWrite(DOWN, HIGH); break; } break; } //Автоматический режим (одиночный цикл) case 'B': { digitalWrite(ledRU4, LOW) ; digitalWrite(ledAUTO, HIGH) ; digitalWrite(ZOOM, HIGH) ; delay(100) ; digitalWrite(ZOOM, LOW) ; delay(3000); digitalWrite(HWAT, HIGH); delay (1500); digitalWrite(BACK, HIGH); delay (1500); digitalWrite(LEFT, HIGH); delay (2000); digitalWrite(BACK, LOW); delay (500); digitalWrite(FORWARD, HIGH); delay (1000); digitalWrite(HWAT, LOW); delay (1000); digitalWrite(UP, HIGH); delay (1000); digitalWrite(LEFT, LOW); digitalWrite(RIGHT, HIGH); delay (1000); digitalWrite(UP, LOW); delay (4000); digitalWrite(HWAT, HIGH); delay (1000); digitalWrite(FORWARD, LOW); delay (500); digitalWrite(BACK, HIGH); delay (1000); digitalWrite(ZOOM, HIGH); delay (500); digitalWrite(ZOOM, LOW); delay (500); digitalWrite(ZOOM, HIGH); delay (500); digitalWrite(ZOOM, LOW); delay (500); digitalWrite(ZOOM, HIGH); delay (500); digitalWrite(ZOOM, LOW); delay (500); digitalWrite(RIGHT, LOW); delay (500); digitalWrite(LEFT, HIGH); delay (500); } } }
Код (C++): #include <Keypad.h> // Подключаем библиотеку const byte HWAT = 0; const byte BACK = 1; const byte FORWARD = 2; const byte LEFT = 3; const byte RIGHT = 4; const byte UP = 5; const byte DOWN = 6; const byte ZOOM = 7; const byte ledAUTO = 12; const byte ledRU4 = 13; const byte ROWS = 4; // 4 строки const byte COLS = 4; // 4 столбца char keys[ROWS][COLS] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; const byte rowPins[ROWS] = {17, 16, 15, 14}; const byte colPins[COLS] = {11, 10, 9, 8}; Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup() { pinMode(HWAT, OUTPUT); pinMode(BACK, OUTPUT); pinMode(FORWARD, OUTPUT); pinMode(LEFT, OUTPUT); pinMode(RIGHT, OUTPUT); pinMode(UP, OUTPUT); pinMode(ZOOM, OUTPUT); digitalWrite(HWAT, LOW); digitalWrite(BACK, LOW); digitalWrite(FORWARD, LOW); digitalWrite(LEFT, LOW); digitalWrite(RIGHT, LOW); digitalWrite(UP, LOW); digitalWrite(DOWN, LOW); digitalWrite(ZOOM, LOW); } void loop() { char key = keypad.getKey(); switch (key) { //Ручной режим управления case 'A': { digitalWrite(ledAUTO, LOW) ; digitalWrite(ledRU4, HIGH) ; digitalWrite(ZOOM, HIGH) ; delay(100) ; digitalWrite(ZOOM, LOW) ; digitalWrite(HWAT, LOW); digitalWrite(BACK, LOW); digitalWrite(FORWARD, LOW); digitalWrite(LEFT, LOW); digitalWrite(RIGHT, LOW); digitalWrite(UP, LOW); digitalWrite(DOWN, LOW); digitalWrite(ZOOM, LOW); break; case '2': { digitalWrite(ZOOM, HIGH) ; delay(100) ; digitalWrite(ZOOM, LOW) ; digitalWrite(BACK, LOW); delay (500); digitalWrite(FORWARD, HIGH); break; } case '4': { digitalWrite(ZOOM, HIGH) ; delay(100) ; digitalWrite(ZOOM, LOW) ; digitalWrite(RIGHT, LOW); delay(500); digitalWrite(LEFT, HIGH); break; } case '5': { digitalWrite(ZOOM, HIGH) ; delay(100) ; digitalWrite(ZOOM, LOW) ; digitalWrite(HWAT, HIGH); delay(3000); digitalWrite(HWAT, LOW); break; } case '6': { digitalWrite(ZOOM, HIGH) ; delay(100) ; digitalWrite(ZOOM, LOW) ; digitalWrite(LEFT, LOW); delay(500); digitalWrite(RIGHT, HIGH); break; } case '8': { digitalWrite(ZOOM, HIGH) ; delay(100) ; digitalWrite(ZOOM, LOW) ; digitalWrite(FORWARD, LOW); delay(500); digitalWrite(BACK, HIGH); break; } case '*': { digitalWrite(ZOOM, HIGH) ; delay(100) ; digitalWrite(ZOOM, LOW) ; digitalWrite(DOWN, LOW); delay(500); digitalWrite(UP, HIGH); break; } case '#': { digitalWrite(ZOOM, HIGH) ; delay(100) ; digitalWrite(ZOOM, LOW) ; digitalWrite(UP, LOW); delay(500); digitalWrite(DOWN, HIGH); break; } break; } //Автоматический режим (одиночный цикл) case 'B': { do { digitalWrite(ledAUTO, !digitalRead(ledAUTO)); delay(32); } while keypad.getKey() != 'C'; digitalWrite(ledRU4, LOW) ; digitalWrite(ledAUTO, HIGH) ; digitalWrite(ZOOM, HIGH) ; delay(100) ; digitalWrite(ZOOM, LOW) ; delay(3000); digitalWrite(HWAT, HIGH); delay (1500); digitalWrite(BACK, HIGH); delay (1500); digitalWrite(LEFT, HIGH); delay (2000); digitalWrite(BACK, LOW); delay (500); digitalWrite(FORWARD, HIGH); delay (1000); digitalWrite(HWAT, LOW); delay (1000); digitalWrite(UP, HIGH); delay (1000); digitalWrite(LEFT, LOW); digitalWrite(RIGHT, HIGH); delay (1000); digitalWrite(UP, LOW); delay (4000); digitalWrite(HWAT, HIGH); delay (1000); digitalWrite(FORWARD, LOW); delay (500); digitalWrite(BACK, HIGH); delay (1000); digitalWrite(ZOOM, HIGH); delay (500); digitalWrite(ZOOM, LOW); delay (500); digitalWrite(ZOOM, HIGH); delay (500); digitalWrite(ZOOM, LOW); delay (500); digitalWrite(ZOOM, HIGH); delay (500); digitalWrite(ZOOM, LOW); delay (500); digitalWrite(RIGHT, LOW); delay (500); digitalWrite(LEFT, HIGH); delay (500); } } }