Клавиатура, Ардуино,LCD ввод данных

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем cegory, 9 фев 2017.

  1. cegory

    cegory Нуб

    Код (C++):
    #include <Keypad.h>
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>

    LiquidCrystal_I2C lcd(0x27,16,2);



    const byte ROWS = 4;
    const byte COLS = 4;

    char keys[ROWS][COLS] = {
      {'1','2','3','A'},
      {'4','5','6','B'},
      {'7','8','9','C'},
      {'*','0','#','D'}
    };
    byte rowPins[ROWS] = {11,10,9,8}; //connect to the row pinouts of the keypad
    byte colPins[COLS] = {7,6,5,4}; //connect to the column pinouts of the keypad



    Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

    unsigned int numar1=0, numar2=0;
    void setup(){

      Serial.begin(9600);
        lcd.begin(); // initialize the lcd
      lcd.backlight();

    }

    void loop() {
      char key = keypad.getKey();
      if(key ='A'){
      if (key != NO_KEY && (key=='1'||key=='2'||key=='3'||key=='4'||key=='5'||key=='6'||key=='7'||key=='8'||key=='9'||key=='0')){
     
                       
                              numar1=(numar1*10)+int(key-'0');
                              lcd.setCursor(0,0);
                              lcd.print(numar1);
                           
                                       }

    }
                                     
       if(key ='B'){
      if (key != NO_KEY && (key=='1'||key=='2'||key=='3'||key=='4'||key=='5'||key=='6'||key=='7'||key=='8'||key=='9'||key=='0')){
     
                       
                              numar2=(numar2*10)+int(key-'0');
                              lcd.setCursor(0,0);
                              lcd.print(numar1);
                           
                                       }
                                }
        }
     
  2. cegory

    cegory Нуб

    Прошу подсказать, кто может. Нужно ввести с матричной клавиатуры на LCD 1602 две переменных, пригодных для независимых операций (сброс, корректировка). Примерным образом - нажимаем клавишу "А", вводим число в одной строке дисплея, затем нажимаем "В" и вводим второе число в другой строке. Отношения к программированию не имею, написал как мог два скетча, не судите строго, если неграмотно. Оба скетча не работают. В чем ошибка?
     
  3. cegory

    cegory Нуб

    Второй нерабочий скетч

    Код (C++):
    #include <Keypad.h>
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>

    LiquidCrystal_I2C lcd(0x27,16,2);



    const byte ROWS = 4; //4 rows
    const byte COLS = 4; //3 columns
    //Define the Keymap
    char keys[ROWS][COLS] = {
      {'1','2','3','A'},
      {'4','5','6','B'},
      {'7','8','9','C'},
      {'*','0','#','D'}
    };
    byte rowPins[ROWS] = {11,10,9,8}; //connect to the row pinouts of the keypad
    byte colPins[COLS] = {7,6,5,4}; //connect to the column pinouts of the keypad

    long first = 0;
    long second = 0;


    //Create the keypad
    Keypad kpd = Keypad (makeKeymap(keys), rowPins, colPins, ROWS, COLS);




    void setup() {
      Serial.begin(9600);
        lcd.begin(); // initialize the lcd
      lcd.backlight();
    }

    void loop() {
       char key = kpd.getKey();
        switch(key)
      {
    if(key ='A'){
     

      case '0' ... '9': // This keeps collecting the first value until a operator is pressed "+-*/"
        lcd.setCursor(0,0);
        first = first * 10 + (key - '0');
        lcd.print(first);
        break;
    }
    }


        switch(key)
      {

    if(key ='B'){
     
        case '0' ... '9': // This keeps collecting the first value until a operator is pressed "+-*/"
        lcd.setCursor(0,1);
        second = second * 10 + (key - '0');
        lcd.print(second);
        break;
    }
    }

    }