YKNCT / Mbed 2 deprecated R21_ConsteSlave2

Dependencies:   mbed CtrlStationRX

Committer:
TakushimaYukimasa
Date:
Mon Sep 27 04:26:26 2021 +0000
Revision:
0:70fee422a0e0
Child:
1:56c272cb4522
ugoku

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TakushimaYukimasa 0:70fee422a0e0 1 #include "mbed.h"
TakushimaYukimasa 0:70fee422a0e0 2 #include "SO1602A.h"
TakushimaYukimasa 0:70fee422a0e0 3 #define SW_ONE(__NUM__) (SWData[__NUM__][0]-SWData[__NUM__][1]==1)
TakushimaYukimasa 0:70fee422a0e0 4
TakushimaYukimasa 0:70fee422a0e0 5 DigitalIn SW[7]= {PA_3,PA_12,PB_5,PA_11,PA_8,PF_1,PF_0};
TakushimaYukimasa 0:70fee422a0e0 6
TakushimaYukimasa 0:70fee422a0e0 7 DigitalOut POWER[2]= {PA_1,PB_1};
TakushimaYukimasa 0:70fee422a0e0 8
TakushimaYukimasa 0:70fee422a0e0 9 Serial UART(PA_9,PA_10, 9600);
TakushimaYukimasa 0:70fee422a0e0 10
TakushimaYukimasa 0:70fee422a0e0 11 DigitalOut led(LED1);
TakushimaYukimasa 0:70fee422a0e0 12 Serial telemetry(USBTX, USBRX, 115200);
TakushimaYukimasa 0:70fee422a0e0 13
TakushimaYukimasa 0:70fee422a0e0 14 SO1602A oled(PB_7,PB_6);
TakushimaYukimasa 0:70fee422a0e0 15
TakushimaYukimasa 0:70fee422a0e0 16 Timer emoTimer;
TakushimaYukimasa 0:70fee422a0e0 17 Timer restTimer;
TakushimaYukimasa 0:70fee422a0e0 18 Timer newsTimer[3];
TakushimaYukimasa 0:70fee422a0e0 19 Timer mainTimer;
TakushimaYukimasa 0:70fee422a0e0 20 int msTimer=0;
TakushimaYukimasa 0:70fee422a0e0 21
TakushimaYukimasa 0:70fee422a0e0 22 int newsStatus[3] = {0};
TakushimaYukimasa 0:70fee422a0e0 23
TakushimaYukimasa 0:70fee422a0e0 24 void uartRX()
TakushimaYukimasa 0:70fee422a0e0 25 {
TakushimaYukimasa 0:70fee422a0e0 26 char data = UART.getc();
TakushimaYukimasa 0:70fee422a0e0 27 newsStatus[(data>>2)&0b11]=(data&0b11);
TakushimaYukimasa 0:70fee422a0e0 28 newsTimer[(data>>2)&0b11].reset();
TakushimaYukimasa 0:70fee422a0e0 29 }
TakushimaYukimasa 0:70fee422a0e0 30
TakushimaYukimasa 0:70fee422a0e0 31 int main()
TakushimaYukimasa 0:70fee422a0e0 32 {
TakushimaYukimasa 0:70fee422a0e0 33
TakushimaYukimasa 0:70fee422a0e0 34 POWER[0]=POWER[1]=1;
TakushimaYukimasa 0:70fee422a0e0 35 for(int i=0; i<7; i++) SW[i].mode(PullDown);
TakushimaYukimasa 0:70fee422a0e0 36
TakushimaYukimasa 0:70fee422a0e0 37 mainTimer.reset();
TakushimaYukimasa 0:70fee422a0e0 38 mainTimer.start();
TakushimaYukimasa 0:70fee422a0e0 39 restTimer.start();
TakushimaYukimasa 0:70fee422a0e0 40 emoTimer.start();
TakushimaYukimasa 0:70fee422a0e0 41 for(int i=0; i<3; i++) newsTimer[i].start();
TakushimaYukimasa 0:70fee422a0e0 42
TakushimaYukimasa 0:70fee422a0e0 43 oled.init();
TakushimaYukimasa 0:70fee422a0e0 44 oled.setDispFlag(1,0,0);
TakushimaYukimasa 0:70fee422a0e0 45 // oled.locate(2,0);
TakushimaYukimasa 0:70fee422a0e0 46 // oled.printf("Stop display");
TakushimaYukimasa 0:70fee422a0e0 47
TakushimaYukimasa 0:70fee422a0e0 48 UART.attach(uartRX, Serial::RxIrq);
TakushimaYukimasa 0:70fee422a0e0 49
TakushimaYukimasa 0:70fee422a0e0 50 while(1) {
TakushimaYukimasa 0:70fee422a0e0 51
TakushimaYukimasa 0:70fee422a0e0 52 // telemetry.printf("%d\n\r", (SW[6]==0?0:1));
TakushimaYukimasa 0:70fee422a0e0 53
TakushimaYukimasa 0:70fee422a0e0 54 /* SW入力のワンタイム化 */
TakushimaYukimasa 0:70fee422a0e0 55 static bool SWData[7][2] = {0};
TakushimaYukimasa 0:70fee422a0e0 56 for(int i=0; i<7; i++) {
TakushimaYukimasa 0:70fee422a0e0 57 SWData[i][1]=SWData[i][0];
TakushimaYukimasa 0:70fee422a0e0 58 SWData[i][0]=SW[i];
TakushimaYukimasa 0:70fee422a0e0 59 }
TakushimaYukimasa 0:70fee422a0e0 60
TakushimaYukimasa 0:70fee422a0e0 61 /* 入力制限モード */
TakushimaYukimasa 0:70fee422a0e0 62 static bool restFlag = 0;
TakushimaYukimasa 0:70fee422a0e0 63 if(SW_ONE(0)) restFlag=!restFlag;
TakushimaYukimasa 0:70fee422a0e0 64
TakushimaYukimasa 0:70fee422a0e0 65 /* メインタイマー制御 0-pause 1-start */
TakushimaYukimasa 0:70fee422a0e0 66 static bool timerMode=0;
TakushimaYukimasa 0:70fee422a0e0 67 if(!SW[1]) timerMode=0;
TakushimaYukimasa 0:70fee422a0e0 68 if(!restFlag) {
TakushimaYukimasa 0:70fee422a0e0 69 if(SW_ONE(2)) msTimer+=1000*60;
TakushimaYukimasa 0:70fee422a0e0 70 if(SW_ONE(3)) msTimer+=1000*10;
TakushimaYukimasa 0:70fee422a0e0 71 if(SW_ONE(4)) msTimer+=1000*1;
TakushimaYukimasa 0:70fee422a0e0 72
TakushimaYukimasa 0:70fee422a0e0 73 if(SW[1]&&SW_ONE(5)) {
TakushimaYukimasa 0:70fee422a0e0 74 timerMode=0;
TakushimaYukimasa 0:70fee422a0e0 75 msTimer=0;
TakushimaYukimasa 0:70fee422a0e0 76 }
TakushimaYukimasa 0:70fee422a0e0 77 if(SW[1]&&SW_ONE(6)) timerMode=!timerMode;
TakushimaYukimasa 0:70fee422a0e0 78 }
TakushimaYukimasa 0:70fee422a0e0 79
TakushimaYukimasa 0:70fee422a0e0 80 /* 時間の更新 */
TakushimaYukimasa 0:70fee422a0e0 81 static int temp=mainTimer.read_ms();
TakushimaYukimasa 0:70fee422a0e0 82 if(timerMode) msTimer+=mainTimer.read_ms()-temp;
TakushimaYukimasa 0:70fee422a0e0 83 temp=mainTimer.read_ms();
TakushimaYukimasa 0:70fee422a0e0 84 if(msTimer>120e3){timerMode=0; msTimer=120e3;}
TakushimaYukimasa 0:70fee422a0e0 85
TakushimaYukimasa 0:70fee422a0e0 86 /* UART送受信関連 */
TakushimaYukimasa 0:70fee422a0e0 87 char sentData = (timerMode&1)<<7;
TakushimaYukimasa 0:70fee422a0e0 88 sentData |= (msTimer/1000)&0x7F;
TakushimaYukimasa 0:70fee422a0e0 89 UART.putc(sentData);
TakushimaYukimasa 0:70fee422a0e0 90 for(int i=0; i<3; i++)
TakushimaYukimasa 0:70fee422a0e0 91 if(newsTimer[i].read_ms()>500)
TakushimaYukimasa 0:70fee422a0e0 92 newsStatus[i]=0;
TakushimaYukimasa 0:70fee422a0e0 93
TakushimaYukimasa 0:70fee422a0e0 94
TakushimaYukimasa 0:70fee422a0e0 95 telemetry.printf("%d \n\r",msTimer);
TakushimaYukimasa 0:70fee422a0e0 96
TakushimaYukimasa 0:70fee422a0e0 97 /* LCD描画 */
TakushimaYukimasa 0:70fee422a0e0 98
TakushimaYukimasa 0:70fee422a0e0 99 oled.locate(5,0);
TakushimaYukimasa 0:70fee422a0e0 100 oled.printf("%1d:%02d.%d", msTimer/60000,msTimer/1000%60,msTimer/100%10);
TakushimaYukimasa 0:70fee422a0e0 101
TakushimaYukimasa 0:70fee422a0e0 102 oled.locate(0,0);
TakushimaYukimasa 0:70fee422a0e0 103 int statious=!SW[1];
TakushimaYukimasa 0:70fee422a0e0 104 if(restFlag&&(SW[2]+SW[3]+SW[4]+SW[5]+SW[6])) restTimer.reset();
TakushimaYukimasa 0:70fee422a0e0 105 if(emoTimer.read()<1&&emoTimer.read_ms()%200<100) statious=0;
TakushimaYukimasa 0:70fee422a0e0 106 if(statious) oled.printf("EMO");
TakushimaYukimasa 0:70fee422a0e0 107 else oled.printf(" ");
TakushimaYukimasa 0:70fee422a0e0 108
TakushimaYukimasa 0:70fee422a0e0 109 oled.locate(12,0);
TakushimaYukimasa 0:70fee422a0e0 110 statious=restFlag;
TakushimaYukimasa 0:70fee422a0e0 111 if(!SW[1]&&(SW[5]+SW[6])) emoTimer.reset();
TakushimaYukimasa 0:70fee422a0e0 112 if(restTimer.read()<1&&restTimer.read_ms()%200<100) statious=0;
TakushimaYukimasa 0:70fee422a0e0 113 if(statious) oled.printf("REST");
TakushimaYukimasa 0:70fee422a0e0 114 else oled.printf(" ");
TakushimaYukimasa 0:70fee422a0e0 115
TakushimaYukimasa 0:70fee422a0e0 116
TakushimaYukimasa 0:70fee422a0e0 117 for(int i=0; i<3; i++) {
TakushimaYukimasa 0:70fee422a0e0 118 oled.locate(i*6,1);
TakushimaYukimasa 0:70fee422a0e0 119 if(newsStatus[i]==0) oled.printf("Lost");
TakushimaYukimasa 0:70fee422a0e0 120 if(newsStatus[i]==1) oled.printf("None");
TakushimaYukimasa 0:70fee422a0e0 121 if(newsStatus[i]==2) oled.printf("Yoki");
TakushimaYukimasa 0:70fee422a0e0 122 }
TakushimaYukimasa 0:70fee422a0e0 123 //static Timer tim;
TakushimaYukimasa 0:70fee422a0e0 124 //tim.start();
TakushimaYukimasa 0:70fee422a0e0 125 //telemetry.printf("%d \n\r",tim.read_ms());
TakushimaYukimasa 0:70fee422a0e0 126 //tim.reset();
TakushimaYukimasa 0:70fee422a0e0 127
TakushimaYukimasa 0:70fee422a0e0 128
TakushimaYukimasa 0:70fee422a0e0 129 }
TakushimaYukimasa 0:70fee422a0e0 130 }