YKNCT / Mbed 2 deprecated R21_ConsteSlave2

Dependencies:   mbed CtrlStationRX

Revision:
0:70fee422a0e0
Child:
1:56c272cb4522
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Sep 27 04:26:26 2021 +0000
@@ -0,0 +1,130 @@
+#include "mbed.h"
+#include "SO1602A.h"
+#define SW_ONE(__NUM__) (SWData[__NUM__][0]-SWData[__NUM__][1]==1)
+
+DigitalIn SW[7]= {PA_3,PA_12,PB_5,PA_11,PA_8,PF_1,PF_0};
+
+DigitalOut POWER[2]= {PA_1,PB_1};
+
+Serial UART(PA_9,PA_10, 9600);
+
+DigitalOut led(LED1);
+Serial telemetry(USBTX, USBRX, 115200);
+
+SO1602A oled(PB_7,PB_6);
+
+Timer emoTimer;
+Timer restTimer;
+Timer newsTimer[3];
+Timer mainTimer;
+int msTimer=0;
+
+int newsStatus[3] = {0};
+
+void uartRX()
+{
+    char data = UART.getc();
+    newsStatus[(data>>2)&0b11]=(data&0b11);
+    newsTimer[(data>>2)&0b11].reset();
+}
+
+int main()
+{
+    
+    POWER[0]=POWER[1]=1;
+    for(int i=0; i<7; i++) SW[i].mode(PullDown);
+
+    mainTimer.reset();
+    mainTimer.start();
+    restTimer.start();
+    emoTimer.start();
+    for(int i=0; i<3; i++) newsTimer[i].start();
+
+    oled.init();
+    oled.setDispFlag(1,0,0);
+//    oled.locate(2,0);
+//    oled.printf("Stop display");
+    
+    UART.attach(uartRX, Serial::RxIrq);
+
+    while(1) {
+        
+//        telemetry.printf("%d\n\r", (SW[6]==0?0:1));
+
+        /* SW入力のワンタイム化 */
+        static bool SWData[7][2] = {0};
+        for(int i=0; i<7; i++) {
+            SWData[i][1]=SWData[i][0];
+            SWData[i][0]=SW[i];
+        }
+
+        /* 入力制限モード */
+        static bool restFlag = 0;
+        if(SW_ONE(0)) restFlag=!restFlag;
+
+        /* メインタイマー制御 0-pause 1-start */
+        static bool timerMode=0;
+        if(!SW[1]) timerMode=0;
+        if(!restFlag) {
+            if(SW_ONE(2)) msTimer+=1000*60;
+            if(SW_ONE(3)) msTimer+=1000*10;
+            if(SW_ONE(4)) msTimer+=1000*1;
+
+            if(SW[1]&&SW_ONE(5)) {
+                timerMode=0;
+                msTimer=0;
+            }
+            if(SW[1]&&SW_ONE(6)) timerMode=!timerMode;
+        }
+
+        /* 時間の更新 */
+        static int temp=mainTimer.read_ms();
+        if(timerMode) msTimer+=mainTimer.read_ms()-temp;
+        temp=mainTimer.read_ms();
+        if(msTimer>120e3){timerMode=0; msTimer=120e3;}
+
+        /* UART送受信関連 */
+        char sentData = (timerMode&1)<<7;
+        sentData |= (msTimer/1000)&0x7F;
+        UART.putc(sentData);
+        for(int i=0; i<3; i++)
+            if(newsTimer[i].read_ms()>500)
+                newsStatus[i]=0;
+
+
+        telemetry.printf("%d \n\r",msTimer);
+        
+        /* LCD描画 */
+
+        oled.locate(5,0);
+        oled.printf("%1d:%02d.%d", msTimer/60000,msTimer/1000%60,msTimer/100%10);
+
+        oled.locate(0,0);
+        int statious=!SW[1];
+        if(restFlag&&(SW[2]+SW[3]+SW[4]+SW[5]+SW[6])) restTimer.reset();
+        if(emoTimer.read()<1&&emoTimer.read_ms()%200<100) statious=0;
+        if(statious) oled.printf("EMO");
+        else oled.printf("   ");
+
+        oled.locate(12,0);
+        statious=restFlag;
+        if(!SW[1]&&(SW[5]+SW[6])) emoTimer.reset();
+        if(restTimer.read()<1&&restTimer.read_ms()%200<100) statious=0;
+        if(statious) oled.printf("REST");
+        else oled.printf("    ");
+
+
+        for(int i=0; i<3; i++) {
+            oled.locate(i*6,1);
+            if(newsStatus[i]==0) oled.printf("Lost");
+            if(newsStatus[i]==1) oled.printf("None");
+            if(newsStatus[i]==2) oled.printf("Yoki");
+        }
+//static Timer tim;
+//tim.start();
+//telemetry.printf("%d \n\r",tim.read_ms());
+//tim.reset();
+
+
+    }
+}