いろいろ注意
- 過去ログに注意!!!
- インクルドファイルがわかる人
目的
十字キーから値を読み込んでシリアルポートに出力する
結果
イメージ
回路(各自、元の回路図を確認)
プログラム
//INPUT_KEY_C0116_1
//インクルド
#include <Arduino.h>
#include "INPUT_KEY.h"
//初期化
void setup() {
//シリアルポートの初期化
Serial.begin(9600); // シリアル通信の速度を9600bpsにする。
//ADCの初期化(3.3Vを4096に分解)
analogReadResolution(12); //センサーの分解度4096
}//setup
//メインループ
void loop() {
// ボタンの信号の読み込み
int a = input_key();
// ボタンの状態表示
Serial.println(a);
// 速すぎるからウェート
delay(1000); // 0.3秒待つ
}//loop
INPUT_KEY.cpp
//INPUT_KEY.cpp
//インクルド
#include <Arduino.h>
#include "INPUT_KEY.h"
//定義 デバッグ
//char *key_num_s[] = {"NO_KEY","RIGHT","UP","DOWN","LEFT","SELECT"};
//inupt(入力)mV 比較ルーチン
int i_key(int Voltage)
{
//output キー番号
Voltage = Voltage / 100;
if ( Voltage < SELECT_t_LEFT ) { //3
return (N_SELECT);//戻り値(5)
} else if ( Voltage < LEFT_t_DOWN ) { //3-10
return (N_LEFT);//戻り値(4)
} else if ( Voltage < DOWN_t_UP ) { //10-16
return (N_DOWN);//戻り値(3)
} else if ( Voltage < UP_t_RIGHT ) { //16-23
return (N_UP);//戻り値(2)
} else if ( Voltage < RIGHT_t_NO_KEY ) { //23-30
return (N_RIGHT);//戻り値(1)
} else { //30-
return (N_NO_KEY);//戻り値(0)
}//end if
}//i_key
//押されるまで待ってキー番号を返す
int input_key(void) {
int sensorValue; //センサーの値(十字キー)
int Voltage; //(電圧)
int key_num_in1; //キー番号 比較用1
int key_num_in2; //キー番号 比較用2
int key_num = 0; //キー番号 戻り値
while (key_num == 0) {
sensorValue = analogRead(A8); //十字キーから値を読み込む
Voltage = (sensorValue * 3300) >> 12; //十字キーの値から電圧に変換
key_num_in1 = i_key(Voltage); //電圧からキー番号に変換
//key_num_in1 = 3; //デバッグ
if (key_num_in1 != 0) { //キー番号が0以外
delay(3); // 3m秒待つ
sensorValue = analogRead(A8); //十字キーから値を読み込む
Voltage = (sensorValue * 3300) >> 12; //十字キーの値から電圧に変換
key_num_in2 = i_key(Voltage); //電圧からキー番号に変換
//key_num_in2 = 3; //デバッグ
if (key_num_in1 == key_num_in2) { //キー番号が同じ時
key_num = key_num_in2;
}//endif
}//endif
//if (key_num == 0) {key_num = 9;}//debug
}//while
//printf("key_num = [%d]\n",key_num); //debug
return (key_num); //キー番号を返す
}//input_key
INPUT_KEY.h
//INPUT_KEY.h
#define N_SELECT 5
#define N_LEFT 4
#define N_DOWN 3
#define N_UP 2
#define N_RIGHT 1
#define N_NO_KEY 0
#define P_SELECT ((((int)(0.0*100))+5)/10)
#define P_LEFT ((((int)(0.67*100))+5)/10)
#define P_DOWN ((((int)(1.32*100))+5)/10)
#define P_UP ((((int)(2.01*100))+5)/10)
#define P_RIGHT ((((int)(2.65*100))+5)/10)
#define P_NO_KEY ((((int)(3.3*100))+5)/10)
#define SELECT_t_LEFT ((P_SELECT+P_LEFT)/2)
#define LEFT_t_DOWN ((P_LEFT+P_DOWN)/2)
#define DOWN_t_UP ((P_DOWN+P_UP)/2)
#define UP_t_RIGHT ((P_UP+P_RIGHT)/2)
#define RIGHT_t_NO_KEY ((P_RIGHT+P_NO_KEY)/2)
//プロトタイプ宣言
int i_key(int Voltage); //キーの比較
int input_key(void); //押されるまで待ってキー番号を返す