2015年9月7日月曜日
LCDモジュール1602 key入力のサンプルスケッチ
//****************************************
//押したKey名をLCDに表示する。
//keyはチャタ取りをする。
//AD値をLCDに表示する。
//key 0 = RIGHT
//key 1 = UP
//key 2 = DOWN
//key 3 = LEFT
//key 4 = SELECT
//****************************************
#include <LiquidCrystal.h>
#include <MsTimer2.h>
LiquidCrystal lcd(8,9,4,5,6,7); //lcdタイプの変数を定義
int adc_key_val[5] ={70, 200, 400, 600, 900 };
String keyname[5] = {"RIGHT","UP","DOWN","LEFT","SELECT"};
int NUM_KEYS = 5;
volatile int adc_key_in;
volatile int keyNo=-1;
int newkey=-1;
int oldkey=-1;
boolean keyEnable = false;
//*SETUP****************************
void setup() {
MsTimer2::set(50, timerInt); // 50ms毎 タイマー割り込み処理名を設定
lcd.begin(16, 2); // 行と列を設定
MsTimer2::start(); //タイマースタート
}
//Main LOOP**************************
void loop() {
//key 入力ADポートで読み込んだAD値を表示する。
lcd.setCursor(0,0);
lcd.print("PushKey! AD= ");
lcd.setCursor(12,0); //カーソルをAD=の後に持ってくる。
lcd.print(adc_key_in); // AD値を表示
//key入力があったら、key番号をLCDに表示する。
if(keyNo != -1) {
lcd.setCursor(0,1); //カーソルを2行目頭に持ってくる
lcd.print("key= "); // key Noを表示
lcd.setCursor(5,1);
lcd.print(keyname[keyNo]);
keyNo = -1; //keyのフラグをクリア
}
}
//*********************************
void timerInt() {
// ADポートからkey電圧を読み取る。表示する。
adc_key_in = analogRead(0);
//どのkeyに一致するかチェック newkeyに入れる。
newkey = -1;
int k;
for (k = 0; k < NUM_KEYS; k++)
{
if (adc_key_in < adc_key_val[k]) {
newkey= k;
break;
}
}
// key 入力があり、かつ古いkey入力と一致すれば、key入力確定
//一度keyが確定したら、keyがoffになるまで入力は無効とする。
if(newkey != -1) {
if(keyEnable == true){
if(newkey == oldkey){
keyNo = newkey;
keyEnable = false;
}
}
}
else {
keyEnable = true;
}
//keyデータをoldkeyに保存
oldkey = newkey;
}
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿