suoma 发表于 2016-8-22 15:51:46

关于SD数据存储再求助,数据只能收到低位

接上一篇帖子http://www.geek-workshop.com/thread-27377-1-1.html
收到的数据如下,

可以看到数据几乎收了一半,正常数据是AA 01 01 0D 2D 00 00 03 FB 00 41 14 81 81 B2 2F B5 55 83 ,其中AA、55分别是起始位、停止位,中间部分数据位41、14收到的正确,但有些数据前不知道为什么加上FFFFFF,如下
FFFFFF81
FFFFFF81
FFFFFFB2
不是很理解,还有开始几位只收到每个字节的低位,如下,
1
D
2D
0
0
3
是不是串口把每个字节高位0给过滤掉了,我的程序没有过滤啊

程序还是之前的程序,大家指点一下,File myFile;
char inByte;         // incoming serial byte

void setup()
{
    Serial.begin(1200,SERIAL_8E2);
while (!Serial) {
    ;
}
pinMode(10, OUTPUT);

if (!SD.begin(4)) {
      return;
}
}

void loop()
{
   myFile = SD.open("test01.txt", FILE_WRITE);
   if (myFile)
   {
   
   if (Serial.available() > 0)
   {
       inByte = Serial.read();
       Serial.println(inByte,HEX);
       myFile.println(inByte,HEX);
      }
   
   delay(500) ;   
}
}

suoma 发表于 2016-8-22 18:44:53

程序中加了字符数组,结果收到的数据加转换的结果如下,一串比一串少一字节,会的朋友指点一下AA 01 01 0D 2D 14 82 81 B2 2F B5 55 7F
AA 01 01 0D 2D 82 81 B2 2F B5 55 7F
AA 01 01 0D 2D 81 B2 2F B5 55 80
AA 01 01 0D 2D B2 2F B5 55 7F
AA 01 01 0D 2D 2F B5 55 7F
AA 01 01 0D 2D B5 55 7F
AA 01 01 0D 2D 55 7F
AA 01 01 0D 2D 7F
AA 01 01 0D 2D 附程序char inByte="";      
void setup()
{
    Serial.begin(1200,SERIAL_8E1);
while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
}
pinMode(10, OUTPUT);
   
if (!SD.begin(4)) {
    //Serial.println("initialization failed!");
    return;
}
}

void loop()
{
if (Serial.available() > 0) {
    Serial.readBytes(inByte,20);
   myFile = SD.open("test04.txt", FILE_WRITE);
   if (myFile)

    {
   Serial.print(inByte);
   myFile.print(inByte);
   myFile.close();
      
       }
   delay(100) ;   
}
}

275891381 发表于 2016-8-23 08:18:01

本帖最后由 275891381 于 2016-8-23 13:24 编辑

suoma 发表于 2016-8-22 18:44 static/image/common/back.gif
程序中加了字符数组,结果收到的数据加转换的结果如下,一串比一串少一字节,会的朋友指点一下附程序

      if (mySerial.available()){
          Serial.println(Serial.readStringUntil('自己定义的结束码 或者\n'));
      }
用这句试试,还有你的波特率太低,速度太慢

suoma 发表于 2016-8-23 11:26:56

275891381 发表于 2016-8-23 08:18 static/image/common/back.gif
if (mySerial.available()){
          Serial.println(mySerial.readStringUntil('自己定义的结束 ...

我的工装要求就是1200波特率,还有一个600波特率的工装,现在不明白为什么把每个字节高位0给省略了

suoma 发表于 2016-8-23 11:28:45

275891381 发表于 2016-8-23 08:18 static/image/common/back.gif
if (mySerial.available()){
          Serial.println(mySerial.readStringUntil('自己定义的结束 ...

波特率低的话,按理说抗干扰越强,数据丢失和波特率低没有关系吧

275891381 发表于 2016-8-23 13:26:12

suoma 发表于 2016-8-23 11:26 static/image/common/back.gif
我的工装要求就是1200波特率,还有一个600波特率的工装,现在不明白为什么把每个字节高位0给省略了

要是高位丢零,你可以看看是不是发送方,发零有问题

suoma 发表于 2016-8-23 13:26:24

收到的数据没有了开始遇到的FFFFFF,比起之前好多了,但是一些数据还是只收到低位,没有收到高位0,不知道什么原因

275891381 发表于 2016-8-23 13:26:35

suoma 发表于 2016-8-23 11:26 static/image/common/back.gif
我的工装要求就是1200波特率,还有一个600波特率的工装,现在不明白为什么把每个字节高位0给省略了

要是高位丢零,你可以看看是不是发送方,发零有问题

suoma 发表于 2016-8-23 13:29:59

275891381 发表于 2016-8-23 13:26 static/image/common/back.gif
要是高位丢零,你可以看看是不是发送方,发零有问题

但是我单独通过串口软件接收的数据都正常,用上SD模块后,收到的数据有些就没高位0,同时从串口观察,也是这样。开始数据长度符合要求,19位。后面数据长度不对了,出现了漏码问题,不明白原因
页: [1]
查看完整版本: 关于SD数据存储再求助,数据只能收到低位