Использование матричной клавиатуры

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

  1. Limoney

    Limoney Гик

  2. Xtony

    Xtony Нуб

    нет,это техникум, среднее специальное образование
     
  3. Xtony

    Xtony Нуб

    Код (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', тобишь пуск, так же сделать кнопку "СТОП" (кнопка 'D') , пробовал разные варианты, не выходит это сделать
     

    Вложения:

    • TEST.ino
      Размер файла:
      4,1 КБ
      Просмотров:
      381