WathchDog

Dependencies:   mbed WDT

Revision:
3:b082ed02d08c
Parent:
2:d69d10b670c5
Child:
4:cb6587253326
--- a/main.cpp	Sat Feb 23 09:11:23 2019 +0000
+++ b/main.cpp	Sun Feb 24 08:57:06 2019 +0000
@@ -1,5 +1,12 @@
 #include "mbed.h"
 
+const int _ID = 4;
+
+void irqrecv();
+int rs485_recv(float ph);
+char rsgetc();
+int rslen();
+
 Serial pc(SERIAL_TX,SERIAL_RX);
 Serial modem(D1,D0);
 AnalogIn adc_1(A0);
@@ -17,20 +24,61 @@
 DigitalIn jmp(D2,PullUp);
 
 
+#define bufsize 64
+char RxBuff[bufsize+1];
+int RxPtr;
+int RdPtr;
+
+char rsgetc() {
+//    pc.printf("%c",RxBuff[RdPtr]);
+
+    RdPtr++;
+    if(RdPtr >= bufsize-1) RdPtr = 0;
+    return(RxBuff[RdPtr]);
+}    
+
+int rslen() {
+//    if (RxPtr < RdPtr) {
+//        return(bufsize + RxPtr - RdPtr);
+//    } else {
+//        return(RxPtr - RdPtr);
+//    }
+    return(RxPtr - RdPtr);
+}
+    
+void irqrecv() {
+    if (modem.readable()) {
+        if (RxPtr <= bufsize - 1) {
+            RxBuff[++RxPtr] = modem.getc();
+        } else {
+            RxPtr = 0;
+            RxBuff[RxPtr] = modem.getc();
+        }
+    }
+}
+
+unsigned char buf485[32];
+int cnt485;
+
 int main()
 {
     float sum1,sum2,sum3,sum4;
     float ad1,ad2,ad3,ad4;
-    float temp,turb,s;
+    static float temp;//,turb,s;
     int i,cnt;
 
     modem.baud(38400);
     modem.format(8,Serial::None,1);    
+    RxPtr = 0;
+    RdPtr = 0;
+    modem.attach(irqrecv,RawSerial::RxIrq);
+    cnt485 = 0;
+    buf485[0] = '\0';
 
     pc.printf("\nSTM32 ADC internal channels reading example\r\n");
     temp = 0;
-    turb = 0;
-    s = 0;
+//    turb = 0;
+//    s = 0;
     
     sokutei = 1;
     
@@ -44,7 +92,9 @@
         sum3 = 0;
         sum4 = 0;
         cnt = 0;
-        for (i=0;i<10;i++) {
+        for (i=0;i<1000;i++) {
+            rs485_recv(temp);
+
             sum1 += adc_1.read();
             sum2 += adc_2.read();
             sum3 += adc_3.read();
@@ -70,10 +120,64 @@
             ad4 = adc_4.read();
         }
         
-        pc.printf("ADC = %f  %f  %f  %f \r\n", ad1,ad2,ad3,ad4);
-        temp = ad1*66-30+0.3;
-        turb = 2.1*((ad2-0.166)/0.6642*1000+25.5);
-        s = 0;
+        if (ad1 < 0.2435L) ad1 = 0.2435L;
+        if (ad1 > 0.8085L) ad1 = 0.8085L;
+        
+        temp = (double)(ad1 - 0.2435L) * 60.0L / (0.8085L - 0.2425L) - 10.0L;
+//        pc.printf("ADC = %f  %f  %f  %f %f \r\n", ad1,ad2,ad3,ad4,temp);
+//        s = 0;
         
     }
 }
+
+
+int rs485_recv(float ph) {
+    char chr;    
+    char idbuf[8];
+
+    if (rslen()) {
+//        pc.printf("%03d\r\n",rslen());
+//        wait(0.01);
+//        while(rslen()) rsgetc();
+        
+        chr = rsgetc();
+        buf485[cnt485++] = chr;
+        buf485[cnt485] = '\0';
+        if (chr == '?') cnt485 = 0;
+        
+//        if (chr == '?') pc.printf("?\r\n");
+//        if (chr == '0') pc.printf("0\r\n");
+
+
+
+        if (chr == 0x0d) {
+//           pc.printf("Recv CR:%s\r\n",buf485);
+            sprintf(idbuf,"%02d",_ID);
+//            idbuf[0] = '0';
+//            idbuf[1] = '4';
+//            idbuf[2] = '\0';
+//            if((idbuf[0] == buf485[1]) && (idbuf[1] == buf485[2])) {
+
+            if((idbuf[0] == buf485[0]) && (idbuf[1] == buf485[1]) && (',' == buf485[2]) && ('P' == buf485[3])) {
+                // answer
+// konnkaiha modemunanode huyou                wait(0.02);
+//                RE = 1;//0;
+//                DE = 1;
+//                pc.printf("Ans:=%c%c,PVAL,%01.04f,0\r\n", 0x30 | idbuf[0],0x30 | idbuf[1],ph);
+                modem.printf("=%c%c,PVAL,%01.04f,0\r", 0x30 | idbuf[0],0x30 | idbuf[1],ph);
+// konkaiha modemunanode huyou                wait(0.01);
+//                RE = 0;//1;
+//                DE = 0;
+//                while(rslen()) rsgetc();
+                RxPtr = 0;
+                RdPtr = 0;
+                RxBuff[0] = '\0';
+                buf485[0] = '\0'; // clear
+                cnt485 = 0;
+            }
+        }
+   }
+    return(0);
+}
+
+