スイッチ、割り込み制御確認
スイッチの長押し/短押しでモードの変更
LEDの点灯/消灯/点滅で変更
まで完了
table:状態遷移(LED)
電源ON時 MODE1の時 MODE2の時 MODE3の時
KEY OFF MODE1へ遷移(キーを読み込まない) 何もしない 何もしない 何もしない
KEY1 短押し時 何もしない MODE2へ MODE1へ MODE1へ
KEY1 長押し時 何もしない 何もしない MODE3へ MODE2へ
下記表の名前省略及び表している数値
ucFix :GKeyCtrlInf.ucFix →現在のボタンの確定している状態を表す。
ucInp :GKeyCtrlInf.ucInp →今のボタンの状態を表す。
ucPrev :GKeyCtrlInf.ucPrev →1回前に関数が実行された時のボタンの状態を表す。
BIT_KEY1 :0x01<<13
KEY1_SET :0x01
ucFixが0 :KEY入力無し
ucFixがKEY1_SET:KEY1が押されている状態
table:状態遷移
KEY入力 ucFixの状態 KEY1_IN usKey1 ucInp ucFix & KEY1_SET(①) ucInp & KEY1_SET(②) ①と②が違う値の時
KEY OFF時 0 0 0 0 0 0 -
KEY1 ON時 0 1 BIT_KEY1 KEY1_SET 0 KEY1_SET KEY1 ONコードをバッファに格納
KEY OFF時 KEY1_SET 0 0 0 KEY1_SET 0 KEY1 OFFコードをバッファに格納
KEY1 ON時 KEY1_SET 1 BIT_KEY1 KEY1_SET KEY1_SET KEY1_SET -
KEY2 ON時
KEY3 ON時
チャタリング除去が終ると、KEY1 ONコードをバッファに格納し、キーを押している間、KEY1の長押しカウンタを更新する。
code:c
#define KEY2_IN() ( InGPIO(PORT_KEY2,BIT_KEY234,0)) ///< KEY2,3,4 ON/OFF確認 PA6:KEY2:64
PA7:KEY3:128
PA8:KEY4:256
PA6が3.3Vになると、64(0b1000000)が出力
PA7が3.3Vになると、128(0b10000000)が出力
PA8が3.3Vになると、256(0b100000000)が出力
code:c
#define KEY2_IN() (~InGPIO(PORT_KEY2,BIT_KEY234,0)) ///< KEY2,3,4 ON/OFF確認 //全てGNDの時:65535:1111111111111111
AD変換
20msに1回AD変換取り込み
200msに1回AD変換値表示
200ms間のAD平均値を表示
AD変換数:10回
メイン処理でAD平均値取得
AD監視要求取得:
trueの時、平均値取得処理を行う。
AD監視要求をfalseに変更
移動平均AD値を取得: AdcApi_BattAdGetMoveAve
AD値を電圧値に変換:AD値*3000/4095;
値出力(printf)
AD変換取得フラグ:
GAdBattInf.bWatchReq : AD監視要求フラグ
AD変換数が最大数(今回は10回)になったらtureにして、AD変換監視要求を許可する。