Keypad

Тема в разделе "Arduino & Shields", создана пользователем bogdan_z, 6 мар 2017.

  1. bogdan_z

    bogdan_z Нерд

    Как осуществить ввод десятичных чисел после точкой?
     
    arkadyf нравится это.
  2. vvr

    vvr Инженерище

    а вы целые числа уже научились вводить?
     
  3. bogdan_z

    bogdan_z Нерд

    да
    Код (C++):
    #include <Keypad.h>
    #include <LiquidCrystal.h>

    LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7)

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

    char keys[ROWS][COLS] = {
      {'1','2','3'},
      {'4','5','6'},
      {'7','8','9'},
      {'*','0','#'}
    };

    byte rowPins[ROWS] = {5, 4, 3, 2};
    byte colPins[COLS] = {8, 7, 6};
    byte mainMenuPage = 1;
    byte mainMenuPageOld = 1;
    byte mainMenuTotal = 4;

    char btn_push, key;

    float t;
    int keypad_value_old = 0;

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

    void setup()
    {
      lcd.begin(16,2);
      MainMenuDisplay();
      delay(1000);
    }
     
    void loop()
    {
     
      btn_push = ReadKeypad();
     
        MainMenuBtn();
     
        if(btn_push == 'S')
        {
            WaitBtnRelease();
            switch (mainMenuPage)
            {
                case 1:
                  MenuA();
                  break;
                case 2:
                  MenuB();
                  break;
                case 3:
                  MenuC();
                  break;
                case 4:
                  MenuD();
                  break;
            }
              MainMenuDisplay();
              WaitBtnRelease();
        }
       
        delay(10);
    }

    void MenuA()
    {
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Inside Menu A");

    while(1)
    {
    key=keypad.getKey();
    if(key == '*')
    {
      t = 0;
      lcd.clear();
    }
    if (key >= '0' && key <= '9')
    {
    t=t*10+(key-'0');
    lcd.setCursor(0,0);
    lcd.print(t);
    }
    if (key == '#' && t !=0)
    {
    float y=t;
    lcd.clear();
    lcd.print(y);
    }
    }

        while(ReadKeypad()!= 'L')
        {
               
        }
    }
    void MenuB()
    {
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Inside Menu B");
     
        while(ReadKeypad()!= 'L')
        {
           
         
        }
    }
    void MenuC()
    {
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Inside Menu C");
     
        while(ReadKeypad()!= 'L')
        {
           
         
        }
    }
    void MenuD()
    {
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Inside Menu D");
     
        while(ReadKeypad()!= 'L')
        {
           
         
        }
    }
    void MainMenuDisplay()
    {
        lcd.clear();
        lcd.setCursor(0,0);
        switch (mainMenuPage)
        {
            case 1:
              lcd.print("1. Menu A");
              break;
            case 2:
              lcd.print("2. Menu B");
              break;
            case 3:
              lcd.print("3. Menu C");
              break;
            case 4:
              lcd.print("4. Menu D");
              break;
        }
    }
    void MainMenuBtn()
    {
        WaitBtnRelease();
        if(btn_push == 'U')
        {
          mainMenuPage--;
            if(mainMenuPage == 0)
              mainMenuPage = mainMenuTotal;
              }
        else if(btn_push == 'D')
        {
            mainMenuPage++;
            if(mainMenuPage > mainMenuTotal)
              mainMenuPage = 1;  
        }
     
        if(mainMenuPage != mainMenuPageOld)
        {
            MainMenuDisplay();
            mainMenuPageOld = mainMenuPage;
        }
    }
    char ReadKeypad()
    {
     
      char keypad_value = keypad.getKey();
      if(keypad_value == keys[1][2])
        return 'R';
      else if(keypad_value == keys[0][1])
        return 'U';
      else if(keypad_value == keys[2][1])
        return 'D';
      else if(keypad_value == keys[3][0])
        return 'L';
      else if(keypad_value == keys[3][2])
        return 'S';
      else
        return 'N';
    }
    void WaitBtnRelease()
    {
        while(keypad.getKey() != NO_KEY)
      {
       
      }
    }
     
  4. vvr

    vvr Инженерище