Robofun 機器人論壇

標題: 3*4 keypad 如何做出 完成輸入鍵 [打印本頁]

作者: avril90    時間: 2015-7-22 14:51
標題: 3*4 keypad 如何做出 完成輸入鍵
小弟近日接了一個3*4的keypad 想利用此鍵盤來修改程式裡pwm輸出的功率





現在遇到的問題是:
當我輸入數值後,我希望能按下#來完成輸入
現階段鍵盤只要輸入一個數,LCD就會馬上顯示出來
那麼我設定的代碼 ex. char keyin = keypad.getKey();
keyin 之值 永遠只會是個位數,無法是90、100

想請問各位大大,有些甚麼建議呢?

目前所用的程式碼如下
#include <LiquidCrystal.h>
#include <Keypad.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// 3x4 Keypad
const byte ROWS = 4; // 4 Rows
const byte COLS = 3; // 3 Columns

// 定義 Keypad 的按鍵
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};

// 定義 Keypad 連到 Arduino 的接腳
byte rowPins[ROWS] = {32, 22, 24, 28}; // 連到 Keypad 的 4 個 Rows: Row0, Row1, Row2, Row3
byte colPins[COLS] = {30, 34, 26};   // 連到 Keypad 的 3 個 Columns: Column0, Column1, Column2

// 建立 Keypad 物件
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );


void setup() {
  Serial.begin(9600);
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);


}

void loop() {
   // 讀取 Keypad 的輸入
  char key = keypad.getKey();

  // NO_KEY 代表沒有按鍵被按下
  if (key != NO_KEY){
    // 假如有按鍵被按下,就印出按鍵對應的字元
    Serial.println(key);
    lcd.print(key);
  }
}
作者: YeH    時間: 2015-7-27 16:14
本帖最後由 YeH 於 2015-7-27 16:17 編輯

抱歉我也才學沒多久,若有錯請見諒
if (key != NO_KEY)//是讀取到有案案件才會傳入訊息
所以每次loop一次才會只輸入一個字元

所以可能要更正

int a = 0;
void loop() {
   // 讀取 Keypad 的輸入
  char key = keypad.getKey();
  // NO_KEY 代表沒有按鍵被按下

if (key != NO_KEY){
     int b = key - 48;//因為是ASCII數值,所以才要-48
     if(key == '#'){
            Serial.println(a);
            lcd.print(a);
            a=0;
}
     else if(key == '*'){
            a =0;//輸入錯誤從新開始打一次
}
      else{
            a = a*10+b;
}
}}


其他前面都因該不需要額外更正
變成輸入後,你打的數值,直到你按下#字之前都不會顯示出你所輸入的數值
*字是你假如有個字輸入錯誤,要更正時按下,但要從頭開始輸入
作者: avril90    時間: 2015-7-29 14:30
回復 2# YeH


   感謝大大的幫忙   已順利做出來啦
   謝謝!!
   已後還望大大能多多觀照 3Q




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2