//230310~ 0322 エンコーダだけで操作する仕様
//画面切り替えで液晶クリアしたい PROGMEM使わなくてもテキスト書ける
//ライブラリ OK
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // I2C: 0x27, 16x2 LCD
//各種設定
/*****************************************************************************/
//エンコーダ OK +-4でカウントする int 変数=count/4;で記述すること
volatile bool pinA = false;
volatile bool pinB = false;
volatile byte current = 0;
volatile byte previous = 0;
volatile long count = 0;
int cw[] = {1, 3, 0, 2};
int ccw[] = {2, 0, 3, 1};
int input_A = 2;
int input_B = 3;
boolean cwFlag=false; //時計回転フラグ
boolean ccwFlag=false;//半時計回転フラグ
//センタークリック OK
#define centerButton 4
int previousButtonState = HIGH; //前回Read
int currentButtonState = HIGH; //今回Read
int pressCount = 0; //センタークリックカウンタ
boolean flagPressed = false; //フラグ
//テキスト入力 PROGMEM要らない ここ未テスト
/*
count = (count + maxCode) % maxCode;
c = count + 0x20;
lcd.print(c);
lcd.setCursor(x, y);
*/
const int minCode = 0x20; //最小コード(ここを0として数える)0x20
const int maxCode = 96; //最小コードから数えた最大コードの値(どこまで使うか)
char c; //char d =0xDF;//°
//画面切り替え OK
int view=0; // Layer1 0=Main描写,1=Menu描写
//セッティングモード切替 OK lcd.print(settingModeStrings[settingMode]); //0=END 1=Custom
int settingMode = 0; //0="ENDsetting",1="CustomMode"
char *settingModeStrings[]={ //0=END 1=Custom
"END Setting ","Custom Setting"
};
//RTCデータとか機材情報とか
int month=0; //monthの値
char *monthStrings[]={ //月
"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"
};
int day=0; //日の値
int year=0; //年の値
int hour=0; //時の値
int minute=0; //分の値
int setNo=0; //セットナンバーの値
int encPos = 0; //文字ポジション
/*****************************************************************************/
//LCDカーソル位置
int x = 0;
int y = 0;
//画面とモード切替
int val=0; //一時変数
int layer = 0; //センタークリックで画面レイヤーを変える 0=main/menu 1=menuNo選択と">"表示 2=Menu毎の変数変更
int changeView = 0; //MENU<->MAIN画面切替
//boolean menuView = false; //menuViewの状態(使うか?)
//メニュー項目
int menuNo = 0; //layer1 switch case 0=end 1=month 2=day 3=year 4=hour 5=minute 6=setNo 7=Text
boolean LCDclearFlag = false; //LCD消去コマンド(1度だけ)のON/OFF
/*****************************************************************************/
//セットアップ
/*****************************************************************************/
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
//センターボタン
pinMode(centerButton, INPUT_PULLUP);
//割り込み宣言
attachInterrupt(digitalPinToInterrupt(input_A), rotary, CHANGE);
attachInterrupt(digitalPinToInterrupt(input_B), rotary, CHANGE);
//初期位置取得
rotary();
// lcd.print(0);
// lcd.setCursor(0, 0);
// lcd.cursor();
// lcd.blink(); //カーソル点滅
// encPos=16; //最初は0を表示
//カーソル文字 呼び出し(2) 0x02;
byte charData_2[8] = {
B01000,
B01100,
B01110,
B01111,
B01110,
B01100,
B01000,
};
lcd.createChar(2, charData_2);
//No文字 呼び出し(3) 0x03;
byte charData_3[8] = {
B01101,
B01011,
B01001,
B00000,
B00110,
B01001,
B00110,
};
lcd.createChar(3, charData_3);
//初期画面 3秒間
versionView();
delay(1000);
lcd.clear();
}
//メイン
/*****************************************************************************/
void loop() {
Serial.print(" pressCount:");
Serial.print(pressCount);
Serial.print(" flagPressd:");
Serial.print(flagPressed);
Serial.print(" layer:");
Serial.print(layer);
Serial.print(" count:");
Serial.print(count);
Serial.print(" val:");
Serial.print(val);
Serial.print(" view:");
Serial.print(view);
Serial.print(" menuNo:");
Serial.print(menuNo);
Serial.println("");
getCenterButtonPressed(); //押されたフラグ
//layer 0
//Main,Menu画面切り替え
if(layer==0){ //layer0でのみ機能
//エンコ回転で画面消去
if(cwFlag==true||ccwFlag==true){
lcd.clear();
cwFlag=false;
ccwFlag=false;
}
val = count/4;
view = val%2; //エンコカウントview=0か1
if(view==1||view==-1){
menuView(); //メニュー画面表示
}else if(view==0){
mainView(); //メイン画面表示
}
if((view == 1 ||view == -1)&&(flagPressed == true)){ //
count=0; //エンコカウントリセット
layer=1; //layer1に切替
flagPressed = false; //押されフラグ消し
}else if(view == 0 && flagPressed == true){
count=0;
layer=0;
val=0;
flagPressed = false; //押されフラグ消し
}
}
//layer 1
//MenuNo ">" の移動
if(layer==1){
val = count/4;
menuNo = val;
if(menuNo>7){
menuNo=7;
}
if(menuNo<0){
menuNo=0;
}
changeCursorLayer1();
if(flagPressed == true){ // 押されたら
flagPressed=false;
count=0;
val=0;
layer = 2; //layer2に切替
//flagPressed = false; //押されフラグ消し
}
}
//layer 2 //
if(layer==2){
changeCursorLayer2();
/*
if(settingMode==0 && flagPressed==true){
flagPressed=false;
count=0;
val=0;
val=menuNo;
layer=0;
}else if(flagPressed == true){ // 押されたら
flagPressed=false;
count=0;
val=0;
val=menuNo;
layer = 1; //layer1に戻る
}
*/
}
}//メインここまで
/*****************************************************************************/
//エンコーダ関数 OK
void rotary(){ // 4ずつカウントするので1/4にして代入して使うこと 〇〇=count/4;
//現在の状態を取得
pinA = digitalRead(input_A);
pinB = digitalRead(input_B);
//2ビットで0~3の数字に変換
current = pinA + pinB * 2;
//currentの値が、CW/CCWのどちらか期待する方向だったらカウントを増減
if (current == cw[previous]){
count++;
cwFlag=true;
//ccwFlag=false;
}
if (current == ccw[previous]){
count--;
ccwFlag=true;
//cwFlag=false;
}
previous = current;
}
//センターボタンカウント 押されたフラグ OK フラグリセット flagPressed=false;
void getCenterButtonPressed(){
currentButtonState = digitalRead(centerButton);
if (currentButtonState == LOW && previousButtonState == HIGH) { //押された
pressCount++;
flagPressed = true; //押されたフラグ
}
previousButtonState = currentButtonState; //
}
/*****************************************************************************/
/*
//LCD消去(1度だけ)動かん
void LCDclear(){
if(view != view){
lcd.clear();
}
}
*/
/*****************************************************************************/
//Main<->Menu 画面切替 エンコーダ回転カウント0/1
/*
void changeViewLayer0(){
count = count/4;
view = count%2;
}
*/
/*
//月選択用エンコーダ回転カウント0~11 monthStrings[month]0=Jan,1=Feb,2=Mar,3=Apr,4=May,5=Jun,6=Jul,7=Aug,8=Sep,9=Oct,10=Nov,11=Dec
void encReadMonth(){
v = digitalRead(ENCA_PIN);
if (v == HIGH && lastPinA == LOW) {
if (digitalRead(ENCB_PIN) == LOW){
month++;
} else if (digitalRead(ENCB_PIN) == HIGH){
month--;
}
}
if(month<0){
month=11;
}else if(month>11){
month=0;
}
}
//日選択用エンコーダ回転カウント1~31
void encReadDay(){
v = digitalRead(ENCA_PIN);
if (v == HIGH && lastPinA == LOW) {
if (digitalRead(ENCB_PIN) == LOW){
day++;
} else if (digitalRead(ENCB_PIN) == HIGH){
day--;
}
}
if(day<1){
day=1;
}else if(day>31){
day=31;
}
}
//年選択用エンコーダ回転カウント23~50
void encReadYear(){
v = digitalRead(ENCA_PIN);
if (v == HIGH && lastPinA == LOW) {
if (digitalRead(ENCB_PIN) == LOW){
year++;
} else if (digitalRead(ENCB_PIN) == HIGH){
year--;
}
}
if(year<23){
year=23;
}else if(year>50){
year=23;
}
}
//時選択用エンコーダ回転カウント0~23
void encReadHour(){
v = digitalRead(ENCA_PIN);
if (v == HIGH && lastPinA == LOW) {
if (digitalRead(ENCB_PIN) == LOW){
hour++;
} else if (digitalRead(ENCB_PIN) == HIGH){
hour--;
}
}
if(hour<0){
hour=23;
}else if(hour>23){
hour=0;
}
}
//分選択用エンコーダ回転カウント0~59
void encReadMinute(){
v = digitalRead(ENCA_PIN);
if (v == HIGH && lastPinA == LOW) {
if (digitalRead(ENCB_PIN) == LOW){
minute++;
} else if (digitalRead(ENCB_PIN) == HIGH){
minute--;
}
}
if(minute<0){
minute=59;
}else if(minute>59){
minute=0;
}
}
//セットナンバー選択用エンコーダ回転カウント100~200
void encReadSetNo(){
v = digitalRead(ENCA_PIN);
if (v == HIGH && lastPinA == LOW) {
if (digitalRead(ENCB_PIN) == LOW){
setNo++;
} else if (digitalRead(ENCB_PIN) == HIGH){
setNo--;
}
}
if(setNo<100){
setNo=200;
}else if(setNo>200){
setNo=100;
}
}
//文字入力用エンコーダ回転カウント
void encRead(){
v = digitalRead(ENCA_PIN);
if (v == HIGH && lastPinA == LOW) {
if (digitalRead(ENCB_PIN) == LOW){
encPos++;
} else if (digitalRead(ENCB_PIN) == HIGH){
encPos--;
encPos = (encPos + maxCode) % maxCode; // encPos+96を96で割った余り=回転数
c = encPos + minCode; //回転数+1がc
lcd.print(c); //回転ごとに選択中の文字を表示
lcd.setCursor(x, y); //カーソル位置は維持
}
lastPinA = v;
c = encPos + minCode; //常に選択した文字を今のカーソルに表示する(液晶に残る描写がこれ)
}
}
*/
//待機画面
void mainView(){
lcd.setCursor(0, 0);
lcd.print("5HE-2540/STANDBY ");
lcd.setCursor(0, 1);
lcd.print("Locked 0");
lcd.setCursor(0, 2);
lcd.print("Temp.101/ 450");
lcd.setCursor(13, 2);
lcd.write(0xDF); //°
//lcd.print(d); //もしくはこれ°
lcd.setCursor(14, 2);
lcd.print("C PR");
lcd.setCursor(0, 3);
lcd.print("Time 0/ 0s ");
}
//初期画面
void versionView(){
lcd.setCursor(0, 0);
lcd.print("ST70-5PU Ser.No.5001");
lcd.setCursor(0, 1);
lcd.print(" VER.300A");
lcd.setCursor(0, 2);
lcd.print(" UPDATE:2022-10-31");
lcd.setCursor(0, 3);
lcd.print(" PU COUNT: 0");
}
//menu画面
void menuView(){
//1段目 戻る
lcd.setCursor(0, 0);
lcd.print("MENU");
lcd.setCursor(5, 0);
lcd.print(settingModeStrings[settingMode]); //0=END 1=Custom
//2段目 日付
lcd.setCursor(0, 1);
lcd.print("DATE");
//月
lcd.setCursor(5, 1); //iの値で月を切替
lcd.print(monthStrings[month]); //1~12,Jan,Feb,,,
//日
lcd.setCursor(9, 1);
lcd.print(day);
//年 23~50まで
lcd.setCursor(12, 1);
lcd.print("20");
lcd.setCursor(14, 1);
lcd.print(year);
//3段目
lcd.setCursor(0, 2);
lcd.print("TIME");
//時 0~23まで
lcd.setCursor(5, 2);
lcd.print(hour);
lcd.setCursor(7, 2);
lcd.print(":");
//分
lcd.setCursor(9, 2);
lcd.print(minute);//minute
//4段目 SETNo.
lcd.setCursor(0, 3);
lcd.print("SET");
lcd.setCursor(3, 3);
lcd.write(3); //No文字
//setNo
lcd.setCursor(5, 3);
lcd.print(setNo);
//テキスト入力
lcd.setCursor(9, 3);
lcd.print(c);
}
//Layer1(MENU)画面のカーソル切替 カーソル文字(2) 0x02;
void changeCursorLayer1(){
switch (menuNo){
case 0: //menuNo=0 END setting
//0行目
lcd.setCursor(4, 0);
lcd.write(2);
delay(400);
lcd.setCursor(4, 0);
lcd.print(" ");
delay(400);
//1行目
lcd.setCursor(4, 1);
lcd.print(" ");
lcd.setCursor(8, 1);
lcd.print(" ");
lcd.setCursor(11, 1);
lcd.print(" ");
//2行目
lcd.setCursor(4, 2);
lcd.print(" ");
lcd.setCursor(8, 2);
lcd.print(" ");
//3行目
lcd.setCursor(4, 3);
lcd.print(" ");
lcd.setCursor(8, 3);
lcd.print(" ");
break;
case 1: //menuNo=1 Month
//0行目
lcd.setCursor(4, 0);
lcd.print(" ");
//1行目
lcd.setCursor(4, 1);
lcd.write(2);
delay(400);
lcd.setCursor(4, 1);
lcd.print(" ");
delay(400);
lcd.setCursor(8, 1);
lcd.print(" ");
lcd.setCursor(11, 1);
lcd.print(" ");
//2行目
lcd.setCursor(4, 2);
lcd.print(" ");
lcd.setCursor(8, 2);
lcd.print(" ");
//3行目
lcd.setCursor(4, 3);
lcd.print(" ");
lcd.setCursor(8, 3);
lcd.print(" ");
break;
case 2: //menuNo=2 day
//0行目
lcd.setCursor(4, 0);
lcd.print(" ");
//1行目
lcd.setCursor(4, 1);
lcd.print(" ");
lcd.setCursor(8, 1);
lcd.write(2);
delay(400);
lcd.setCursor(8, 1);
lcd.print(" ");
delay(400);
lcd.setCursor(11, 1);
lcd.print(" ");
//2行目
lcd.setCursor(4, 2);
lcd.print(" ");
lcd.setCursor(8, 2);
lcd.print(" ");
//3行目
lcd.setCursor(4, 3);
lcd.print(" ");
lcd.setCursor(8, 3);
lcd.print(" ");
break;
case 3: //menuNo=3 year
//0行目
lcd.setCursor(4, 0);
lcd.print(" ");
//1行目
lcd.setCursor(4, 1);
lcd.print(" ");
lcd.setCursor(8, 1);
lcd.print(" ");
lcd.setCursor(11, 1);
lcd.write(2);
delay(400);
lcd.setCursor(11, 1);
lcd.print(" ");
delay(400);
//2行目
lcd.setCursor(4, 2);
lcd.print(" ");
lcd.setCursor(8, 2);
lcd.print(" ");
//3行目
lcd.setCursor(4, 3);
lcd.print(" ");
lcd.setCursor(8, 3);
lcd.print(" ");
break;
case 4: //menuNo=4 hour
//0行目
lcd.setCursor(4, 0);
lcd.print(" ");
//1行目
lcd.setCursor(4, 1);
lcd.print(" ");
lcd.setCursor(8, 1);
lcd.print(" ");
lcd.setCursor(11, 1);
lcd.print(" ");
//2行目
lcd.setCursor(4, 2);
lcd.write(2);
delay(400);
lcd.setCursor(4, 2);
lcd.print(" ");
delay(400);
lcd.setCursor(8, 2);
lcd.print(" ");
//3行目
lcd.setCursor(4, 3);
lcd.print(" ");
lcd.setCursor(8, 3);
lcd.print(" ");
break;
case 5: //menuNo=5 minute
//0行目
lcd.setCursor(4, 0);
lcd.print(" ");
//1行目
lcd.setCursor(4, 1);
lcd.print(" ");
lcd.setCursor(8, 1);
lcd.print(" ");
lcd.setCursor(11, 1);
lcd.print(" ");
//2行目
lcd.setCursor(4, 2);
lcd.print(" ");
lcd.setCursor(8, 2);
lcd.write(2);
delay(400);
lcd.setCursor(8, 2);
lcd.print(" ");
delay(400);
//3行目
lcd.setCursor(4, 3);
lcd.print(" ");
lcd.setCursor(8, 3);
lcd.print(" ");
break;
case 6: //menuNo=6 setNo
//0行目
lcd.setCursor(4, 0);
lcd.print(" ");
//1行目
lcd.setCursor(4, 1);
lcd.print(" ");
lcd.setCursor(8, 1);
lcd.print(" ");
lcd.setCursor(11, 1);
lcd.print(" ");
//2行目
lcd.setCursor(4, 2);
lcd.print(" ");
lcd.setCursor(8, 2);
lcd.print(" ");
//3行目
lcd.setCursor(4, 3);
lcd.write(2);
delay(400);
lcd.setCursor(4, 3);
lcd.print(" ");
delay(400);
lcd.setCursor(8, 3);
lcd.print(" ");
break;
case 7: //menuNo=7 text
//0行目
lcd.setCursor(4, 0);
lcd.print(" ");
//1行目
lcd.setCursor(4, 1);
lcd.print(" ");
lcd.setCursor(8, 1);
lcd.print(" ");
lcd.setCursor(11, 1);
lcd.print(" ");
//2行目
lcd.setCursor(4, 2);
lcd.print(" ");
lcd.setCursor(8, 2);
lcd.print(" ");
//3行目
lcd.setCursor(4, 3);
lcd.print(" ");
lcd.setCursor(8, 3);
lcd.write(2);
delay(400);
lcd.setCursor(8, 3);
lcd.print(" ");
delay(400);
break;
}
}
//Layer2(変数)画面のカーソル">"を"X"に上書き(layer1に戻ればもとに戻る)
void changeCursorLayer2(){
switch (menuNo){
case 0: //menuNo=0 END setting
lcd.setCursor(4, 0);
lcd.print("X");
val=count/4;
settingMode = val%2;
lcd.setCursor(5, 0);
lcd.print(settingModeStrings[settingMode]); //0=END 1=Custom
//メニュー戻り条件
if(settingMode==0 && flagPressed==true){//END Setting
flagPressed=false;
count=0;
layer=0;
}else if(settingMode==1 && flagPressed==true){//Custom Setting
flagPressed=false;
count=4; //次の項目"月"に移動
layer=1;
}
break;
case 1: //menuNo=1 Month
lcd.setCursor(4, 1);
lcd.print("X");
val=count/4;
month=val;
if(month<0){
month=0;
}else if(month>11){
month=0;
}
//月 表示
lcd.setCursor(5, 1); //iの値で月を切替
lcd.print(monthStrings[month]); //1~12,Jan,Feb,,,
//メニュー戻り条件
if(flagPressed==true){
flagPressed=false;
count=8; //次の項目"日"へ移動
layer=1;
}
break;
case 2: //menuNo=2 day
lcd.setCursor(8, 1);
lcd.print("X");
val=count/4;
day=val+1; //初期値1日~
if(day<1){
day=1;
}else if(day>31){
day=31;
}
if(day<10){ //10桁消し
lcd.setCursor(10, 1);
lcd.print(" ");
}
//日 表示
lcd.setCursor(9, 1);
lcd.print(day);
//メニュー戻り条件
if(flagPressed==true){
flagPressed=false;
count=12; //次の項目"日"へ移動
layer=1;
}
break;
case 3: //menuNo=3 year
lcd.setCursor(11, 1);
lcd.print("X");
val=count/4;
year=val+23; //初期値2023年~
if(year<23){
year=23;
}else if(year>50){
year=50;
}
//年 表示
lcd.setCursor(14, 1);
lcd.print(year);
//メニュー戻り条件
if(flagPressed==true){
flagPressed=false;
count=16; //次の項目"時"へ移動
layer=1;
}
break;
case 4: //menuNo=4 hour
lcd.setCursor(4, 2);
lcd.print("X");
val=count/4;
hour=val;
if(hour<0){
hour=0;
}else if(hour>23){
hour=23;
}
if(hour<10){ //10桁消し
lcd.setCursor(6, 2);
lcd.print(" ");
}
lcd.setCursor(5, 2);
lcd.print(hour);
//メニュー戻り条件
if(flagPressed==true){
flagPressed=false;
count=20; //次の項目"分"へ移動
layer=1;
}
break;
case 5: //menuNo=5 minute
lcd.setCursor(8, 2);
lcd.print("X");
val=count/4;
minute=val;
if(minute<10){ //10桁消し
lcd.setCursor(10, 2);
lcd.print(" ");
}
lcd.setCursor(9, 2);
lcd.print(minute);//minute
//戻り条件
if(flagPressed==true){
flagPressed=false;
count=24; //次の項目"setNo"へ移動
layer=1;
}
break;
case 6: //menuNo=6 setNo
lcd.setCursor(4, 3);
lcd.print("X");
val=count/4;
setNo=val+100; //初期値100~
if(setNo<100){
setNo=100;
}else if(setNo>200){
setNo=200;
}
lcd.setCursor(5, 3);
lcd.print(setNo);
//戻り条件
if(flagPressed==true){
flagPressed=false;
count=28; //次の項目"text"へ移動
layer=1;
}
break;
case 7: //menuNo=7 text
lcd.setCursor(8, 3);
lcd.print("X");
//テキスト入力
val=count/4;
c=val;
lcd.setCursor(9, 3);
lcd.print(c);
//戻り条件
if(flagPressed==true){
flagPressed=false;
count=28; //次の項目"text"へ移動
layer=1;
}
break;
}
}
/*
Serial.print(" pressCount:");
Serial.print(pressCount);
Serial.print(" encPos:");
Serial.print(encPos);
Serial.print(" Code:");
Serial.print(selectCode);
Serial.print(" C:");
Serial.print(c);
Serial.println("");
*/
/*
//エンコーダのセンタークリックまたは黄色ボタンで
//数字、英大文字、英子文字、スペースとか記号 の順で切替え
int pressBTN = digitalRead(BTN_PIN);
if (pressBTN == LOW && lastBTN == HIGH) { //押された currentButton = digitalRead(BUTTON);
pressCount++;
if(pressCount>3){
pressCount=0;
}
switch(pressCount){
case 0: //0を表示
encPos=16;
break;
case 1: //Aを表示
encPos=33;
break;
case 2: //aを表示
encPos=65;
break;
case 3: //0x20 スペースを表示
encPos=0;
break;
}
lcd.print(c);
lcd.setCursor(x, y);
}
//センターボタン離し
if (pressBTN == HIGH && lastBTN == LOW){
lcd.print(c);
lcd.setCursor(x, y);
}
////////////////////////////////////////////////////////////////////////////////
//バックスペースボタン
int currentButton_b = digitalRead(BUTTONb);
if(currentButton_b == LOW && previousButton_b == HIGH){
lcd.print(" "); //文字を消す
if(y==0 && x <= 0){
x=0;
}else if(y==1 && x <= 0){
y=0;
x=15;
}else{
x=x-1;
}
lcd.setCursor(x, y);
lcd.print(c);
lcd.setCursor(x, y);
}
////////////////////////////////////////////////////////////////////////////////
//青ボタンでカーソル移動
int currentButton = digitalRead(BUTTON);
if(currentButton == LOW && previousButton == HIGH){
lcd.print(c); //移動後に選択中の文字を表示
x=x+1;
// lcd.setCursor(x, y);
lcd.print(c);
lcd.setCursor(x, y);
if(x > 15){
x=0;
y=1;
lcd.setCursor(x, y);
lcd.print(c);
lcd.setCursor(x, y);
}
}
//ボタン離れたら(=桁移動後)選択中の文字を表示
if(currentButton == HIGH && previousButton == LOW){
lcd.setCursor(x, y);
}
////////////////////////////////////////////////////////////////////////////////
//エンコーダ回転
int v = digitalRead(ENCA_PIN);
//回ったら
if ((lastPinA == LOW) && (v == HIGH)) {
if (digitalRead(ENCB_PIN) == LOW)
encPos++;
else
encPos--;
encPos = (encPos + maxCode) % maxCode; // encPos+96を96で割った余り=回転数
c = encPos + minCode; //回転数+1がc
lcd.print(c); //回転ごとに選択中の文字を表示
lcd.setCursor(x, y); //カーソル位置は維持
}
lastPinA = v;
c = encPos + minCode; //常に選択した文字を今のカーソルに表示する(液晶に残る描写がこれ)
//黄色かセンタークリック文字選択ボタン監視リセット
lastBTN = pressBTN;
//決定青ボタン監視リセット
previousButton=currentButton;
//バックスペースボタン監視リセット
previousButton_b=currentButton_b;
/*
Serial.print(" pressCount:");
Serial.print(pressCount);
Serial.print(" encPos:");
Serial.print(encPos);
Serial.print(" Code:");
Serial.print(selectCode);
Serial.print(" C:");
Serial.print(c);
Serial.println("");
// delay(50);
*/