2014年8月18日 星期一

LCD KeyPad Shield (Arduini Use)


LCD KeyPad Shield

所有的電路設計,內部都有許多的狀態資料,如何將這些狀態資料顯示出來,我們就必須具備一個獨立的顯示螢幕與簡單的輸入按鈕,方能稱為一個完善的設計。
Arduino開發板有許多廠家設計製造許多周邊模組商品,見 29LCD 1602 button整合的LCD KeyPad模組,由於許多實驗中,都需要LCD顯示模組與按鈕模組,為了方便,本實驗採用這個模組(DFRobot, 2013)






29 LCD Keypad Shield
資料來源:(DFRobot, 2013)
有許多廠家為Arduino開發板設計製造許多周邊模組商品,見 29LCD 1602 常用按鈕(buttons)整合設計而成的LCD Keypad Shield模組(DFRobot, 2013)。由於許多產品設計同時需要顯示資訊與簡單驗按鈕輸入,亦即是需要LCD顯示模組與按鈕模組,為了方便,本實驗採用這個模組。

30 LCD Keypad Shield PCB Layout
資料來源:(DFRobot, 2013)
30所示,可以見到LCD Keypad Shield接腳圖,並請參考 29右側圖,可以得到 4正確的接腳圖。

4 LCD Keypad Shield接腳表
Keypad接腳
Arduino開發板接腳
解說
D4
Arduino digital output pin 4
LCD 1602 資料接腳
D5
Arduino digital output pin 5
D6
Arduino digital output pin 6
D7
Arduino digital output pin 7
RS
Arduino digital output pin 8
Register Selections
Enable
Arduino digital output pin 9
ENABLE SIGNAL
A0
Arduino Analog input pin 0
Key buttons輸入(類比)
5V
Arduino pin 5V
5V 陽極接點
GND
Arduino pin Gnd
共地接點

本章節為了測試keypad shield 使用情形,使用下列程式進行keypad shieldLCD 1602畫面顯示,並測試按鈕(Buttons)的讀取值的功能,可以見 31為成功的keypad shield測試畫面。

KeyPads Shield測試程式(keypad_keytest1)
    //Using LiquidCrystal library
    #include <LiquidCrystal.h>
    /*******************************************************
    This program will test the LCD panel and the buttons
    ********************************************************/
    // select the pins used on the LCD panel
    LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
    // LiquidCrystal(rs, enable, d4, d5, d6, d7)
    // LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)
    // LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6
    // define some values used by the panel and buttons
    int lcd_key = 0;
    int adc_key_in = 0;
    #define btnRIGHT 0
    #define btnUP 1
    #define btnDOWN 2
    #define btnLEFT 3
    #define btnSELECT 4
    #define btnNONE 5
    // read the buttons
    int read_LCD_buttons()
    {
    adc_key_in = analogRead(0); // read the value from the sensor
        if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result
        if (adc_key_in < 50) return btnRIGHT;
    if (adc_key_in < 250) return btnUP;
    if (adc_key_in < 450) return btnDOWN;
    if (adc_key_in < 650) return btnLEFT;
    if (adc_key_in < 850) return btnSELECT;
    return btnNONE; // when all others fail, return this...
    }
    void setup()
    {
    lcd.begin(16, 2); // start the library
    lcd.setCursor(0,0);
    lcd.print("Push the buttons"); // print the message
    }
    void loop()
    {
    lcd.setCursor(9,1); // move cursor to second line "1" and 9 spaces over
    lcd.print(millis()/1000); // display seconds elapsed since power-up
    lcd.setCursor(0,1); // move to the begining of the second line
    lcd_key = read_LCD_buttons(); // read the buttons
    switch (lcd_key)  {
    case btnRIGHT:
    {
    lcd.print("RIGHT ");
    break;
    }
    case btnLEFT:
    {
    lcd.print("LEFT ");
    break;
    }
    case btnUP:
    {
    lcd.print("UP ");
    break;
    }
    case btnDOWN:
    {
    lcd.print("DOWN ");
    break;
    }
    case btnSELECT:
    {
    lcd.print("SELECT");
    break;
    }
    case btnNONE:
    {
    lcd.print("NONE ");
    break;
    }
    }
        }
資料來源:http://www.dfrobot.com/wiki/index.php?title=Arduino_LCD_KeyPad_Shield_(SKU:_DFR0009)#Example_use_of_LiquidCrystal_library




31 keypadshield測試畫面

沒有留言:

張貼留言