极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10966|回复: 5

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

[复制链接]
发表于 2015-1-15 00:23:14 | 显示全部楼层 |阅读模式
本帖最后由 ken0137 于 2015-1-16 09:06 编辑

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

我自己写了一段
[mw_shl_code=c,true]#include <SoftwareSerial.h>
SoftwareSerial DLSerial(10, 4); // 电流表数据通讯TTL RX, TX
byte shuchu[6]={170,85,02,254,01,00};
//char shuchu[6]={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[0],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="";
}[/mw_shl_code]
发送是AA 55 02 FE 01 00 ,接收应该是AA 55 04 F6 DE 01 01 D9
但是返回不对,显示为
comdata[0]=FFFFFFAA
comdata[1]=55
comdata[2]=FFFFFF82
comdata[3]=FFFFFFFB
comdata[4]=FFFFFFD8
comdata[5]=FFFFFF81
comdata[6]=FFFFFFC0
comdata[7]=FFFFFFFD
如果接收这里使用Serial.println(comdata);

则返回的是乱码,例如

Goodnight moon!
誙傱&#65533;佊
Goodnight moon!
?鲮&#65533;


回复

使用道具 举报

发表于 2015-1-15 08:50:36 | 显示全部楼层

  1. void loop()
  2. {
  3.   while(Serial.available()>0){
  4.     Serial.readBytes(serialin,8);
  5.     delay(100);
  6.     for(a=0;a<7;a++)
  7.     {
  8.       Serial.write(serialin[a]);
  9.     }
  10.     delay(100);
  11.     Serial.print(serialin[3]);
  12.   }
  13.   c = serialin[3];
  14.   switch (c){
  15.   case 81:
  16.     c = '0';
  17.     digitalWrite(led1, HIGH);
  18.     delay(100);
  19.     digitalWrite(led1, LOW);
  20.     delay(100);
  21.     Serial.println("Hi");
  22.     break;
  23.   case 82:
  24. c = '0';
  25. digitalWrite(led3, HIGH);
  26. delay(100);
  27. digitalWrite(led3, LOW);
  28. delay(100);
  29. break;
  30.   case 83:
  31.     c = '0';
  32.     digitalWrite(led3, HIGH);
  33.     delay(100);
  34.     digitalWrite(led3, LOW)
  35.     delay(100)
  36.     break;
  37.   case 84:
  38.     c = '0';
  39.     digitalWrite(led4, HIGH);
  40.     delay(100);
  41.     digitalWrite(led4, LOW);
  42.     delay(100);
  43.     break;
  44.   }
  45. }
复制代码


你看看能不能帮到你
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-15 09:52:25 | 显示全部楼层
xia0chun 发表于 2015-1-15 08:50
void loop()
{
  while(Serial.available()>0){

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

使用道具 举报

发表于 2015-1-15 10:01:19 | 显示全部楼层
ken0137 发表于 2015-1-15 09:52
这回答和问题有关联么?
软串口,起码也得
#include

Sorry 没看清楚
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-16 09:02:38 | 显示全部楼层
自己顶起~~~~
回复 支持 反对

使用道具 举报

发表于 2015-2-5 22:29:44 | 显示全部楼层
软串口是需要 listen()的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-18 00:39 , Processed in 0.035751 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表