void loop() {
switch (mainmode) {
case 0: //mainmode 0 時計
modebtFg = false;
setbtFg = false;
//dispD = mainmode;
switch (submode[0]) {
case 0: //mode 0 0 時計表示
if (RTC.read(tm)) {
yr = tm.Year + 1970 - 2000 ; //1970年が基準でRTCの内部で処理されている
mh = tm.Month;
dy = tm.Day;
h = tm.Hour;
m = tm.Minute;
sd = tm.Second;
adjChk();
// TmChkOther(); ////////////////
if ((adjF) && (sd == 30) ) { //調整要、30秒の時
if (tmOnFg == true) { //タイマー動いているとき
clcS1 = tgS;
clcS2 = adjVlue;
clcM1 = tgM;
clcM2 = 0;
clcH1 = tgH;
clcH2 = 0;
clcTime();
tgS = clcS;
tgM = clcM;
tgH = clcH;
}
if (submode[3] == 1) { //ストップウォッチ動いているとき
clcS1 = swSS;
clcS2 = adjVlue;
clcM1 = swSM;
clcM2 = 0;
clcH1 = swSH;
clcH2 = 0;
clcTime();
swSS = clcS;
swSM = clcM;
swSH = clcH;
}
adjDo();
}
switch (dspF) {
case 0: //一時的 年 表示
//stt = LOW;
dispD = 3; // DpDisp[dispD] この場合2点とも非表示 もともとstt = LOW;
tmpfg = HIGH;
dispH = 20; //2000年をもとに残りの年を表示
dispM = yr; //1970年が基準でRTCの内部で処理されている
dispCnt++;
if (dispCnt > 4) {
dispCnt = 0;
dspF = 1;
}
break;
case 1: //一時的 月日 表示
//dispD = 0; // DpDisp[dispD] この場合2点とも表示 もともとstt = HIGH;
dispD = 2;
tmpfg = HIGH;
dispH = mh;
dispM = dy;
dispCnt++;
if (dispCnt > 4) {
dispCnt = 0;
dspF = 8;
}
//dispD = mainmode;
break;
case 2: //普通のとき
dispH = h;
if (dispH / 10 == 0) {
tmpfg = LOW;
}
else {
tmpfg = HIGH;
}
dispM = m;
if (DEBUG) {
dispM = sd;
dispH = m;
}
break;
case 3: //一時的 分秒 表示
dispD = 0;
tmpfg = HIGH;
dispH = m;
dispM = sd;
dispCnt++;
if (dispCnt > 8) {
dispCnt = 0;
dspF = 8;
}
break;
case 4: //一時的アラーム表示,アラームon、off
alFg = !alFg;
AlL=AlLed[alFg];
// DpDAO = DpD OPRT AlL OPRT OpL; は dispDp の中でやる
if (alFg) {
submode[1] = 0;
}
dispDp(); //一応表示 短時間
// わざわざ書く処理をしなくても時計の表示のついでに表示されるはず dispDpで
// digitalWrite(ALLED, alFg);
//snzFg = alFg;
//dispD = 0;
dispD = 1;
dispH = alH;
dispM = alM;
if (dispH / 10 == 0) {
tmpfg = LOW;
}
else {
tmpfg = HIGH;
}
dispCnt++;
if (dispCnt > 4) {
dispCnt = 0;
dspF = 2;
dispD = 0;
}
break;
case 8: //一時的温度表示 20190709
dispD = 0;
TempChk();
// 以下をやらないと一瞬温度の後にもとの表示がされてしまう。
dispH = h;
if (dispH / 10 == 0) {
tmpfg = LOW;
}
else {
tmpfg = HIGH;
}
dispM = m;
if (DEBUG) {
dispM = sd;
dispH = m;
}
dspF = 2;
break;
}
//break; これがあると何も表示されなくなってしまう。
// 普通の時計表示中 ////////////////
for (int i = 0; i < 20; i++) {
dispHour();
dispMin();
dispDp();
BtnChk();
TmChkOther(); ///////////////////////
if (btchk[UPBT - OFST]) { //一時的 年月日 表示
btchk[UPBT - OFST] = false;
dspF = 0;
}
if (btchk[DOWNBT - OFST]) { //一時的 分秒 表示
btchk[DOWNBT - OFST] = false;
dspF = 3;
}
if ((alFg == LOW) && (dspF == 2) && (btLong[ONOFFBT - OFST] == true) ) { // 育てる時計部分 時計の微調整
int adjTpI = 0;
int tmpK = 0;
dspF = 11;
OpL =OpLed[1]; //DpA = DpAdd[1]; //plsDp = 1; なぜこうした?
dispDp(); // いらないかもしれないけど
tone(SUND, 1000, 500);
btchk[ONOFFBT - OFST] = false;
btLong[ONOFFBT - OFST] = false;
modebtFg = false;
setbtFg = false;
while (dspF > 10) {
if (modebtFg == true) { // 途中でmodeボタンが押されたら何もしないで終わる
dspF = 2;
modebtFg = false;
setbtFg = false;
} else {
switch (dspF) {
case 11: //adjustValue
dp3 = dispChNone;
dp4 = dispChNone;
disp3();
disp4();
if (adjVlue > 0) {
dp1 = dispChPlus1;
dp2 = dispChPlus2;
} else {
dp1 = dispChMinus;
dp2 = dispChNone;
}
disp1();
disp2();
if (adjVlue > 0) {
dispM = adjVlue ;
} else {
dispM = ((-1) * adjVlue);
}
dispMin();
BtnChk();
btchk[ONOFFBT - OFST] = false;
if (btchk[UPBT - OFST]) {
adjVlue++;
if (adjVlue > 30) {
adjVlue = 29;
}
btchk[UPBT - OFST] = false;
}
if (btchk[DOWNBT - OFST]) {
adjVlue--;
if (adjVlue < -30) {
adjVlue = -29 ;
}
btchk[DOWNBT - OFST] = false;
}
btchk[ONOFFBT - OFST] = false;
break;
case 12: //adiust second
dp1 = dispChScnd;
dp2 = dispChEql;
dispM = adjTS;
disp1();
disp2();
dispMin();
BtnChk();
btchk[ONOFFBT - OFST] = false;
if (btchk[UPBT - OFST]) {
adjTS = ( adjTS + 1) % 60 ;
btchk[UPBT - OFST] = false;
}
if (btchk[DOWNBT - OFST]) {
adjTS = (adjTS + 59) % 60;
btchk[DOWNBT - OFST] = false;
}
btchk[ONOFFBT - OFST] = false;
break;
case 13: //adjust minite
dp1 = dispChMin;
dp2 = dispChEql;
dispM = adjTM;
disp1();
disp2();
dispMin();
BtnChk();
btchk[ONOFFBT - OFST] = false;
if (btchk[UPBT - OFST]) {
adjTM = ( adjTM + 1) % 60 ;
btchk[UPBT - OFST] = false;
}
if (btchk[DOWNBT - OFST]) {
adjTM = (adjTM + 59) % 60;
btchk[DOWNBT - OFST] = false;
}
btchk[ONOFFBT - OFST] = false;
break;
case 14: //adjust hour
dp1 = dispChHour;
dp2 = dispChEql;
dispM = adjTH;
disp1();
disp2();
dispMin();
BtnChk();
btchk[ONOFFBT - OFST] = false;
if (btchk[UPBT - OFST]) {
adjTH = ( adjTH + 1) % 24 ;
btchk[UPBT - OFST] = false;
}
if (btchk[DOWNBT - OFST]) {
adjTH = (adjTH + 23) % 24;
btchk[DOWNBT - OFST] = false;
}
btchk[ONOFFBT - OFST] = false;
break;
case 15: //adjust day
dp1 = dispChDay;
dp2 = dispChEql;
dispM = adjTD;
disp1();
disp2();
dispMin();
BtnChk();
btchk[ONOFFBT - OFST] = false;
if (btchk[UPBT - OFST]) {
adjTD = ( adjTD + 1) % 100 ;
btchk[UPBT - OFST] = false;
}
if (btchk[DOWNBT - OFST]) {
adjTD = (adjTD + 99) % 100;
btchk[DOWNBT - OFST] = false;
}
btchk[ONOFFBT - OFST] = false;
break;
case 16: //adjust value write
adjVV = abs(adjVlue);
if (adjVlue > 0) {
adjVF = 0;
} else {
adjVF = 1;
}
if ((adjVV != 0) && (adjTM == 0) && (adjTH == 0) && (adjTD == 0) && (adjTS <= adjVV)) {
dspF = 11;
} else {
EEPROM.write(0, adjTS);
EEPROM.write(1, adjTM);
EEPROM.write(2, adjTH);
EEPROM.write(3, adjTD);
EEPROM.write(4, adjVV);
EEPROM.write(5, adjVF);
adjSetF = false;
setAdjT();
tone(SUND, 1200, 800);
modebtFg = false;
setbtFg = false;
dspF = 2;
}
break;
}
}
}
alFg = true;
OpL = OpLed[0]; //DpA = DpAdd[0];
dispDp(); //いらないかもしれないけど一応
alFg = false;
} else {
OpL = OpLed[0]; //DpA = DpAdd[0];
dispDp(); //いらないかもしれないけど一応
btLong[ONOFFBT - OFST] = false;
//OpL = OpLed[0]; //DpA = DpAdd[0];
// btchk[ONOFFBT - OFST] = false;
}
////// 調整処理 終わり
if (btchk[ONOFFBT - OFST]) { //一時的アラーム表示
btchk[ONOFFBT - OFST] = false;
dspF = 4;
}
if (alFg == HIGH) //アラームチェック
{
if (alH == h && alM == m)
{
snzFg = true;
kReset();
alStopTm = -10; //ダミー とりあえずマイナスのちょっと大きめの数字
while (snzFg) {
snz(); // アラーム鳴らす
}
}
}
}
//stt = ! stt; ///////////////////////////////////////////////////////////////////
if (dispD == 0){
dispD=3;
} else if (dispD == 3){
dispD=0;
}
// TmChkOther(); /////////////////////////////////////
}
// TmChkOther(); //////////////////
break;
case 1: //mode 0 1 年設定の入力
//dispD = 0;
tmpfg = HIGH;
dispD = 3;
while (mainmode == 0 && submode[mainmode] == 1)
{
dispH = 20;
dispM = yr;
dispHour();
dispMin();
dispDp();
BtnChk();
btchk[ONOFFBT - OFST] = false;
if (btchk[UPBT - OFST]) {
yr = (yr + 1) % 100 ;
btchk[UPBT - OFST] = false;
}
if (btchk[DOWNBT - OFST]) {
yr = (yr - 1) ;
if (yr < 0) {
yr = yr + 100;
}
btchk[DOWNBT - OFST] = false;
}
chkDoOEproc(2);
}
//dispD = mainmode ;
break;
case 2: //mode 0 2 月設定の入力
//dispD = 0;
tmpfg = HIGH;
dispD = 1;
while (mainmode == 0 && submode[mainmode] == 2)
{
dispH = mh;
dispHour();
dispDp();
BtnChk();
btchk[ONOFFBT - OFST] = false;
if (btchk[UPBT - OFST]) {
mh = (mh + 1) % 13 ;
btchk[UPBT - OFST] = false;
}
if (btchk[DOWNBT - OFST]) {
mh = (mh - 1) ;
if (mh < 1) {
mh = mh + 12;
}
btchk[DOWNBT - OFST] = false;
}
chkDoOEproc(2);
}
break;
case 3: //mode 0 3 日設定の入力
//dispD = 0; //真ん中の2つの点を表示
dispD = 2; //下の点を表示
while (mainmode == 0 && submode[mainmode] == 3)
{
dispM = dy;
dispMin();
dispDp();
BtnChk();
btchk[ONOFFBT - OFST] = false;
if (btchk[UPBT - OFST]) {
dy = (dy + 1) % 32 ;
btchk[UPBT - OFST] = false;
}
if (btchk[DOWNBT - OFST]) {
dy = (dy - 1);
if (dy < 1) {
dy = dy + 31 ;
}
btchk[DOWNBT - OFST] = false;
}
chkDoOEproc(2);
}
break;
case 4: //mode 0 4 時設定の入力
dispD = 0;
while (mainmode == 0 && submode[mainmode] == 4)
{
dispH = h;
if (dispH / 10 == 0) {
tmpfg = LOW;
}
else {
tmpfg = HIGH;
}
dispHour();
dispDp();
BtnChk();
btchk[ONOFFBT - OFST] = false;
if (btchk[UPBT - OFST]) {
h = (h + 1) % 24 ;
btchk[UPBT - OFST] = false;
}
if (btchk[DOWNBT - OFST]) {
h = (h - 1) ;
if (h < 0) {
h = h + 24;
}
btchk[DOWNBT - OFST] = false;
}
chkDoOEproc(2);
}
break;
case 5: //mode 0 5 分設定の入力
dispD = 0; //真ん中の2つの点を表示
while (mainmode == 0 && submode[mainmode] == 5)
{
dispM = m;
dispMin();
dispDp();
BtnChk();
btchk[ONOFFBT - OFST] = false;
if (btchk[UPBT - OFST]) {
m = (m + 1) % 60 ;
btchk[UPBT - OFST] = false;
}
if (btchk[DOWNBT - OFST]) {
m = (m - 1);
if (m < 0) {
m = m + 60 ;
}
btchk[DOWNBT - OFST] = false;
}
chkDoOEproc(3);
}
break;
case 6: //mode 0 6 設定した時分をRTCに書き込み
setHour = h;
setMin = m;
setDay = dy;
setMonth = mh;
setYear = yr; // +30;
setTime();
setYMD();
submode[0] = 0;
break;
}
modebtFg = false;
setbtFg = false;
// TmChkOther();
break;
case 1: //mainmode 1 アラーム
modebtFg = false;
setbtFg = false;
//dispD = 0;
//dispD = mainmode;
tmpfg = HIGH; //20170625改定
int i1;
i1 = 0;
int ct;
ct = 0;
rptBb3=0;
rptBb4=0;
noTone(SUND);
// TmChkOther();
while (mainmode == 1) {
while (i1 < 16) {
dispDp();
i1++;
dispM = alM;
dispH = alH;
if (ct == 1) {
if (submode[mainmode] == 0) {
dispHour();
//delay(1);
} else {
dispMin();
//delay(1);
}
} else {
dispHour();
dispMin();
dispDp();
}
btchkReset();
BtnChk();
if (btchk[ONOFFBT - OFST]) { // ONOFFBT が押されたならアラームのOn/Off
alFg = ! alFg;
if (alFg) {
submode[1] = 0;
}
AlL = AlLed[alFg];
btchk[ONOFFBT - OFST] = false;
if (alFg == true) {
mainmode = 0;
submode[0] = 0;
}
}
if (submode[mainmode] == 0) { //分の設定
if (btchk[UPBT - OFST]) {
alM = (alM + 1) % 60 ;
btchk[UPBT - OFST] = false;
}
if (btchk[DOWNBT - OFST]) {
alM = (alM - 1);
if (alM < 0) {
alM = alM + 60 ;
}
btchk[DOWNBT - OFST] = false;
}
} else { //時間の設定
if (btchk[UPBT - OFST]) {
alH = (alH + 1) % 24 ;
btchk[UPBT - OFST] = false;
}
if (btchk[DOWNBT - OFST]) {
alH = (alH - 1);
if (alH < 0) {
alH = alH + 24 ;
}
btchk[DOWNBT - OFST] = false;
}
}
}
i1 = 0;
ct = 1 - ct;
// TmChkOther();
chkDoOEproc(3);
}
modebtFg = false;
setbtFg = false;
break;
case 2: //mainmode 2 タイマー
modebtFg = false;
setbtFg = false;
//dispD = 0;
//dispD = mainmode;
tmpfg = HIGH;
if (rptBb3==0 && rptBb4==0){
noTone(SUND);
}
switch (submode[2])
{
case 0: //mode 2 0 タイマー 秒設定
OpL = OpLed[0]; //DpA = DpAdd[0];
dispDp(); //いらないかもしれないけど一応
while (mainmode == 2 && submode[mainmode] == 0)
{
//dispD = 0; //真ん中の2つの点を表示
dispD = 1; //下の点を表示
tmOnFg = false;
dispM = tmrS;
upDisp = LOW;
dispIx = (dispIx + 1) % 50;
if (dispIx < 25) {
dispMin();
} else {
dispMinOff();
}
rptTmPre();
dispDp();
btchkReset();
BtnChk();
if (btchk[UPBT - OFST]) {
tmrS = (tmrS + 1) % 60 ;
btchk[UPBT - OFST] = false;
}
if (btchk[DOWNBT - OFST]) {
tmrS = (tmrS - 1);
if (tmrS < 0) {
tmrS = tmrS + 60 ;
}
btchk[DOWNBT - OFST] = false;
}
if (btLong[ONOFFBT - OFST] == true ) {
btLong[ONOFFBT - OFST] = false;
btchk[ONOFFBT - OFST] = false;
rptTmFg = ! rptTmFg;
}
if (btchk[ONOFFBT - OFST]) {
if (tmrM > 0) {
;
} else {
tmrM = 0;
}
if (tmrH > 0) {
;
} else {
tmrH = 0;
}
submode[mainmode] = 3;
btchk[ONOFFBT - OFST] = false;
}
chkDoOEproc(2);
}
break;
case 1: //mode 2 1 タイマー 分設定
OpL = OpLed[0]; //DpA = DpAdd[0];
dispDp(); //いらないかもしれないけど一応
while (mainmode == 2 && submode[mainmode] == 1)
{
//dispD = 0; //真ん中の2つの点を表示
dispD = 2; //上の点を表示
tmOnFg = false;
dispM = tmrM;
upDisp = HIGH;
dispIx = (dispIx + 1) % 50;
if (dispIx < 25) {
dispMin();
} else {
dispMinOff();
}
rptTmPre();
dispDp();
btchkReset();
BtnChk();
if (btchk[UPBT - OFST]) {
tmrM = (tmrM + 1) % 60 ;
btchk[UPBT - OFST] = false;
}
if (btchk[DOWNBT - OFST]) {
tmrM = (tmrM - 1);
if (tmrM < 0) {
tmrM = tmrM + 60 ;
}
btchk[DOWNBT - OFST] = false;
}
if (btLong[ONOFFBT - OFST] == true ) {
btLong[ONOFFBT - OFST] = false;
btchk[ONOFFBT - OFST] = false;
rptTmFg = ! rptTmFg;
}
if (btchk[ONOFFBT - OFST]) {
if (tmrS > 0) {
;
} else {
tmrS = 0;
}
if (tmrH > 0) {
;
} else {
tmrH = 0;
}
submode[mainmode] = 3;
btchk[ONOFFBT - OFST] = false;
}
chkDoOEproc(2);
}
break;
case 2: //mode 2 2 タイマー時設定
OpL = OpLed[0]; //DpA = DpAdd[0];
dispDp(); //いらないかもしれないけど一応
while (mainmode == 2 && submode[mainmode] == 2)
{
//dispD = 0; //真ん中の2つの点を表示
dispD = 0; //上下の点を表示
tmOnFg = false;
dispH = tmrH;
dispIx = (dispIx + 1) % 50;
if (dispIx < 25) {
dispHour();
} else {
dispHourOff();
}
rptTmPre();
dispDp();
btchkReset();
BtnChk();
if (btchk[UPBT - OFST]) {
tmrH = (tmrH + 1) % 24 ;
btchk[UPBT - OFST] = false;
}
if (btchk[DOWNBT - OFST]) {
tmrH = (tmrH - 1);
if (tmrH < 0) {
tmrH = tmrH + 24 ;
}
btchk[DOWNBT - OFST] = false;
}
if (btLong[ONOFFBT - OFST] == true ) {
btLong[ONOFFBT - OFST] = false;
btchk[ONOFFBT - OFST] = false;
rptTmFg = ! rptTmFg;
}
if (btchk[ONOFFBT - OFST]) {
if (tmrS > 0) {
;
} else {
tmrS = 0;
}
if (tmrM > 0) {
;
} else {
tmrM = 0;
}
submode[mainmode] = 3;
btchk[ONOFFBT - OFST] = false;
}
chkDoOEproc(2);
}
break;
case 3: //mode 2 3 セット完了、表示、スタート準備
int ttmmppq;
if ((tmrS == 0) && (tmrM == 0) && (tmrH == 0)) {
submode[mainmode] = 0;
for (int i = 0; i < timesModeSet; i++) {
PORTB = Seg[mainmode]; // OPRT DpAはしない;
digitalWrite(LED1, HIGH);
delay(5);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
PORTB = Seg[submode[mainmode]]; // OPRT DpA;
digitalWrite(LED3, HIGH);
delay(5);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
// PORTB = Seg[10];
// digitalWrite(LEDDP, HIGH);
// delay(5);
// digitalWrite(LEDDP, LOW);
dispDp();
}
} else {
ttmmppq = 0;
OpL = OpLed[1]; //DpA = DpAdd[1];
dispDp(); //いらないかもしれないけど一応
tmOnFg = false;
// dispM = tmrS; 20170918
dispM = tmrM;
dispH = tmrH;
while (mainmode == 2 && submode[mainmode] == 3)
{
if (tmrH == 0) {
dispH = tmrM;
dispM = tmrS;
} else {
if (ttmmppq > 70) {
upDisp = HIGH;
dispH = tmrM;
dispM = tmrS;
} else {
upDisp = LOW;
// dispH = tmrH;
dispM = tmrH;
}
ttmmppq = (ttmmppq + 1) % 150;
}
dispHour();
dispMin();
rptTmPre();
dispDp(); /////////////////////////////////////////////////////
btchkReset();
BtnChk();
rmS = 0;
rmM = 0;
rmH = 0;
if (btchk[ONOFFBT - OFST]) {
submode[mainmode] = 4;
if (RTC.read(tm)) {
;
}
nowH = tm.Hour;
nowM = tm.Minute;
nowS = tm.Second;
tgS = nowS + tmrS;
if (tgS > 59) {
krM = tgS / 60;
tgS = tgS % 60;
} else {
krM = 0;
}
tgM = nowM + tmrM + krM;
if (tgM > 59) {
krH = tgM / 60;
tgM = tgM % 60;
} else {
krH = 0;
}
tgH = nowH + tmrH + krH;
//tgS = nowS; 昔、秒を設定していなかった頃はこれ
//rmH=1;
//btchk[ONOFFBT - OFST] = false;
btchkReset();
}
}
}
break;
case 4: //mode 2 4 タイマー計測、表示、終わり待ち、終わったらブザー
int tt;
int ttmmpp;
ttmmpp = 0;
tt = false;
tmOnFg = true;
OpL = OpLed[0]; //DpA = DpAdd[0];
dispDp(); //いらないかもしれないけど一応
rmH = 1;
rmM = 1;
while ((tt == false) && (!((rmH == 0 && rmM == 0 && rmS == 0) || (rmH < 0 ))) && mainmode == 2 && submode[2] == 4 && tmOnFg == true)
// ((!(tt==true || (rmH==0 && rmM==0 && rmS==0) )) && mainmode == 2 && submode[2]==3)
{
btchkReset();
if (rptTmFg == true) {
RptTmChk();
if ((rptBb3 == 0) && (rptBb4 == 0)) {
noTone(SUND);
} else if (rptBb3 > 0) {
beebee3();
} else if (rptBb4 > 0) {
beebee4();
}
} else {
TmCheck(); // 時間がきていれば音鳴らす
if (tmEnd == true) {
tmEnd = false;
tmOnFg = false;
if (mainmode == 2) {
submode[mainmode] = 3;
}
}
}
if (rmH == 0) {
dispH = rmM;
dispM = rmS;
} else {
if (ttmmpp > 70) {
upDisp = LOW;
dispM = rmS;
} else {
upDisp = HIGH;
dispH = rmH;
dispM = rmM;
}
ttmmpp = (ttmmpp + 1) % 150;
}
dispHour();
dispMin();
rptTmPre();
dispDp(); ///////////////////////////////
upDisp = HIGH;
//stt = !stt;
if (dispD==0){
dispD = 3;
} else if(dispD==3){
dispD=0;
}
btchkReset();
BtnChk();
btchk[UPBT - OFST] = false;
btchk[DOWNBT - OFST] = false;
tt = btchk[ONOFFBT - OFST];
/* if (btchk[ONOFFBT - OFST]) {
submode[mainmode] = 2;
} */
btchk[ONOFFBT - OFST] = false;
} // while end onoffボタン押されていないとか時間きてないとか 繰り返す
if (rptTmFg == true) { // 繰り返しモードの時
if (tt == true) { // onoffぼたん押されたとき
tmOnFg = false; // タイマー 終わり タイマー準備終わった徐状態に戻す
submode[2] = 3;
rptBb3 = 0;
rptBb4 = 0;
noTone(SUND);
} else { // onoffぼたん押されていないとき
;
}
} else { // 普通のタイマーの時、繰り返しモードでないとき、
if (rmH < 0 ) { // 時間が来ている時
submode[mainmode] = 3;
tmOnFg = false;
tmEnd = false;
rptBb3 = 0;
rptBb4 = 0;
} else { // 時間がまだ来ていないとき
if (tt == true) { // onoffボタンが押されたとき
submode[mainmode] = 5;
tmOnFg = false;
}
}
}
if (setbtFg) {
submode[2] = 3;
tmOnFg = false;
setbtFg = false;
}
//submode[mainmode]=2;
tt = false;
upDisp = HIGH;
break;
case 5: //mode 2 5 タイマー、途中でストップ、再開
//rptTm なら終わりの処理?
if (rptTmFg == true) {
// rptTmFg=false;
tmOnFg = false;
////////////////////////////////////////////////////////////////////////////////////////
if (mainmode == 2) {
submode[mainmode] = 3;
}
}
int ttt = false;
krM = 0;
krH = 0;
OpL = OpLed[1]; //DpA = DpAdd[1];
dispDp(); //いらないかもしれないけど一応
while (!ttt && !setbtFg && !modebtFg) {
tmOnFg = false;
if (rmH == 0) {
dispH = rmM;
dispM = rmS;
} else {
if (ttmmpp > 110) {
upDisp = LOW;
dispM = rmS;
} else {
upDisp = HIGH;
dispH = rmH;
dispM = rmM;
}
ttmmpp = (ttmmpp + 1) % 250;
}
dispHour();
dispMin();
// rptTmPre();
dispDp(); /////////////////////////////////////////////
dispD = 3;
BtnChk();
btchk[UPBT - OFST] = false;
btchk[DOWNBT - OFST] = false;
ttt = btchk[ONOFFBT - OFST];
if (ttt) {
submode[mainmode] = 4;
if (RTC.read(tm)) {
;
}
nowH = tm.Hour;
nowM = tm.Minute;
nowS = tm.Second;
tgS = nowS + rmS;
if (tgS > 59) {
tgS = tgS - 60;
krM = 1;
}
tgM = nowM + rmM + krM;
if (tgM > 59) {
tgM = tgM - 60;
krH = 1;
}
tgH = nowH + rmH + krH;
tmOnFg = true;
}
btchk[ONOFFBT - OFST] = false;
}
OpL = OpLed[0]; //DpA = DpAdd[0];
dispDp(); //いらないかもしれないけど一応
upDisp = HIGH;
dispD = 0;
if (setbtFg) {
submode[mainmode] = 0;
tmOnFg = false;
}
break; //end case 5 mode 2 5
OpL = OpLed[0]; //DpA = DpAdd[0];
dispDp(); //いらないかもしれないけど一応
}
modebtFg = false;
setbtFg = false;
upDisp = HIGH;
dispD = 0;
break; //end mainmode 2 タイマーモード 終わり
case 3: //mainmode 3 ストップウォッチ
modebtFg = HIGH;
setbtFg = HIGH;
//dispD = 0;
dispD = 0;
tmpfg = HIGH;
switch (submode[3])
{
case 0: // mode 3 0 ストップウォッチはじめの準備
// delay(20);
swOfH = 0;
swOfM = 0;
swOfS = 0;
OpL = OpLed[1]; //DpA = DpAdd[1];
dispDp(); //いらないかもしれないけど一応
while ((mainmode == 3 && submode[mainmode] == 0) ) {
dispH = 0;
dispM = 0;
dispHour();
dispMin();
dispDp();
BtnChk();
btchk[UPBT - OFST] = false;
btchk[DOWNBT - OFST] = false;
if (btchk[ONOFFBT - OFST]) {
submode[mainmode] = 1;
btchk[ONOFFBT - OFST] = false;
if (RTC.read(tm)) {
;
}
swSH = tm.Hour;
swSM = tm.Minute;
swSS = tm.Second;
}
TmChkOther();
chkDoOEproc(10);
}
OpL = OpLed[1]; //DpA = DpAdd[1];
dispDp(); //いらないかもしれないけど一応
break;
case 1: //mode 3 1 ストップウォッチ 計測、表示
int t ;
int ct;
int ttmmpp;
ct = 0;
t = false;
OpL = OpLed[0]; //DpA = DpAdd[0];
dispD = 0; //stt = true;
dispDp(); //いらないかもしれないけど一応
modebtFg = false;
setbtFg = false;
while (t == false && mainmode == 3 && submode[mainmode] == 1 && modebtFg == false && setbtFg == false)
{
if (RTC.read(tm)) {
;
}
krH = 0;
krM = 0;
swNS = tm.Second - swSS + swOfS;
if (swNS > 59) {
swNS = swNS - 60;
krM = 1;
}
if (swNS < 0) {
swNS = swNS + 60;
krM = -1;
}
swNM = tm.Minute - swSM + krM + swOfM;
if (swNM > 59) {
swNM = swNM - 60;
krH = 1;
}
if (swNM < 0) {
swNM = swNM + 60;
krH = -1;
}
swNH = tm.Hour - swSH + krH + swOfH;
if (swNH < 0) {
swNH = swNH + 24;
}
if (swNH == 0) {
dispH = swNM;
dispM = swNS;
} else {
if (ttmmpp > 70) {
upDisp = LOW;
dispM = swNS;
} else {
upDisp = HIGH;
dispH = swNH;
dispM = swNM;
}
ttmmpp = (ttmmpp + 1) % 150;
}
dispHour();
dispMin();
dispDp();
if (ct > 3) {
if (dispD == 1) {
dispD = 2;
ct = 0;
} else if (dispD == 2) {
dispD = 3;
ct = 0;
} else {
dispD = 1;
ct = 0;
}
} else {
ct++;
}
// stt = !stt; もとからコメントにしてあった
BtnChk();
btchk[UPBT - OFST] = false;
btchk[DOWNBT - OFST] = false;
if (btchk[ONOFFBT - OFST]) {
submode[mainmode] = 2;
}
//t = btchk[ONOFFBT - OFST] ;
btchk[ONOFFBT - OFST] = false;
//t=digitalRead(ONOFFBT);
TmChkOther();
}
//submode[3] = 2;
delay(20);
break;
case 2: //mode 3 2 ストップウォッチ 止めた時刻表示
int i = 0;
OpL = OpLed[1]; //DpA = DpAdd[1];
dispDp(); //いらないかもしれないけど一応
swOfS = swNS;
swOfM = swNM;
swOfH = swNH;
while (mainmode == 3 && submode[3] == 2) {
i++;
if (i > 80) {
i = 0;
}
if ((i < 40) && (swNH > 0)) {
dispD = 1;
dispH = swNH;
dispM = swNM;
upDisp = true;
} else {
upDisp = false;
dispD = 2;
dispH = swNM;
dispM = swNS;
}
upDisp = true;
dispHour();
dispMin();
dispDp();
BtnChk();
btchk[UPBT - OFST] = false;
btchk[DOWNBT - OFST] = false;
if (btchk[ONOFFBT - OFST]) {
submode[mainmode] = 1;
if (RTC.read(tm)) {
;
}
swSH = tm.Hour;
swSM = tm.Minute;
swSS = tm.Second;
}
btchk[ONOFFBT - OFST] = false;
TmChkOther();
}
break;
}
modebtFg = false;
setbtFg = false;
// plsDp=0; //////////////////////////////
break;
}
TmChkOther();
}
0コメント