send RS485 for testing Delta Sevro

Dependencies:   mbed

Fork of RS4851121R by albatross

Committer:
WeberYang
Date:
Tue Apr 17 06:15:36 2018 +0000
Branch:
RS485_DeltaSevro
Revision:
7:853fc58d8624
Parent:
6:ec210c04bec9
change to get 0x0066(encoder rev)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
YusukeWakuta 0:c963f91bdd23 1 //相互通信確認用
WeberYang 6:ec210c04bec9 2 //modify to ASCII
YusukeWakuta 0:c963f91bdd23 3 #include "mbed.h"
YusukeWakuta 0:c963f91bdd23 4 #define BUFFER 30
WeberYang 6:ec210c04bec9 5 #include <string>
WeberYang 6:ec210c04bec9 6 #include <cstdlib>
YusukeWakuta 0:c963f91bdd23 7
WeberYang 2:bbb217e1219e 8 Serial rs485(PA_9,PA_10);//,115200);//(p9,p10);
YusukeWakuta 0:c963f91bdd23 9 Serial pc(USBTX,USBRX);
WeberYang 2:bbb217e1219e 10 DigitalOut Receiver(D7);//(p5);
WeberYang 6:ec210c04bec9 11
WeberYang 6:ec210c04bec9 12 float cnv;
WeberYang 6:ec210c04bec9 13
WeberYang 3:48b96c8c25fa 14 unsigned int CRC_Verify(unsigned char *cBuffer, unsigned int iBufLen);
WeberYang 3:48b96c8c25fa 15 void setAddress(char MotorAddress,int16_t DataAddress,int16_t Data);
WeberYang 3:48b96c8c25fa 16
WeberYang 2:bbb217e1219e 17 #define LENG 31 //0x42 + 31 bytes equal to 32 bytes
WeberYang 7:853fc58d8624 18 #define APR 0x0066 //0066H means encoder abs rev
WeberYang 6:ec210c04bec9 19 unsigned char buffer[LENG];
WeberYang 2:bbb217e1219e 20 //attributes - program variables
WeberYang 2:bbb217e1219e 21 char stringOverSerialBuffer[41]; // buffer to store received string over pc
WeberYang 2:bbb217e1219e 22 int newCommandFlag = 0; // flag for ISR
WeberYang 6:ec210c04bec9 23 int len;
WeberYang 7:853fc58d8624 24 int a,b;
WeberYang 2:bbb217e1219e 25 char data[BUFFER];
WeberYang 6:ec210c04bec9 26 char num[16];
WeberYang 7:853fc58d8624 27 int dataH,datanum;
WeberYang 6:ec210c04bec9 28 char recChar=0;
WeberYang 6:ec210c04bec9 29 char recArr[20];
WeberYang 6:ec210c04bec9 30 int index=0;
WeberYang 2:bbb217e1219e 31 int idx;
WeberYang 6:ec210c04bec9 32 bool recFlag=false;
WeberYang 3:48b96c8c25fa 33 unsigned int CRC_Verify(unsigned char *cBuffer, unsigned int iBufLen)
WeberYang 3:48b96c8c25fa 34 {
WeberYang 3:48b96c8c25fa 35 unsigned int i, j;
WeberYang 3:48b96c8c25fa 36 //#define wPolynom 0xA001
WeberYang 3:48b96c8c25fa 37 unsigned int wCrc = 0xffff;
WeberYang 3:48b96c8c25fa 38 unsigned int wPolynom = 0xA001;
WeberYang 3:48b96c8c25fa 39 /*---------------------------------------------------------------------------------*/
WeberYang 3:48b96c8c25fa 40 for (i = 0; i < iBufLen; i++)
WeberYang 3:48b96c8c25fa 41 {
WeberYang 3:48b96c8c25fa 42 wCrc ^= cBuffer[i];
WeberYang 3:48b96c8c25fa 43 for (j = 0; j < 8; j++)
WeberYang 3:48b96c8c25fa 44 {
WeberYang 3:48b96c8c25fa 45 if (wCrc &0x0001)
WeberYang 3:48b96c8c25fa 46 {
WeberYang 3:48b96c8c25fa 47 wCrc = (wCrc >> 1) ^ wPolynom;
WeberYang 3:48b96c8c25fa 48 }
WeberYang 3:48b96c8c25fa 49 else
WeberYang 3:48b96c8c25fa 50 {
WeberYang 3:48b96c8c25fa 51 wCrc = wCrc >> 1;
WeberYang 3:48b96c8c25fa 52 }
WeberYang 3:48b96c8c25fa 53 }
WeberYang 3:48b96c8c25fa 54 }
WeberYang 3:48b96c8c25fa 55 return wCrc;
WeberYang 3:48b96c8c25fa 56 }
WeberYang 7:853fc58d8624 57 int str2int(const char* str, int star, int end)
WeberYang 7:853fc58d8624 58 {
WeberYang 7:853fc58d8624 59 int i;
WeberYang 7:853fc58d8624 60 int ret = 0;
WeberYang 7:853fc58d8624 61 for (i = star; i < end+1; i++)
WeberYang 7:853fc58d8624 62 {
WeberYang 7:853fc58d8624 63 ret = ret *10 + (str[i] - '0');
WeberYang 7:853fc58d8624 64 }
WeberYang 7:853fc58d8624 65 return ret;
WeberYang 7:853fc58d8624 66 }
WeberYang 6:ec210c04bec9 67 // functions
WeberYang 6:ec210c04bec9 68 void flushSerialBuffer() {
WeberYang 6:ec210c04bec9 69 while (rs485.readable()) {
WeberYang 6:ec210c04bec9 70 rs485.getc();
WeberYang 6:ec210c04bec9 71 }
WeberYang 6:ec210c04bec9 72 }
WeberYang 6:ec210c04bec9 73 void readData()
WeberYang 6:ec210c04bec9 74 {
WeberYang 7:853fc58d8624 75 while (rs485.readable())
WeberYang 7:853fc58d8624 76 {
WeberYang 7:853fc58d8624 77 recChar = rs485.getc();
WeberYang 7:853fc58d8624 78 recArr[index] = recChar;
WeberYang 7:853fc58d8624 79 index++;
WeberYang 7:853fc58d8624 80 if ((recChar == '\r') || (index>18))
WeberYang 7:853fc58d8624 81 {
WeberYang 7:853fc58d8624 82 datanum = str2int(recArr,1,2);
WeberYang 7:853fc58d8624 83 if (datanum == 1)
WeberYang 7:853fc58d8624 84 {
WeberYang 7:853fc58d8624 85 dataH = str2int(recArr,7,10);
WeberYang 7:853fc58d8624 86 pc.printf("M1 = %d\r\n",dataH);
WeberYang 7:853fc58d8624 87 }
WeberYang 7:853fc58d8624 88 else
WeberYang 7:853fc58d8624 89 {
WeberYang 7:853fc58d8624 90 pc.printf("M1 = no data\r\n");
WeberYang 7:853fc58d8624 91 }
WeberYang 7:853fc58d8624 92
WeberYang 7:853fc58d8624 93 if (datanum == 2)
WeberYang 7:853fc58d8624 94 {
WeberYang 7:853fc58d8624 95 dataH = str2int(recArr,7,10);
WeberYang 7:853fc58d8624 96 pc.printf("M2 = %d\r\n",dataH);
WeberYang 7:853fc58d8624 97 }
WeberYang 7:853fc58d8624 98 else
WeberYang 7:853fc58d8624 99 {
WeberYang 7:853fc58d8624 100 pc.printf("M2 = no data\r\n");
WeberYang 7:853fc58d8624 101 }
WeberYang 7:853fc58d8624 102
WeberYang 7:853fc58d8624 103 recArr[index] = 0;
WeberYang 7:853fc58d8624 104 index = 0;
WeberYang 7:853fc58d8624 105 //pc.printf("%s\r\n", recArr);
WeberYang 7:853fc58d8624 106
WeberYang 7:853fc58d8624 107 flushSerialBuffer();
WeberYang 7:853fc58d8624 108 recFlag = true;
WeberYang 7:853fc58d8624 109 }
WeberYang 6:ec210c04bec9 110 }
WeberYang 6:ec210c04bec9 111 }
YusukeWakuta 0:c963f91bdd23 112
WeberYang 6:ec210c04bec9 113
WeberYang 3:48b96c8c25fa 114 void setAddress(char MotorAddress,int16_t DataAddress,int16_t Data)
WeberYang 3:48b96c8c25fa 115 {
WeberYang 6:ec210c04bec9 116 unsigned char sendData[16];
WeberYang 3:48b96c8c25fa 117 //int DataAddress,Data;
WeberYang 3:48b96c8c25fa 118 char DataAddressH,DataAddressL;
WeberYang 6:ec210c04bec9 119
WeberYang 3:48b96c8c25fa 120 int i;
WeberYang 6:ec210c04bec9 121
WeberYang 6:ec210c04bec9 122 Receiver = 1;
WeberYang 6:ec210c04bec9 123 wait_ms(1);
WeberYang 3:48b96c8c25fa 124 DataAddressH = ((DataAddress>>8)&0xFF);
WeberYang 3:48b96c8c25fa 125 DataAddressL = ((DataAddress>>0)&0xFF);
WeberYang 6:ec210c04bec9 126
WeberYang 3:48b96c8c25fa 127
WeberYang 6:ec210c04bec9 128 //sendData[0] = Header;//MotorAddress;
WeberYang 6:ec210c04bec9 129 sendData[0] = MotorAddress;
WeberYang 6:ec210c04bec9 130 sendData[1] = 0x03;
WeberYang 6:ec210c04bec9 131 sendData[2] = DataAddressH;
WeberYang 6:ec210c04bec9 132 sendData[3] = DataAddressL;
WeberYang 6:ec210c04bec9 133 sendData[4] = Data>>8;
WeberYang 6:ec210c04bec9 134 sendData[5] = (Data&0xFF);
WeberYang 6:ec210c04bec9 135
WeberYang 6:ec210c04bec9 136 sendData[6] = sendData[0]+sendData[1]+sendData[2]+sendData[3]+sendData[4]+sendData[5];
WeberYang 6:ec210c04bec9 137 sendData[6] = (~sendData[6]+1);
WeberYang 6:ec210c04bec9 138 rs485.printf(":");
WeberYang 6:ec210c04bec9 139 for (i=0;i<7;i++)
WeberYang 3:48b96c8c25fa 140 {
WeberYang 6:ec210c04bec9 141 rs485.printf("%02X",sendData[i]);
WeberYang 3:48b96c8c25fa 142 }
WeberYang 3:48b96c8c25fa 143 wait_ms(1);
WeberYang 3:48b96c8c25fa 144 Receiver = 0;
WeberYang 7:853fc58d8624 145 wait_ms(10); //give 10ms let receive complete.
WeberYang 3:48b96c8c25fa 146 }
WeberYang 6:ec210c04bec9 147 int i;
WeberYang 7:853fc58d8624 148 bool timeout=false;
WeberYang 7:853fc58d8624 149 int WDindex = 0;
YusukeWakuta 0:c963f91bdd23 150 int main()
YusukeWakuta 0:c963f91bdd23 151 {
WeberYang 6:ec210c04bec9 152 rs485.baud(38400);
WeberYang 2:bbb217e1219e 153 pc.baud(115200);
WeberYang 3:48b96c8c25fa 154
taurin 1:41cb97261876 155 Receiver=0;
WeberYang 6:ec210c04bec9 156 rs485.attach(&readData);
WeberYang 2:bbb217e1219e 157 while(1)
WeberYang 2:bbb217e1219e 158 {
WeberYang 6:ec210c04bec9 159 recFlag = false;
WeberYang 7:853fc58d8624 160 // setAddress(1,0x0214,0x0001);
WeberYang 7:853fc58d8624 161 // setAddress(2,0x0214,0x0001);
WeberYang 7:853fc58d8624 162 setAddress(1,APR,0x0001);
WeberYang 7:853fc58d8624 163 setAddress(2,APR,0x0001);
WeberYang 7:853fc58d8624 164 // while (recFlag == false || timeout == false)
WeberYang 7:853fc58d8624 165 // {
WeberYang 7:853fc58d8624 166 // if(WDindex<100)
WeberYang 7:853fc58d8624 167 // {
WeberYang 7:853fc58d8624 168 // WDindex++;
WeberYang 7:853fc58d8624 169 // wait_ms(1);
WeberYang 7:853fc58d8624 170 // }
WeberYang 7:853fc58d8624 171 // else
WeberYang 7:853fc58d8624 172 // {
WeberYang 7:853fc58d8624 173 // WDindex = 0;
WeberYang 7:853fc58d8624 174 // timeout = true;
WeberYang 7:853fc58d8624 175 // }
WeberYang 7:853fc58d8624 176 // }
WeberYang 3:48b96c8c25fa 177 }
YusukeWakuta 0:c963f91bdd23 178 }