YKNCT / Mbed 2 deprecated R21_ConsteSlave2

Dependencies:   mbed CtrlStationRX

Committer:
TakushimaYukimasa
Date:
Sat Oct 02 05:14:25 2021 +0000
Revision:
1:56c272cb4522
Parent:
0:70fee422a0e0
Child:
2:0806f6996e8c
LCD VerUP;

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 1:56c272cb4522 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 1:56c272cb4522 47
TakushimaYukimasa 0:70fee422a0e0 48 UART.attach(uartRX, Serial::RxIrq);
TakushimaYukimasa 0:70fee422a0e0 49
TakushimaYukimasa 0:70fee422a0e0 50 while(1) {
TakushimaYukimasa 1:56c272cb4522 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 1:56c272cb4522 84 if(msTimer>120e3) {
TakushimaYukimasa 1:56c272cb4522 85 timerMode=0;
TakushimaYukimasa 1:56c272cb4522 86 msTimer=120e3;
TakushimaYukimasa 1:56c272cb4522 87 }
TakushimaYukimasa 0:70fee422a0e0 88
TakushimaYukimasa 0:70fee422a0e0 89 /* UART送受信関連 */
TakushimaYukimasa 1:56c272cb4522 90 uint8_t sendData[4] = {0};
TakushimaYukimasa 1:56c272cb4522 91 uint8_t checkSum = 0;
TakushimaYukimasa 1:56c272cb4522 92
TakushimaYukimasa 1:56c272cb4522 93 //チェックサム計算
TakushimaYukimasa 1:56c272cb4522 94 for (int i = 0; i < 7; i++)
TakushimaYukimasa 1:56c272cb4522 95 checkSum += msTimer / (int)pow(10.0, (double)i) % 10;
TakushimaYukimasa 1:56c272cb4522 96
TakushimaYukimasa 1:56c272cb4522 97 sendData[3] = 0x80;
TakushimaYukimasa 1:56c272cb4522 98 sendData[3] |= timerMode << 6;
TakushimaYukimasa 1:56c272cb4522 99 sendData[3] |= checkSum & 0x3F;
TakushimaYukimasa 1:56c272cb4522 100
TakushimaYukimasa 1:56c272cb4522 101 //1バイト区切る
TakushimaYukimasa 1:56c272cb4522 102 for(int i = 0; i < 3; i++)
TakushimaYukimasa 1:56c272cb4522 103 sendData[i] = 0x7F & msTimer >> 7 * (2-i);
TakushimaYukimasa 1:56c272cb4522 104
TakushimaYukimasa 1:56c272cb4522 105 for(int i = 0; i < 4; i++){
TakushimaYukimasa 1:56c272cb4522 106 UART.putc(sendData[i]);
TakushimaYukimasa 1:56c272cb4522 107 telemetry.putc(sendData[i]);
TakushimaYukimasa 1:56c272cb4522 108 }
TakushimaYukimasa 1:56c272cb4522 109 // telemetry.printf("%d \n\r",msTimer);
TakushimaYukimasa 1:56c272cb4522 110
TakushimaYukimasa 0:70fee422a0e0 111 for(int i=0; i<3; i++)
TakushimaYukimasa 0:70fee422a0e0 112 if(newsTimer[i].read_ms()>500)
TakushimaYukimasa 0:70fee422a0e0 113 newsStatus[i]=0;
TakushimaYukimasa 0:70fee422a0e0 114
TakushimaYukimasa 0:70fee422a0e0 115
TakushimaYukimasa 1:56c272cb4522 116
TakushimaYukimasa 0:70fee422a0e0 117 /* LCD描画 */
TakushimaYukimasa 0:70fee422a0e0 118
TakushimaYukimasa 1:56c272cb4522 119 // oled.locate(5,0);
TakushimaYukimasa 1:56c272cb4522 120 // oled.printf("%1d:%02d.%d ", msTimer/60000,msTimer/1000%60,msTimer/100%10);
TakushimaYukimasa 1:56c272cb4522 121 //
TakushimaYukimasa 1:56c272cb4522 122 // oled.locate(0,0);
TakushimaYukimasa 1:56c272cb4522 123 // int statious=!SW[1];
TakushimaYukimasa 1:56c272cb4522 124 // if(restFlag&&(SW[2]+SW[3]+SW[4]+SW[5]+SW[6])) restTimer.reset();
TakushimaYukimasa 1:56c272cb4522 125 // if(emoTimer.read()<1&&emoTimer.read_ms()%200<100) statious=0;
TakushimaYukimasa 1:56c272cb4522 126 // if(statious) oled.printf("EMO ");
TakushimaYukimasa 1:56c272cb4522 127 // else oled.printf(" ");
TakushimaYukimasa 1:56c272cb4522 128 //
TakushimaYukimasa 1:56c272cb4522 129 // oled.locate(12,0);
TakushimaYukimasa 1:56c272cb4522 130 // statious=restFlag;
TakushimaYukimasa 1:56c272cb4522 131 // if(!SW[1]&&(SW[5]+SW[6])) emoTimer.reset();
TakushimaYukimasa 1:56c272cb4522 132 // if(restTimer.read()<1&&restTimer.read_ms()%200<100) statious=0;
TakushimaYukimasa 1:56c272cb4522 133 // if(statious) oled.printf("REST");
TakushimaYukimasa 1:56c272cb4522 134 // else oled.printf(" ");
TakushimaYukimasa 0:70fee422a0e0 135
TakushimaYukimasa 1:56c272cb4522 136
TakushimaYukimasa 1:56c272cb4522 137 // for(int i=0; i<3; i++) {
TakushimaYukimasa 1:56c272cb4522 138 // oled.locate(i*6,1);
TakushimaYukimasa 1:56c272cb4522 139 // if(newsStatus[i]==0) oled.printf("Lost");
TakushimaYukimasa 1:56c272cb4522 140 // if(newsStatus[i]==1) oled.printf("None");
TakushimaYukimasa 1:56c272cb4522 141 // if(newsStatus[i]==2) oled.printf("Yoki");
TakushimaYukimasa 1:56c272cb4522 142 // }
TakushimaYukimasa 1:56c272cb4522 143 // for(int i=0; i<2; i++) {
TakushimaYukimasa 1:56c272cb4522 144 // oled.locate(i*6+4,1);
TakushimaYukimasa 1:56c272cb4522 145 // oled.printf(" ");
TakushimaYukimasa 1:56c272cb4522 146 // }
TakushimaYukimasa 1:56c272cb4522 147
TakushimaYukimasa 1:56c272cb4522 148 char printLCD[32] = {0};
TakushimaYukimasa 1:56c272cb4522 149
TakushimaYukimasa 0:70fee422a0e0 150 int statious=!SW[1];
TakushimaYukimasa 0:70fee422a0e0 151 if(restFlag&&(SW[2]+SW[3]+SW[4]+SW[5]+SW[6])) restTimer.reset();
TakushimaYukimasa 0:70fee422a0e0 152 if(emoTimer.read()<1&&emoTimer.read_ms()%200<100) statious=0;
TakushimaYukimasa 1:56c272cb4522 153 if(statious) strcat(printLCD,"EMO ");
TakushimaYukimasa 1:56c272cb4522 154 else strcat(printLCD," ");
TakushimaYukimasa 1:56c272cb4522 155
TakushimaYukimasa 1:56c272cb4522 156 char tmp[17] = {0};
TakushimaYukimasa 1:56c272cb4522 157 sprintf(tmp,"%1d:%02d.%d ", msTimer/60000,msTimer/1000%60,msTimer/100%10);
TakushimaYukimasa 1:56c272cb4522 158 strcat(printLCD,tmp);
TakushimaYukimasa 1:56c272cb4522 159
TakushimaYukimasa 0:70fee422a0e0 160 statious=restFlag;
TakushimaYukimasa 0:70fee422a0e0 161 if(!SW[1]&&(SW[5]+SW[6])) emoTimer.reset();
TakushimaYukimasa 0:70fee422a0e0 162 if(restTimer.read()<1&&restTimer.read_ms()%200<100) statious=0;
TakushimaYukimasa 1:56c272cb4522 163 if(statious) strcat(printLCD,"REST");
TakushimaYukimasa 1:56c272cb4522 164 else strcat(printLCD," ");
TakushimaYukimasa 1:56c272cb4522 165
TakushimaYukimasa 1:56c272cb4522 166 const char stat[3][5] = {"Lost","None","Yoki"};
TakushimaYukimasa 1:56c272cb4522 167 oled.locate(0,1);
TakushimaYukimasa 1:56c272cb4522 168 sprintf(tmp,"%s %s %s",stat[newsStatus[0]],stat[newsStatus[1]],stat[newsStatus[2]]);
TakushimaYukimasa 1:56c272cb4522 169 strcat(printLCD,tmp);
TakushimaYukimasa 1:56c272cb4522 170
TakushimaYukimasa 1:56c272cb4522 171 oled.locate(0,0);
TakushimaYukimasa 1:56c272cb4522 172 oled.printf(printLCD);
TakushimaYukimasa 1:56c272cb4522 173
TakushimaYukimasa 1:56c272cb4522 174 // for(int i=0; i<3; i++) {
TakushimaYukimasa 1:56c272cb4522 175 // oled.locate(i*6,1);
TakushimaYukimasa 1:56c272cb4522 176 // if(newsStatus[i]==0) oled.printf("Lost");
TakushimaYukimasa 1:56c272cb4522 177 // if(newsStatus[i]==1) oled.printf("None");
TakushimaYukimasa 1:56c272cb4522 178 // if(newsStatus[i]==2) oled.printf("Yoki");
TakushimaYukimasa 1:56c272cb4522 179 // }
TakushimaYukimasa 1:56c272cb4522 180 // for(int i=0; i<2; i++) {
TakushimaYukimasa 1:56c272cb4522 181 // oled.locate(i*6+4,1);
TakushimaYukimasa 1:56c272cb4522 182 // oled.printf(" ");
TakushimaYukimasa 1:56c272cb4522 183 // }
TakushimaYukimasa 0:70fee422a0e0 184 //static Timer tim;
TakushimaYukimasa 0:70fee422a0e0 185 //tim.start();
TakushimaYukimasa 0:70fee422a0e0 186 //telemetry.printf("%d \n\r",tim.read_ms());
TakushimaYukimasa 0:70fee422a0e0 187 //tim.reset();
TakushimaYukimasa 0:70fee422a0e0 188
TakushimaYukimasa 0:70fee422a0e0 189
TakushimaYukimasa 0:70fee422a0e0 190 }
TakushimaYukimasa 0:70fee422a0e0 191 }