
send RS485 for testing Delta Sevro
Fork of RS4851121R by
Diff: main.cpp
- Branch:
- RS485_DeltaSevro
- Revision:
- 6:ec210c04bec9
- Parent:
- 3:48b96c8c25fa
- Child:
- 7:853fc58d8624
--- a/main.cpp Fri Apr 13 06:55:06 2018 +0000 +++ b/main.cpp Tue Apr 17 03:35:44 2018 +0000 @@ -1,25 +1,35 @@ //相互通信確認用 +//modify to ASCII #include "mbed.h" #define BUFFER 30 +#include <string> +#include <cstdlib> Serial rs485(PA_9,PA_10);//,115200);//(p9,p10); Serial pc(USBTX,USBRX); DigitalOut Receiver(D7);//(p5); + +float cnv; + unsigned int CRC_Verify(unsigned char *cBuffer, unsigned int iBufLen); void setAddress(char MotorAddress,int16_t DataAddress,int16_t Data); #define LENG 31 //0x42 + 31 bytes equal to 32 bytes -unsigned char buf[LENG]; +unsigned char buffer[LENG]; //attributes - program variables char stringOverSerialBuffer[41]; // buffer to store received string over pc int newCommandFlag = 0; // flag for ISR +int len; char data[BUFFER]; -int num1,num2; +char num[16]; + +char recChar=0; +char recArr[20]; +int index=0; int idx; -bool flagrec = false; - +bool recFlag=false; unsigned int CRC_Verify(unsigned char *cBuffer, unsigned int iBufLen) { unsigned int i, j; @@ -44,87 +54,77 @@ } return wCrc; } -void pc_rx(){ - //pc.putc(rs485.getc()); - int index = 0; - - Receiver = 0; -// while(rs485.readable() || (rx != '\n')) { -// while(flagrec) { - num1 = rs485.readable(); - for(idx= 0; rs485.readable(); idx++) - { - data[idx]= rs485.getc(); - - } - - data[++idx]= '\0'; - for(idx= 0; data[idx] != '\0'; idx++) - pc.putc(data[idx]); - flagrec = true; -// } -// pc.printf("finish!"); +// functions +void flushSerialBuffer() { + while (rs485.readable()) { + rs485.getc(); + } +} +void readData() +{ + recChar = rs485.getc(); + recArr[index] = recChar; + index++; + if ((recChar == '\r') || (index>=19)) { + + recArr[index] = 0; + index = 0; + pc.printf("%s\r\n", recArr); + flushSerialBuffer(); + recFlag = true; + } +} -} + void setAddress(char MotorAddress,int16_t DataAddress,int16_t Data) { - unsigned char sendData[8]; - int16_t tmpCRC; - //char MotorAddress; - char Function; + unsigned char sendData[16]; //int DataAddress,Data; char DataAddressH,DataAddressL; - char dataH,dataL; + int i; - sendData[6] = 0xff; - sendData[7] = 0xff; - - //MotorAddress = address; - Function = 0x06; - //DataAddress = data; - //Data = 0x0001; + + Receiver = 1; + wait_ms(1); DataAddressH = ((DataAddress>>8)&0xFF); DataAddressL = ((DataAddress>>0)&0xFF); - dataH = ((Data>>8)&0xFF); - dataL = ((Data>>0)&0xFF); + - sendData[0] = 0x01;//MotorAddress; - sendData[1] = 0x03;//Function; - sendData[2] = 0x02;//DataAddressH; - sendData[3] = 0;//DataAddressL; - sendData[4] = 0;//dataH; - sendData[5] = 2;//dataL; - tmpCRC = CRC_Verify(sendData, 6); - sendData[6] = (tmpCRC & 0xFF); - sendData[7] = (tmpCRC>>8); - Receiver = 1; - wait_ms(1); - for (i=0;i<8;i++) + //sendData[0] = Header;//MotorAddress; + sendData[0] = MotorAddress; + sendData[1] = 0x03; + sendData[2] = DataAddressH; + sendData[3] = DataAddressL; + sendData[4] = Data>>8; + sendData[5] = (Data&0xFF); + + sendData[6] = sendData[0]+sendData[1]+sendData[2]+sendData[3]+sendData[4]+sendData[5]; + sendData[6] = (~sendData[6]+1); + rs485.printf(":"); + for (i=0;i<7;i++) { - rs485.printf("%c",sendData[i]); + rs485.printf("%02X",sendData[i]); } wait_ms(1); Receiver = 0; //RS485.attach(&onInterrupt,Serial::RxIrq); //=========================================== } +int i; int main() { - rs485.baud(115200); + rs485.baud(38400); pc.baud(115200); Receiver=0; - rs485.attach(pc_rx, Serial::RxIrq); + rs485.attach(&readData); while(1) { -// pc.printf("test"); - + recFlag = false; setAddress(1,0x0214,0x0001); - - - wait_ms(1); - - - + while (recFlag == false) + { + wait_ms(1); + } } } \ No newline at end of file