Программирование промышленного робота MP9-c на базе Arduino

Тема в разделе "Arduino & Shields", создана пользователем Xtony, 27 май 2019.

  1. Xtony

    Xtony Нуб

    Написал программу для управления роботом, теперь просьба к знатокам ,

    нужно сделать так, чтобы после перехода в автоматический режим, операция не начиналась пока не будет нажата кнопка '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);
        }
      }
    }
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    Код (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);
          }
      }
    }
     
  3. Xtony

    Xtony Нуб

    Большое спасибо за помощь, а как сделать кнопку стоп, и бесконечный цикл автомата?