update from matsu

Dependencies:   libTCS34725

Files at this revision

API Documentation at this revision

Comitter:
shinyamatsuyama
Date:
Sat Mar 16 15:42:24 2019 +0000
Parent:
5:01ad87ee4f28
Commit message:
091_sendfix; 11_udpread

Changed in this revision

MF_FJK_UDPManager/UDPManager.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/MF_FJK_UDPManager/UDPManager.h	Sat Mar 16 07:30:44 2019 +0000
+++ b/MF_FJK_UDPManager/UDPManager.h	Sat Mar 16 15:42:24 2019 +0000
@@ -10,6 +10,9 @@
     MESSAGE_C,
     MESSAGE_D,
     MESSAGE_E,
+    MESSAGE_F,
+    MESSAGE_G,
+    MESSAGE_H,
     MESSAGE_NONE = -1
 };
 
@@ -208,6 +211,9 @@
             msgID = MESSAGE_D;
         } else if (strcmp(tmp, "05") == 0) {
             msgID = MESSAGE_E;
+        } else if (strcmp(tmp, "08") == 0) {
+            msgID = MESSAGE_H;
+            return true;
         } else {
             msgID = MESSAGE_NONE;
             return false;
@@ -239,6 +245,9 @@
             case MESSAGE_E:
                 // TBD
                 break;
+            case MESSAGE_H:
+                //  no param
+                break;
         }
         
         tmp = strtok(NULL, ",");
--- a/main.cpp	Sat Mar 16 07:30:44 2019 +0000
+++ b/main.cpp	Sat Mar 16 15:42:24 2019 +0000
@@ -92,8 +92,8 @@
     serial.baud(9600);
     serial.printf("=== Wakeup ===\n");
     
-    tick.attach(&onInterrupt, CHECK_INTERVAL);
-    btn.fall(&onBtnON);
+    //tick.attach(&onInterrupt, CHECK_INTERVAL);
+    //btn.fall(&onBtnON);
     
     colorSensor.init(TCS34725_INTEGRATIONTIME_101MS, TCS34725_GAIN_1X);
 
@@ -104,7 +104,16 @@
     printf("IP is %s\n", udp.getIPAdr());
 
     while (true) {
-        osSignalWait(0x01, osWaitForever);
+        //osSignalWait(0x01, osWaitForever);
+        MessageID msgID;
+        int timestamp;
+        ColorID colorID;
+        CourseID courseID;
+        bool isOK = udp.receive(msgID, timestamp, colorID, courseID);
+        if (!isOK) continue;
+        printf("receive:%d, %d, %d\n", msgID);
+        
+        if (msgID != MESSAGE_H) continue;
         
         //  センサーの反応がなくてもとにかく送り出すように変更
         // if (input && !isBtnON) continue;
@@ -119,7 +128,7 @@
         ColorUtil::HSV hsv = ColorUtil::RGBtoHSV(rgb);
         ColorUtil::BALL_COLOR col = ColorUtil::detectBallColor(hsv);
 
-        ColorID colorID = COLOR_NONE;        
+        colorID = COLOR_NONE;        
         switch (col) {
             case ColorUtil::BALL_RED:
                 colorID = COLOR_RED;
@@ -173,6 +182,10 @@
 };
 INT_STATE intState = INT_NONE;
 
+Timer myTimer[3];
+
+bool sensorFlag[3];
+
 void onSensorON()
 {
     if (intState != INT_NONE) return;
@@ -182,28 +195,18 @@
     led1 = true;
 }
 
+void intSensor(int idx);   
+
 void onSensor1ON() {
-    if (intState != INT_NONE) return;
-    
-    printf("sensor1");
-    intState = INT_SENSOR_1;
-    led1 = true;
+    intSensor(INT_SENSOR_1);
 }
 
 void onSensor2ON() {
-    if (intState != INT_NONE) return;
-    
-    printf("sensor2");
-    intState = INT_SENSOR_2;
-    led1 = true;    
+    intSensor(INT_SENSOR_2);
 }
 
 void onSensor3ON() {
-    if (intState != INT_NONE) return;
-    
-    printf("sensor3");
-    intState = INT_SENSOR_3;
-    led1 = true;    
+    intSensor(INT_SENSOR_3);
 }
 
 ColorID nowColor[] = {
@@ -227,10 +230,9 @@
     lightTimer.attach(&lightTimerDone, LIGHT_TIME_WHILE_ON);
 }
 
-
-void sendMessageD() {
+void sendMessageD(int state) {
     ColorID colorID = COLOR_NONE;
-    switch (intState) {
+    switch (state) {
         case INT_NONE:  // Error
             return;
             
@@ -241,7 +243,7 @@
             break;
             
         default:
-            sensorIndex = intState;
+            sensorIndex = state;
             colorID = nowColor[sensorIndex];
             // nowColor[sensorIndex] = COLOR_NONE; // keep color for dummy!
     }
@@ -272,9 +274,27 @@
     }
 }
 
+void intSensor(int idx) { 
+    if(idx<INT_SENSOR_1 || idx>INT_SENSOR_3)
+        return;
+         
+    int dtime = myTimer[idx].read_ms();
+    if(dtime > 500) {
+        printf("sensor%d", idx+1);
+        //intState = INT_SENSOR_1;
+        //led1 = true;
+        sensorFlag[idx] = true;
+        myTimer[idx].reset();
+    } 
+}
 
 int main()
 {
+    for(int i=0;i<3;i++) {
+        myTimer[i].start();
+        sensorFlag[i] = false;
+    }
+    
     serial.baud(9600);
     serial.printf("=== Wakeup (D)===\n");
     
@@ -293,12 +313,17 @@
 
     while (true) {
         if (intState != INT_NONE) {
-            sendMessageD();
+            sendMessageD(intState);
             wait_ms(500);
             intState = INT_NONE;
             led1 = false;
         }
-        
+        for(int i=0;i<3;i++) {
+            if(sensorFlag[i]) {
+                sensorFlag[i] = false;
+                sendMessageD(INT_SENSOR_1+i);
+            }
+        }
         MessageID msgID;
         int timestamp;
         ColorID colorID;