ken0137 发表于 2015-1-15 00:23:14

[求助]软串口以十六进制发送和接收命令

本帖最后由 ken0137 于 2015-1-16 09:06 编辑

现在使用软串口向电流表头以十六进制发送命令“AA 55 02 FE 01 00 ” ,并且需要能够得到十六进制的返回值并转发给PC端,这个十六进制的发送和接收应该如何写呢?求教大神

我自己写了一段
#include <SoftwareSerial.h>
SoftwareSerial DLSerial(10, 4); // 电流表数据通讯TTL RX, TX
byte shuchu={170,85,02,254,01,00};
//char shuchu={0xAA,0x55,0x02,0xFE,0x01,0x00};
String comdata = "";
void setup() {
Serial.begin(115200);
DLSerial.begin(115200);
}

void loop() {
delay(2000);
Serial.println("Goodnight moon!");
//DLSerial.println("AA 55 02 FE 01 00");
DLSerial.write(&shuchu,6);
delay(1000);
while(DLSerial.available() > 0){
    comdata+=char(DLSerial.read());
    delay(2);
}

if(comdata.length() > 0)             //如果comdata接收到卡号,则读出卡号
{
//    Serial.println(comdata);
for(int i=0;i<comdata.length();i++){
       Serial.print("comdata[");
       Serial.print(i,DEC);
       Serial.print("]=");
       Serial.println(comdata,HEX);
      }

   
}
comdata="";
}
发送是AA 55 02 FE 01 00 ,接收应该是AA 55 04 F6 DE 01 01 D9
但是返回不对,显示为
comdata=FFFFFFAA
comdata=55
comdata=FFFFFF82
comdata=FFFFFFFB
comdata=FFFFFFD8
comdata=FFFFFF81
comdata=FFFFFFC0
comdata=FFFFFFFD
如果接收这里使用Serial.println(comdata);

则返回的是乱码,例如

Goodnight moon!
誙傱�佊
Goodnight moon!
?鲮�


xia0chun 发表于 2015-1-15 08:50:36


void loop()
{
while(Serial.available()>0){
    Serial.readBytes(serialin,8);
    delay(100);
    for(a=0;a<7;a++)
    {
      Serial.write(serialin);
    }
    delay(100);
    Serial.print(serialin);
}
c = serialin;
switch (c){
case 81:
    c = '0';
    digitalWrite(led1, HIGH);
    delay(100);
    digitalWrite(led1, LOW);
    delay(100);
    Serial.println("Hi");
    break;
case 82:
c = '0';
digitalWrite(led3, HIGH);
delay(100);
digitalWrite(led3, LOW);
delay(100);
break;
case 83:
    c = '0';
    digitalWrite(led3, HIGH);
    delay(100);
    digitalWrite(led3, LOW)
    delay(100)
    break;
case 84:
    c = '0';
    digitalWrite(led4, HIGH);
    delay(100);
    digitalWrite(led4, LOW);
    delay(100);
    break;
}
}

你看看能不能帮到你

ken0137 发表于 2015-1-15 09:52:25

xia0chun 发表于 2015-1-15 08:50 static/image/common/back.gif
void loop()
{
while(Serial.available()>0){


这回答和问题有关联么?
软串口,起码也得
#include <SoftwareSerial.h>
SoftwareSerial DLSerial(10, 4); // 电流表数据通讯TTL RX, TX
开始的吧

xia0chun 发表于 2015-1-15 10:01:19

ken0137 发表于 2015-1-15 09:52 static/image/common/back.gif
这回答和问题有关联么?
软串口,起码也得
#include


Sorry 没看清楚

ken0137 发表于 2015-1-16 09:02:38

自己顶起~~~~

kenchen 发表于 2015-2-5 22:29:44

软串口是需要 listen()的
页: [1]
查看完整版本: [求助]软串口以十六进制发送和接收命令