WathchDog

Dependencies:   mbed WDT

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?

UserRevisionLine numberNew 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