【问题标题】:Python and Arduino Serial CommunicationPython 和 Arduino 串行通信
【发布时间】:2013-08-10 17:19:22
【问题描述】:

我正在使用 Python 3.2 尝试通过串行端口与 Arduino 通信。从文档中,我了解到 Arduino Serial.Read() 读取单个字节。但是,当我尝试实现这一点时, Serial.Read() 会读取我发送的所有数字。这是我的 Python 和 Arduino 的代码

例如,我有一个值 412 发送给 Arduino。

Python:

xCoordint = 412
xCoordConverted = "%03d" % (xCoordint)
xCoord = [int(i) for i in str(xCoordConverted)]
xSingleDigit0 = chr(int(xCoord[0] + 48))
xSingleDigit1 = chr(int(xCoord[1] + 48))
xSingleDigit2 = chr(int(xCoord[2] + 48))
ser.write (bytes(xSingleDigit0, 'UTF-8'))
ser.write (bytes(xSingleDigit1, 'UTF-8'))
ser.write (bytes(xSingleDigit2, 'UTF-8'))

阿杜诺:

char joinCharX[3] ;
int n_avail = Serial.available();
  if(n_avail>0){ 
    for (int i=0;i<3; i++){
      joinCharX[i] = Serial.read();
    }
int xCoords = atoi(joinCharX);
Serial.print(joinCharX[0]);

返回时的 joinCharX[0] 是 412 而不是 4。我想知道为什么会这样,如何让它一次读取 1 个单独的字节?

【问题讨论】:

    标签: python serial-port arduino pyserial


    【解决方案1】:

    试试:

    char joinCharX[3] ;
    int n_avail = Serial.available();
      if(n_avail>0){ 
        for (int i=0;i<3; i++){
          joinCharX[i] = Serial.read(1);  # Note the parameter
        }
    int xCoords = atoi(joinCharX);
    Serial.print(joinCharX[0]);
    

    这应该使它一次读取一个字符。

    更正:

    您不能像上面那样限制无字符,但您的问题是您的打印语句将第一个字符作为字符串的开头:如果您只想查看需要使用的第一个字符:

    char forprint;
    :
    :
    forprint = joinCharX[0];
    Serial.print (forprint);
    

    【讨论】:

    • joinCharX[i] = Serial.read(1); --> 它说没有匹配的函数调用'HardwareSerial::read(int)
    • 第二部分的打印结果和我做的一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    相关资源
    最近更新 更多