![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
WathchDog
main.cpp@9:6c267eecb235, 2019-09-12 (annotated)
- Committer:
- orain3
- Date:
- Thu Sep 12 06:28:57 2019 +0000
- Revision:
- 9:6c267eecb235
- Parent:
- 8:0c5a091410cf
WDT & 485Fleeze Taisakuban
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
orain3 | 0:63c74ee8bffc | 1 | #include "mbed.h" |
orain3 | 8:0c5a091410cf | 2 | #include "WDT.h" |
orain3 | 6:1948d19f854f | 3 | |
orain3 | 4:cb6587253326 | 4 | //const int _ID = 4; |
orain3 | 3:b082ed02d08c | 5 | |
orain3 | 3:b082ed02d08c | 6 | void irqrecv(); |
orain3 | 4:cb6587253326 | 7 | int rs485_recv(float ,float ,float ,float ,float); |
orain3 | 3:b082ed02d08c | 8 | char rsgetc(); |
orain3 | 3:b082ed02d08c | 9 | int rslen(); |
orain3 | 3:b082ed02d08c | 10 | |
orain3 | 0:63c74ee8bffc | 11 | Serial pc(SERIAL_TX,SERIAL_RX); |
orain3 | 1:c896654c679b | 12 | Serial modem(D1,D0); |
orain3 | 1:c896654c679b | 13 | AnalogIn adc_1(A0); |
orain3 | 1:c896654c679b | 14 | AnalogIn adc_2(A1); |
orain3 | 1:c896654c679b | 15 | AnalogIn adc_3(A2); |
orain3 | 1:c896654c679b | 16 | AnalogIn adc_4(A3); |
orain3 | 0:63c74ee8bffc | 17 | |
orain3 | 0:63c74ee8bffc | 18 | DigitalOut led(LED1); |
orain3 | 1:c896654c679b | 19 | DigitalOut sokutei(D3); |
orain3 | 4:cb6587253326 | 20 | DigitalOut pos1(D4); |
orain3 | 4:cb6587253326 | 21 | DigitalOut pos2(D5); |
orain3 | 1:c896654c679b | 22 | DigitalIn in1(D9,PullNone); |
orain3 | 1:c896654c679b | 23 | DigitalIn in2(D10,PullNone); |
orain3 | 1:c896654c679b | 24 | DigitalIn kansyutu(D6,PullNone); |
orain3 | 1:c896654c679b | 25 | DigitalIn commandin(D7,PullNone); |
orain3 | 1:c896654c679b | 26 | DigitalIn jmp(D2,PullUp); |
orain3 | 4:cb6587253326 | 27 | DigitalIn pulse1(D9,PullNone); |
orain3 | 4:cb6587253326 | 28 | DigitalIn pulse2(D10,PullNone); |
orain3 | 4:cb6587253326 | 29 | |
orain3 | 4:cb6587253326 | 30 | Timer pulse_watcher; |
orain3 | 0:63c74ee8bffc | 31 | |
orain3 | 0:63c74ee8bffc | 32 | |
orain3 | 7:f201e2d0ed4f | 33 | #define bufsize 2048 |
orain3 | 3:b082ed02d08c | 34 | char RxBuff[bufsize+1]; |
orain3 | 3:b082ed02d08c | 35 | int RxPtr; |
orain3 | 3:b082ed02d08c | 36 | int RdPtr; |
orain3 | 3:b082ed02d08c | 37 | |
orain3 | 4:cb6587253326 | 38 | int data[40]; |
orain3 | 4:cb6587253326 | 39 | |
orain3 | 4:cb6587253326 | 40 | |
orain3 | 3:b082ed02d08c | 41 | char rsgetc() { |
orain3 | 3:b082ed02d08c | 42 | |
orain3 | 3:b082ed02d08c | 43 | RdPtr++; |
orain3 | 3:b082ed02d08c | 44 | if(RdPtr >= bufsize-1) RdPtr = 0; |
orain3 | 3:b082ed02d08c | 45 | return(RxBuff[RdPtr]); |
orain3 | 3:b082ed02d08c | 46 | } |
orain3 | 3:b082ed02d08c | 47 | |
orain3 | 3:b082ed02d08c | 48 | int rslen() { |
orain3 | 3:b082ed02d08c | 49 | // if (RxPtr < RdPtr) { |
orain3 | 3:b082ed02d08c | 50 | // return(bufsize + RxPtr - RdPtr); |
orain3 | 3:b082ed02d08c | 51 | // } else { |
orain3 | 3:b082ed02d08c | 52 | // return(RxPtr - RdPtr); |
orain3 | 3:b082ed02d08c | 53 | // } |
orain3 | 3:b082ed02d08c | 54 | return(RxPtr - RdPtr); |
orain3 | 3:b082ed02d08c | 55 | } |
orain3 | 3:b082ed02d08c | 56 | |
orain3 | 3:b082ed02d08c | 57 | void irqrecv() { |
orain3 | 3:b082ed02d08c | 58 | if (modem.readable()) { |
orain3 | 3:b082ed02d08c | 59 | if (RxPtr <= bufsize - 1) { |
orain3 | 3:b082ed02d08c | 60 | RxBuff[++RxPtr] = modem.getc(); |
orain3 | 3:b082ed02d08c | 61 | } else { |
orain3 | 3:b082ed02d08c | 62 | RxPtr = 0; |
orain3 | 3:b082ed02d08c | 63 | RxBuff[RxPtr] = modem.getc(); |
orain3 | 3:b082ed02d08c | 64 | } |
orain3 | 3:b082ed02d08c | 65 | } |
orain3 | 3:b082ed02d08c | 66 | } |
orain3 | 3:b082ed02d08c | 67 | |
orain3 | 7:f201e2d0ed4f | 68 | //unsigned char buf485[512]; |
orain3 | 7:f201e2d0ed4f | 69 | unsigned char buf485[2048]; |
orain3 | 3:b082ed02d08c | 70 | int cnt485; |
orain3 | 3:b082ed02d08c | 71 | |
orain3 | 9:6c267eecb235 | 72 | // 20190912 K.Hirasawa |
orain3 | 9:6c267eecb235 | 73 | // WDT&Count de Taisaku |
orain3 | 9:6c267eecb235 | 74 | // Fleeze ha WDT de taisakuzumi. |
orain3 | 9:6c267eecb235 | 75 | // RS485 no kaisenn nigittamama monndai nara CountOver de Reset. |
orain3 | 9:6c267eecb235 | 76 | int cntOver; |
orain3 | 9:6c267eecb235 | 77 | |
orain3 | 0:63c74ee8bffc | 78 | int main() |
orain3 | 0:63c74ee8bffc | 79 | { |
orain3 | 1:c896654c679b | 80 | float sum1,sum2,sum3,sum4; |
orain3 | 1:c896654c679b | 81 | float ad1,ad2,ad3,ad4; |
orain3 | 3:b082ed02d08c | 82 | static float temp;//,turb,s; |
orain3 | 0:63c74ee8bffc | 83 | int i,cnt; |
orain3 | 4:cb6587253326 | 84 | int pulse; |
orain3 | 0:63c74ee8bffc | 85 | |
orain3 | 8:0c5a091410cf | 86 | pc.printf("\n--Initial Start--\r\n"); |
orain3 | 8:0c5a091410cf | 87 | |
orain3 | 8:0c5a091410cf | 88 | WDT wdgTimer; |
orain3 | 9:6c267eecb235 | 89 | cntOver = 0; |
orain3 | 6:1948d19f854f | 90 | |
orain3 | 8:0c5a091410cf | 91 | wdgTimer.Configure(10); |
orain3 | 8:0c5a091410cf | 92 | |
orain3 | 1:c896654c679b | 93 | modem.baud(38400); |
orain3 | 1:c896654c679b | 94 | modem.format(8,Serial::None,1); |
orain3 | 3:b082ed02d08c | 95 | RxPtr = 0; |
orain3 | 3:b082ed02d08c | 96 | RdPtr = 0; |
orain3 | 3:b082ed02d08c | 97 | modem.attach(irqrecv,RawSerial::RxIrq); |
orain3 | 3:b082ed02d08c | 98 | cnt485 = 0; |
orain3 | 3:b082ed02d08c | 99 | buf485[0] = '\0'; |
orain3 | 0:63c74ee8bffc | 100 | |
orain3 | 8:0c5a091410cf | 101 | wdgTimer.Service(); |
orain3 | 7:f201e2d0ed4f | 102 | |
orain3 | 7:f201e2d0ed4f | 103 | |
orain3 | 4:cb6587253326 | 104 | pos1 = 1; |
orain3 | 4:cb6587253326 | 105 | pos2 = 1; |
orain3 | 4:cb6587253326 | 106 | |
orain3 | 0:63c74ee8bffc | 107 | temp = 0; |
orain3 | 3:b082ed02d08c | 108 | // turb = 0; |
orain3 | 3:b082ed02d08c | 109 | // s = 0; |
orain3 | 1:c896654c679b | 110 | sokutei = 1; |
orain3 | 4:cb6587253326 | 111 | pulse_watcher.start(); |
orain3 | 4:cb6587253326 | 112 | pulse = pulse1 || pulse2; |
orain3 | 4:cb6587253326 | 113 | |
orain3 | 8:0c5a091410cf | 114 | |
orain3 | 8:0c5a091410cf | 115 | |
orain3 | 7:f201e2d0ed4f | 116 | for (i = 0;i<40;i++) { |
orain3 | 7:f201e2d0ed4f | 117 | data[i] = 0; |
orain3 | 8:0c5a091410cf | 118 | wdgTimer.Service(); |
orain3 | 7:f201e2d0ed4f | 119 | } |
orain3 | 8:0c5a091410cf | 120 | |
orain3 | 8:0c5a091410cf | 121 | pc.printf("\n--Initial End--\r\n"); |
orain3 | 8:0c5a091410cf | 122 | |
orain3 | 0:63c74ee8bffc | 123 | while(1) { |
orain3 | 4:cb6587253326 | 124 | if (pulse_watcher.read() > 100) pulse_watcher.reset(); |
orain3 | 1:c896654c679b | 125 | |
orain3 | 4:cb6587253326 | 126 | // if (jmp) sokutei = 1; |
orain3 | 4:cb6587253326 | 127 | // else sokutei = 0; |
orain3 | 4:cb6587253326 | 128 | |
orain3 | 4:cb6587253326 | 129 | // if (jmp) { |
orain3 | 4:cb6587253326 | 130 | // pos1 = 1; |
orain3 | 4:cb6587253326 | 131 | // pos2 = 1; |
orain3 | 4:cb6587253326 | 132 | // } else { |
orain3 | 4:cb6587253326 | 133 | // pos1 = 0; |
orain3 | 4:cb6587253326 | 134 | // pos2 = 0; |
orain3 | 4:cb6587253326 | 135 | // } |
orain3 | 1:c896654c679b | 136 | |
orain3 | 0:63c74ee8bffc | 137 | sum1 = 0; |
orain3 | 0:63c74ee8bffc | 138 | sum2 = 0; |
orain3 | 1:c896654c679b | 139 | sum3 = 0; |
orain3 | 1:c896654c679b | 140 | sum4 = 0; |
orain3 | 0:63c74ee8bffc | 141 | cnt = 0; |
orain3 | 3:b082ed02d08c | 142 | for (i=0;i<1000;i++) { |
orain3 | 4:cb6587253326 | 143 | rs485_recv(temp,ad1,ad2,ad3,ad4); |
orain3 | 3:b082ed02d08c | 144 | |
orain3 | 0:63c74ee8bffc | 145 | sum1 += adc_1.read(); |
orain3 | 0:63c74ee8bffc | 146 | sum2 += adc_2.read(); |
orain3 | 1:c896654c679b | 147 | sum3 += adc_3.read(); |
orain3 | 1:c896654c679b | 148 | sum4 += adc_4.read(); |
orain3 | 0:63c74ee8bffc | 149 | cnt += 1; |
orain3 | 0:63c74ee8bffc | 150 | wait(0.001); |
orain3 | 0:63c74ee8bffc | 151 | |
orain3 | 2:d69d10b670c5 | 152 | // if (modem.readable()) { |
orain3 | 2:d69d10b670c5 | 153 | // pc.printf("%c\r",modem.getc()); |
orain3 | 2:d69d10b670c5 | 154 | // wait(0.01); |
orain3 | 2:d69d10b670c5 | 155 | // modem.printf("=04,PVAL,%01.04f,0,\r",temp); |
orain3 | 2:d69d10b670c5 | 156 | // } |
orain3 | 4:cb6587253326 | 157 | // pulse watch |
orain3 | 4:cb6587253326 | 158 | if ( (pulse1 || pulse2) != pulse ) { |
orain3 | 4:cb6587253326 | 159 | pulse_watcher.reset(); |
orain3 | 4:cb6587253326 | 160 | pos1 = 0; |
orain3 | 4:cb6587253326 | 161 | pos2 = 0; |
orain3 | 4:cb6587253326 | 162 | } |
orain3 | 4:cb6587253326 | 163 | pulse = pulse1 || pulse2; |
orain3 | 4:cb6587253326 | 164 | if ( pulse_watcher.read() > 10) { |
orain3 | 4:cb6587253326 | 165 | pos1 = 1; |
orain3 | 4:cb6587253326 | 166 | pos2 = 1; |
orain3 | 4:cb6587253326 | 167 | } |
orain3 | 4:cb6587253326 | 168 | |
orain3 | 8:0c5a091410cf | 169 | // if (jmp != 0) wdgTimer.Service(); |
orain3 | 8:0c5a091410cf | 170 | wdgTimer.Service(); |
orain3 | 7:f201e2d0ed4f | 171 | |
orain3 | 4:cb6587253326 | 172 | // pulsewatch |
orain3 | 0:63c74ee8bffc | 173 | } |
orain3 | 0:63c74ee8bffc | 174 | if(cnt != 0) { |
orain3 | 0:63c74ee8bffc | 175 | ad1 = sum1/cnt; |
orain3 | 0:63c74ee8bffc | 176 | ad2 = sum2/cnt; |
orain3 | 1:c896654c679b | 177 | ad3 = sum3/cnt; |
orain3 | 1:c896654c679b | 178 | ad4 = sum4/cnt; |
orain3 | 0:63c74ee8bffc | 179 | } else { |
orain3 | 0:63c74ee8bffc | 180 | ad1 = adc_1.read(); |
orain3 | 0:63c74ee8bffc | 181 | ad2 = adc_2.read(); |
orain3 | 1:c896654c679b | 182 | ad3 = adc_3.read(); |
orain3 | 1:c896654c679b | 183 | ad4 = adc_4.read(); |
orain3 | 0:63c74ee8bffc | 184 | } |
orain3 | 0:63c74ee8bffc | 185 | |
orain3 | 3:b082ed02d08c | 186 | if (ad1 < 0.2435L) ad1 = 0.2435L; |
orain3 | 3:b082ed02d08c | 187 | if (ad1 > 0.8085L) ad1 = 0.8085L; |
orain3 | 3:b082ed02d08c | 188 | |
orain3 | 3:b082ed02d08c | 189 | temp = (double)(ad1 - 0.2435L) * 60.0L / (0.8085L - 0.2425L) - 10.0L; |
orain3 | 3:b082ed02d08c | 190 | // pc.printf("ADC = %f %f %f %f %f \r\n", ad1,ad2,ad3,ad4,temp); |
orain3 | 3:b082ed02d08c | 191 | // s = 0; |
orain3 | 0:63c74ee8bffc | 192 | |
orain3 | 4:cb6587253326 | 193 | // data set |
orain3 | 4:cb6587253326 | 194 | data[8] = ad1 * 0xffff; |
orain3 | 4:cb6587253326 | 195 | data[9] = ad2 * 0xffff; |
orain3 | 4:cb6587253326 | 196 | data[10] = ad3 * 0xffff; |
orain3 | 4:cb6587253326 | 197 | data[12] = ad4 * 0xffff; |
orain3 | 6:1948d19f854f | 198 | |
orain3 | 7:f201e2d0ed4f | 199 | //WDT test |
orain3 | 7:f201e2d0ed4f | 200 | // if (jmp == 0) while(1) ; |
orain3 | 7:f201e2d0ed4f | 201 | |
orain3 | 7:f201e2d0ed4f | 202 | // wdg.kick(); // IWDGをリセット |
orain3 | 8:0c5a091410cf | 203 | // if (jmp != 0) wdgTimer.Service(); |
orain3 | 9:6c267eecb235 | 204 | |
orain3 | 9:6c267eecb235 | 205 | cntOver += 1; // 1s ni ikkai CountUp |
orain3 | 8:0c5a091410cf | 206 | wdgTimer.Service(); |
orain3 | 9:6c267eecb235 | 207 | |
orain3 | 9:6c267eecb235 | 208 | if (cntOver > 60) { |
orain3 | 9:6c267eecb235 | 209 | wdgTimer.Configure(1); |
orain3 | 9:6c267eecb235 | 210 | while(1) {;} |
orain3 | 9:6c267eecb235 | 211 | } |
orain3 | 0:63c74ee8bffc | 212 | } |
orain3 | 0:63c74ee8bffc | 213 | } |
orain3 | 3:b082ed02d08c | 214 | |
orain3 | 3:b082ed02d08c | 215 | |
orain3 | 4:cb6587253326 | 216 | int rs485_recv(float temp,float ad1,float ad2,float ad3,float ad4) { |
orain3 | 3:b082ed02d08c | 217 | char chr; |
orain3 | 4:cb6587253326 | 218 | // char idbuf[8]; |
orain3 | 4:cb6587253326 | 219 | char sendbuf[512]; |
orain3 | 4:cb6587253326 | 220 | // int i; |
orain3 | 4:cb6587253326 | 221 | |
orain3 | 3:b082ed02d08c | 222 | if (rslen()) { |
orain3 | 3:b082ed02d08c | 223 | chr = rsgetc(); |
orain3 | 3:b082ed02d08c | 224 | buf485[cnt485++] = chr; |
orain3 | 3:b082ed02d08c | 225 | buf485[cnt485] = '\0'; |
orain3 | 3:b082ed02d08c | 226 | if (chr == '?') cnt485 = 0; |
orain3 | 3:b082ed02d08c | 227 | |
orain3 | 4:cb6587253326 | 228 | if (chr == 0x0a) { |
orain3 | 9:6c267eecb235 | 229 | // 20190912 K.Hirasawa |
orain3 | 9:6c267eecb235 | 230 | cntOver = 0; // Jyusin ari! |
orain3 | 9:6c267eecb235 | 231 | |
orain3 | 5:efffadf6d0e0 | 232 | // pc.printf("CR\r\n"); |
orain3 | 4:cb6587253326 | 233 | |
orain3 | 4:cb6587253326 | 234 | if( ('C' == buf485[0]) ) { |
orain3 | 4:cb6587253326 | 235 | if (kansyutu) data[0] = 1; |
orain3 | 4:cb6587253326 | 236 | else data[0] = 0; |
orain3 | 3:b082ed02d08c | 237 | |
orain3 | 4:cb6587253326 | 238 | // sokutei on/off |
orain3 | 5:efffadf6d0e0 | 239 | if( buf485[2] & 0x05 ) { |
orain3 | 4:cb6587253326 | 240 | sokutei = 1; |
orain3 | 4:cb6587253326 | 241 | data[0] = data[0] | 64 | 128; |
orain3 | 4:cb6587253326 | 242 | } else { |
orain3 | 4:cb6587253326 | 243 | sokutei = 0; |
orain3 | 4:cb6587253326 | 244 | } |
orain3 | 5:efffadf6d0e0 | 245 | if( buf485[2] & 0x0a ) { |
orain3 | 4:cb6587253326 | 246 | wait(0.1); |
orain3 | 5:efffadf6d0e0 | 247 | modem.printf("?00,WIPE,1,\r"); |
orain3 | 4:cb6587253326 | 248 | } else { |
orain3 | 4:cb6587253326 | 249 | // answer |
orain3 | 4:cb6587253326 | 250 | sprintf(sendbuf,"=%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x\r\n", |
orain3 | 4:cb6587253326 | 251 | data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7],data[8],data[9], |
orain3 | 4:cb6587253326 | 252 | data[10],data[11],data[12],data[13],data[14],data[15],data[16],data[17],data[18],data[19], |
orain3 | 4:cb6587253326 | 253 | data[20],data[21],data[22],data[23],data[24],data[25],data[26],data[27],data[28],data[29], |
orain3 | 4:cb6587253326 | 254 | data[30],data[31],data[32],data[33],data[34],data[35],data[36],data[37],data[38],data[39] |
orain3 | 4:cb6587253326 | 255 | ); |
orain3 | 4:cb6587253326 | 256 | //modem.printf("=%c%c,PVAL,%01.04f,%01.04f,%01.04f,%01.04f,%01.04f,%01d\r", 0x30 | idbuf[0],0x30 | idbuf[1],temp,ad1,ad2,ad3,ad4,kan); |
orain3 | 4:cb6587253326 | 257 | |
orain3 | 4:cb6587253326 | 258 | wait(0.1); |
orain3 | 4:cb6587253326 | 259 | modem.printf("%s",sendbuf); |
orain3 | 4:cb6587253326 | 260 | pc.printf("%s",sendbuf); |
orain3 | 4:cb6587253326 | 261 | } |
orain3 | 3:b082ed02d08c | 262 | } |
orain3 | 4:cb6587253326 | 263 | RxPtr = 0; |
orain3 | 4:cb6587253326 | 264 | RdPtr = 0; |
orain3 | 4:cb6587253326 | 265 | RxBuff[0] = '\0'; |
orain3 | 4:cb6587253326 | 266 | buf485[0] = '\0'; // clear |
orain3 | 4:cb6587253326 | 267 | cnt485 = 0; |
orain3 | 3:b082ed02d08c | 268 | } |
orain3 | 3:b082ed02d08c | 269 | } |
orain3 | 3:b082ed02d08c | 270 | return(0); |
orain3 | 3:b082ed02d08c | 271 | } |
orain3 | 3:b082ed02d08c | 272 | |
orain3 | 3:b082ed02d08c | 273 |