mobile robot control with artificial hormones

Dependencies:   Communication_Robot RTC-DS1307 iSerial mbed

Fork of Andante_v00 by potiwat ngamkajornwiwat

Revision:
5:aae71a94cb41
Parent:
4:42dc950d54f4
Child:
8:af8fbf678f28
diff -r 42dc950d54f4 -r aae71a94cb41 main.cpp
--- a/main.cpp	Mon Mar 02 05:53:20 2015 +0000
+++ b/main.cpp	Wed Jul 15 08:34:08 2015 +0000
@@ -7,6 +7,8 @@
 #include "communication.h"
 #include "protocol.h"
 
+#include "Rtc_Ds1307.h"
+
 
 //control stearing
 PwmOut heading_front(PIN_FRONT_SERVO);
@@ -27,6 +29,9 @@
 COMMUNICATION pan_b(TX_PAN_B, RX_PAN_B,115200,1000,100); // tx, rx
 
 
+Rtc_Ds1307 rtc(RTC_SDA, RTC_SCL);
+Rtc_Ds1307::Time_rtc tm = {};
+
 void Init_servo()
 {
     heading_front.period_ms(20);
@@ -36,8 +41,9 @@
 
 void Init_foreground()
 {
+    //Update_command.attach(&getCommand,0.1);
     Update_command.attach(&getCommand,TIMER_UPDATE);
-    Samping.attach(&getSensor,TIMER_SAMPING);
+    //Samping.attach(&getSensor,TIMER_SAMPING);
 }
 
 
@@ -47,24 +53,26 @@
 
 
     Init_servo();
+    Init_foreground();
 
     ANDANTE_PROTOCOL_PACKET packet;
 
+    // test send datapacket
     packet.robotId = 0xBB;
-    packet.length = 8;
-    packet.instructionErrorId = 0x01;
-    packet.parameter[0] = 0x02;
-    packet.parameter[1] = 0x03;
-    packet.parameter[2] = 0x04;
-    packet.parameter[3] = 0x05;
-    packet.parameter[4] = 0x06;
-    packet.parameter[5] = 0x07;
+    packet.length = 5;
+    packet.instructionErrorId = 0x07;
+    packet.parameter[0] = 255;
+    packet.parameter[1] = 255;
+    packet.parameter[2] = 255;
+
 
     pan_a.sendCommunicatePacket(&packet);
-
+    while(1) {
 
+        //   uint8_t status = pan_a.receiveCommunicatePacket(&packet);
 
-
+        // pan_a.sendCommunicatePacket(&packet);
+    }
 }
 
 
@@ -75,23 +83,29 @@
     ANDANTE_PROTOCOL_PACKET packet;
 
     uint8_t status = pan_a.receiveCommunicatePacket(&packet);
+    myled=0;
+    
+
 
     if(status == ANDANTE_ERRBIT_NONE) {
-        if(count >1) {
+        if(count >2 && count <10) {
             count--;
         } else {
             count=0;
+            
         }
+        pan_a.sendCommunicatePacket(&packet);
         //update command
         setControl(&packet);
 
     } else if(status == ANDANTE_ERRBIT_READ_TIMEOUT) {
         count++;
-
     }
 
     if(count >= TIMEOUT_RESPONE_COMMAND) {
         //stop robot
+        count++;
+        myled=1;
         setSpeedControl(0.0);
     }
 }
@@ -103,6 +117,7 @@
 
 void setControl(ANDANTE_PROTOCOL_PACKET *packet)
 {
+
     if(packet->instructionErrorId && ANDANTE_SPEED_CONTROL == ANDANTE_SPEED_CONTROL) {
         setSpeedControl(((int16_t)packet->parameter[0]-127)/128.0);
     }
@@ -125,9 +140,9 @@
         return;
     }
 
-    if(precent <0) {
+    if(precent <0.0f) {
         us = (FRONT_CENTER-FRONT_MIN)*precent +FRONT_CENTER;
-    } else if(precent >0) {
+    } else if(precent >0.0f) {
         us = (FRONT_MAX-FRONT_CENTER)*precent +FRONT_CENTER;
     }
     heading_front.pulsewidth_us(us);
@@ -159,9 +174,9 @@
         return;
     }
 
-    if(precent <0) {
+    if(precent <0.0f) {
         us = (RC_SPEED_CENTER-RC_SPEED_MIN)*precent +RC_SPEED_CENTER;
-    } else if(precent >0) {
+    } else if(precent >0.0f) {
         us = (RC_SPEED_MAX-RC_SPEED_CENTER)*precent +RC_SPEED_CENTER;
     }
     drive_motor.pulsewidth_us(us);