- /*
- 【Arduino】168種傳感器模塊系列實驗(資料 +代碼 +圖形 +仿真)
- 實驗一百四十二:LCD1602 字符液晶屏 輸入輸出擴展板 LCD Keypad Shield
- 實驗之二:ADC密鑰測試
- LiquidCrystal庫:IDE—工具—管理庫—搜索LiquidCrystal—安裝
- */
- #include <LiquidCrystal.h>
- LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
- char msgs[5][16] = {"Right Key OK ",
- "Up Key OK ",
- "Down Key OK ",
- "Left Key OK ",
- "Select Key OK"
- };
- int adc_key_val[5] = {50, 200, 400, 600, 800 };
- int NUM_KEYS = 5;
- int adc_key_in;
- int key = -1;
- int oldkey = -1;
- void setup()
- {
- lcd.clear();
- lcd.begin(16, 2);
- lcd.setCursor(0, 0);
- lcd.print("ADC key testing");
- }
- void loop()
- {
- adc_key_in = analogRead(0); // 從A0傳感器端讀取值
- key = get_key(adc_key_in); // 轉換為按鍵
- if (key != oldkey) // 如果檢測到按鍵
- {
- delay(50); // 等待解除緩沖時間
- adc_key_in = analogRead(0); // 從A0傳感器端讀取值
- key = get_key(adc_key_in); // 轉換為按鍵
- if (key != oldkey)
- {
- lcd.setCursor(0, 1);
- oldkey = key;
- if (key >= 0) {
- lcd.print(msgs[key]);
- }
- }
- }
- delay(100);
- }
- // 將ADC值轉換為密鑰號
- int get_key(unsigned int input)
- {
- int k;
- for (k = 0; k < NUM_KEYS; k++)
- {
- if (input < adc_key_val[k])
- {
- return k;
- }
- }
- if (k >= NUM_KEYS)k = -1; // 未按下有效鍵
- return k;
- }
復制代碼
|