对于我的项目,我需要一个Raspberry Pi与几个外围组件进行通信,其中两个是Arduinos . 引起我问题的是Pro Mini 3.3 V ATmega328 . Arduino从两个传感器接收输入,并通过串行传输数据到Raspberry Pi . 在Raspberry上使用带有串行包的Python代码,它每50毫秒 Build 一个连接 .

打印Raspberry的输入时,前几行是正确的,但在大约两,三秒后,打印的行是随机字符 .

我的Python代码如下所示:

import serial
ser = serial.Serial('/dev/ttyS0', 115200, timeout=1)
if ser.isOpen():
    ser.close()

ser.open()

...

# loop
try:
        ser.write("1")            
        ser_line = ser.readline()
        print ser_line
...

Arduino代码:

#include <Wire.h>
#include "SparkFunHTU21D.h"
#include <FDC1004.h>

FDC1004 fdc(FDC1004_400HZ);
HTU21D myHumidity;

int capdac = 0;

void setup() {
    Wire.begin();
    Serial.begin(115200);
    myHumidity.begin();
}


void loop() {
    String dataString = "";

    dataString += String(myHumidity.readHumidity());
    dataString += "  ";
    dataString += String(myHumidity.readTemperature());
    dataString += "  ";

    for (uint8_t i = 0; i < 4; i++){        
        uint8_t measurement = 0;
        uint8_t channel = i;

        fdc.configureMeasurementSingle(measurement, channel, capdac);
        fdc.triggerSingleMeasurement(measurement, FDC1004_400HZ);
        //wait for completion
        delay(15);

        uint16_t value[2];
        if (! fdc.readMeasurement(measurement, value)) {
            int16_t msb = (int16_t) value[0];
            int32_t capacitance = ((int32_t) 457) * ((int32_t) msb); 

            capacitance /= 1000; //in femtofarads
            capacitance += ((int32_t) 3028) * ((int32_t) capdac);

            dataString += String(capacitance);
            dataString += "  ";

            int16_t upper_bound = 0x4000;
            int16_t lower_bound = -1 * upper_bound;

            if (msb > upper_bound) {
                if (capdac < FDC1004_CAPDAC_MAX) 
                    capdac++;

            } else if (msb < lower_bound && capdac > 0) {
                capdac--;            
            }
        }
    }

    Serial.println(dataString);    
    delay(20);        // delay in between reads for stability
}

此循环的输出如下所示:

print output

因此输出失去准确性并在大约六行之后成为随机字符,输出无法恢复 . 当我在Arduino的串行监视器中打印串行输出时,输出始终保持正确 . 经过几次测试后,我的想法就用完了 . 有没有人解决这个问题或经历过类似的行为?