send RS485 for testing Delta Sevro

Dependencies:   mbed

Fork of RS4851121R by albatross

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