2015年9月7日月曜日
LCDモジュール1602 シリアル通信とLCD表示のサンプルスケッチ
//*******************************************
//押したeyのNo.をLCDに表示し、Serialに出力
//keyはチャタ取りをする。
//
//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 };
int NUM_KEYS = 5;
int adc_key_in;
int key=-1;
int newkey=-1;
int oldkey=-1;
boolean keyEnable = false;
//*********************************
void setup() {
MsTimer2::set(50, timerInt); // 50ms毎 タイマー割り込み処理名を設定
lcd.begin(16, 2); // 行と列を設定
lcd.print("Push Key !"); //Push Keyを表示。
MsTimer2::start(); //タイマースタート
Serial.begin(115200); //Serial port 設定
}
//Main LOOP**************************
void loop() {
//key入力があったら、LCDに表示し、Serialポートへ出力。
if(key != -1) {
//LCDに表示
lcd.clear(); // 画面をクリア
lcd.print("keyNo= "); // key Noを表示
lcd.print(key);
//Serial portへ出力
Serial.print("keyNo= ");
Serial.println(key);
key = -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){
key = newkey;
keyEnable = false;
}
}
}
else {
keyEnable = true;
}
//keyデータをoldkeyに保存
oldkey = newkey;
}
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿