代码之家  ›  专栏  ›  技术社区  ›  Daniel

python和arduino之间的串行通信

  •  0
  • Daniel  · 技术社区  · 6 年前

    我将值arduino发送给python。这是我代码的一部分。

    #include <nRF24L01.h>
    #include <RF24.h>
    #include <RF24_config.h>
    #include <SPI.h>
    #include "Timer.h"
    
    
    
    int IR_sensor = A0;
    int value;
    
    void setup(void)
    {
      Serial.begin(9600);
      pinMode(IR_sensor, INPUT);
    }
    
    void loop() {
    
      long IR_value = analogRead(IR_sensor);
      long IR_range = gp2y0a21yk(IR_value);
    
      //Serial.println(IR_value);
      //Serial.print(IR_range);
      //Serial.println("cm");
      //Serial.println();
      if (IR_range < 50)
      {
        value = 1;
        Serial.println(value);
      }
    
      else {
        value = 0;
        Serial.println(value);
      }
      delay(1000);
    
          if (value == 1)
          {
            Serial.println("1234"); 
    
          }
    
        }
    
    long gp2y0a21yk(long IR_value)
    {
      if (IR_value < 10)
      {
        IR_value = 10;
      }
    
      return ((67870.0 / (IR_value - 3.0)) - 40.0) / 10;
    }
    

    因此,此代码有两个选项。第一个值=0或值=1,然后是1234

    这是我的python代码

    import serial
    import time
    import MySQLdb
    from datetime import datetime
    import cv2
    import boto3
    
    
    port ="COM15"
    brate = 9600
    arduino =serial.Serial(port, baudrate = brate, timeout=None)
    
    
    while True:
    
        data= arduino.readline()str = data[:-2].decode()
        print(str)
    
    
        if str=="0":
            print("nobody")
    

    我想知道的是这部分。数据=arduino。readline()此代码读取值0或1和1234。我要做的是将此值保存到data1和data2,并且我要使用此值!例如,如果python得到值=0,我想将此值保存到a so a=0,然后使用if子句;如果python得到值=1和1234,我想保存此a=1和b=1234,并将其用于if子句。你有什么想法吗?我真的很感激!

    1 回复  |  直到 6 年前
        1
  •  0
  •   Gene Byun    6 年前

    由于arduino只输出0或1和1234,只需添加 else 在您的 if 陈述

    a = int(str)
    if str=="0":
        print("nobody")
    else:
        b = int(arduino.readline()[:-2].decode())