ใช้สื่อสารกันระหว่าง Brain และ Motion

Dependencies:   Fork_Boss_Communication_Robot

Dependents:   Program_BEAR_Protocol SwitchMode MPU9250AHRS-PGear_Stabilizer SwitchMode ... more

Revision:
8:e1f43b1df0b5
Parent:
7:ce4234c56410
Child:
9:c22410169d9f
--- a/BEAR_Protocol.cpp	Thu Jan 21 16:03:47 2016 +0000
+++ b/BEAR_Protocol.cpp	Thu Jan 21 17:24:49 2016 +0000
@@ -29,6 +29,22 @@
 
 
 
+uint8_t Bear_Communicate::saveDataToEEPROM(uint8_t id,uint8_t save_data)
+{
+    ANDANTE_PROTOCOL_PACKET package;
+
+    package.robotId = id;
+    package.length = 4;
+    package.instructionErrorId = WRITE_DATA;
+    package.parameter[0]=SAVE_EEPROM_DATA;
+    package.parameter[1]=save_data;
+
+    rs485_dirc=1;
+    wait_us(RS485_DELAY);
+    return com->sendCommunicatePacket(&package);
+}
+
+
 uint8_t Bear_Communicate::setID(uint8_t id,uint8_t new_id)
 {
     ANDANTE_PROTOCOL_PACKET package;
@@ -374,7 +390,7 @@
 ///////////////////////////////////////////// Save Data to EEPROM \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 
 
-uint8_t Bear_Communicate::setMargin(uint8_t id,float margin)
+uint8_t Bear_Communicate::setUpMargin(uint8_t id,float margin)
 {
     uint8_t IntMargin[2],FloatMargin[2];
     FloatSep(margin,IntMargin,FloatMargin);
@@ -384,7 +400,29 @@
     package.robotId = id;
     package.length = 7;
     package.instructionErrorId = WRITE_DATA;
-    package.parameter[0]=MARGIN;
+    package.parameter[0]=UP_MARGIN;
+    package.parameter[1]=IntMargin[0];
+    package.parameter[2]=IntMargin[1];
+    package.parameter[3]=FloatMargin[0];
+    package.parameter[4]=FloatMargin[1];
+
+    rs485_dirc=1;
+    wait_us(RS485_DELAY);
+    return com->sendCommunicatePacket(&package);
+}
+
+
+uint8_t Bear_Communicate::setLowMargin(uint8_t id,float margin)
+{
+    uint8_t IntMargin[2],FloatMargin[2];
+    FloatSep(margin,IntMargin,FloatMargin);
+
+    ANDANTE_PROTOCOL_PACKET package;
+
+    package.robotId = id;
+    package.length = 7;
+    package.instructionErrorId = WRITE_DATA;
+    package.parameter[0]=LOW_MARGIN;
     package.parameter[1]=IntMargin[0];
     package.parameter[2]=IntMargin[1];
     package.parameter[3]=FloatMargin[0];
@@ -397,7 +435,7 @@
 
 
 
-uint8_t Bear_Communicate::getMargin(uint8_t id,float *margin)
+uint8_t Bear_Communicate::getUpMargin(uint8_t id,float *margin)
 {
     uint8_t IntMargin[2],FloatMargin[2];
     float int_buffer,float_buffer;
@@ -406,7 +444,40 @@
     package.robotId = id;
     package.length = 3;
     package.instructionErrorId = READ_DATA;
-    package.parameter[0]=MARGIN;
+    package.parameter[0]=UP_MARGIN;
+
+
+    rs485_dirc=1;
+    wait_us(RS485_DELAY);
+    com->sendCommunicatePacket(&package);
+
+    rs485_dirc=0;
+    wait_us(RS485_DELAY);
+    uint8_t status=com->receiveCommunicatePacket(&package);
+    if(status == ANDANTE_ERRBIT_NONE) {
+        IntMargin[0]=package.parameter[0];
+        IntMargin[1]=package.parameter[1];
+        FloatMargin[0]=package.parameter[2];
+        FloatMargin[1]=package.parameter[3];
+        int_buffer=(float)Utilities::ConvertUInt8ArrayToInt16(IntMargin);
+        float_buffer=(float)Utilities::ConvertUInt8ArrayToInt16(FloatMargin)/FLOAT_CONVERTER;
+        *margin=int_buffer+float_buffer;
+    }
+    return status;
+}
+
+
+
+uint8_t Bear_Communicate::getLowMargin(uint8_t id,float *margin)
+{
+    uint8_t IntMargin[2],FloatMargin[2];
+    float int_buffer,float_buffer;
+    ANDANTE_PROTOCOL_PACKET package;
+
+    package.robotId = id;
+    package.length = 3;
+    package.instructionErrorId = READ_DATA;
+    package.parameter[0]=LOW_MARGIN;
 
 
     rs485_dirc=1;
@@ -801,7 +872,8 @@
     return status;
 }
 
-uint8_t Bear_Communicate::setAngleRange(uint8_t id,float max_angle,float min_angle)
+
+uint8_t Bear_Communicate::setUpAngleRange(uint8_t id,float max_angle,float min_angle)
 {
     uint8_t IntMaxAngle[2],FloatMaxAngle[2];
     uint8_t IntMinAngle[2],FloatMinAngle[2];
@@ -813,7 +885,35 @@
     package.robotId = id;
     package.length = 11;
     package.instructionErrorId = WRITE_DATA;
-    package.parameter[0]=ANGLE_RANGE;
+    package.parameter[0]=ANGLE_RANGE_UP;
+    package.parameter[1]=IntMaxAngle[0];
+    package.parameter[2]=IntMaxAngle[1];
+    package.parameter[3]=FloatMaxAngle[0];
+    package.parameter[4]=FloatMaxAngle[1];
+    package.parameter[5]=IntMinAngle[0];
+    package.parameter[6]=IntMinAngle[1];
+    package.parameter[7]=FloatMinAngle[0];
+    package.parameter[8]=FloatMinAngle[1];
+
+    rs485_dirc=1;
+    wait_us(RS485_DELAY);
+    return com->sendCommunicatePacket(&package);
+}
+
+
+uint8_t Bear_Communicate::setLowAngleRange(uint8_t id,float max_angle,float min_angle)
+{
+    uint8_t IntMaxAngle[2],FloatMaxAngle[2];
+    uint8_t IntMinAngle[2],FloatMinAngle[2];
+    FloatSep(max_angle,IntMaxAngle,FloatMaxAngle);
+    FloatSep(min_angle,IntMinAngle,FloatMinAngle);
+
+    ANDANTE_PROTOCOL_PACKET package;
+
+    package.robotId = id;
+    package.length = 11;
+    package.instructionErrorId = WRITE_DATA;
+    package.parameter[0]=ANGLE_RANGE_LOW;
     package.parameter[1]=IntMaxAngle[0];
     package.parameter[2]=IntMaxAngle[1];
     package.parameter[3]=FloatMaxAngle[0];
@@ -831,7 +931,7 @@
 
 
 
-uint8_t Bear_Communicate::getAngleRange(uint8_t id,float *max_angle,float *min_angle)
+uint8_t Bear_Communicate::getUpAngleRange(uint8_t id,float *max_angle,float *min_angle)
 {
     uint8_t IntMaxAngle[2],FloatMaxAngle[2];
     uint8_t IntMinAngle[2],FloatMinAngle[2];
@@ -842,7 +942,7 @@
     package.robotId = id;
     package.length = 3;
     package.instructionErrorId = READ_DATA;
-    package.parameter[0] = ANGLE_RANGE;
+    package.parameter[0] = ANGLE_RANGE_UP;
 
     rs485_dirc=1;
     wait_us(RS485_DELAY);
@@ -871,4 +971,49 @@
 
     }
     return status;
-}
\ No newline at end of file
+}
+
+
+
+uint8_t Bear_Communicate::getLowAngleRange(uint8_t id,float *max_angle,float *min_angle)
+{
+    uint8_t IntMaxAngle[2],FloatMaxAngle[2];
+    uint8_t IntMinAngle[2],FloatMinAngle[2];
+    float int_buffer,float_buffer;
+
+    ANDANTE_PROTOCOL_PACKET package;
+
+    package.robotId = id;
+    package.length = 3;
+    package.instructionErrorId = READ_DATA;
+    package.parameter[0] = ANGLE_RANGE_LOW;
+
+    rs485_dirc=1;
+    wait_us(RS485_DELAY);
+    com->sendCommunicatePacket(&package);
+
+    rs485_dirc=0;
+    wait_us(RS485_DELAY);
+    uint8_t status = com->receiveCommunicatePacket(&package);
+
+    if(status == ANDANTE_ERRBIT_NONE) {
+        IntMaxAngle[0]=package.parameter[0];
+        IntMaxAngle[1]=package.parameter[1];
+        FloatMaxAngle[0]=package.parameter[2];
+        FloatMaxAngle[1]=package.parameter[3];
+        int_buffer=(float)Utilities::ConvertUInt8ArrayToInt16(IntMaxAngle);
+        float_buffer=(float)Utilities::ConvertUInt8ArrayToInt16(FloatMaxAngle)/FLOAT_CONVERTER;
+        *max_angle=int_buffer+float_buffer;
+
+        IntMinAngle[0]=package.parameter[4];
+        IntMinAngle[1]=package.parameter[5];
+        FloatMinAngle[0]=package.parameter[6];
+        FloatMinAngle[1]=package.parameter[7];
+        int_buffer=(float)Utilities::ConvertUInt8ArrayToInt16(IntMinAngle);
+        float_buffer=(float)Utilities::ConvertUInt8ArrayToInt16(FloatMinAngle)/FLOAT_CONVERTER;
+        *min_angle=int_buffer+float_buffer;;
+
+    }
+    return status;
+}
+