Python readline()

2024-06-08 19:06:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把一些参数从arduino发送到raspberry pi。我必须每0.5秒把这三个参数同时发送给树莓派。在

Arduino代码:

    #include "DHT.h"
    #define echo 7
    #define triger 8
    #define photoresistorPin A0
    int lux; //Variable for photoresistor reading
    DHT dht;


    void setup() {
      Serial.begin(9600);
      dht.setup(2);
      pinMode(7,INPUT);
      pinMode(8,OUTPUT);

    }

    void loop() {
      lux = analogRead(photoresistorPin);
      float temperature = dht.getTemperature();
      long duration, distance;
      digitalWrite(triger, LOW);
      delayMicroseconds(2);
      digitalWrite(triger, HIGH);
      delayMicroseconds(10);
      digitalWrite(triger, LOW);
      duration = pulseIn(echo, HIGH);
      distance = (duration / 2) / 29.1;
      Serial.println(temperature);
      Serial.println(distance);
      Serial.println(lux);
      delay(500);

    }

我收到了python代码:

^{pr2}$

结果是:

^{3}$

问题是:

如何把它们分别读入变量中? 示例:我想从串行读取这三个参数,并将它们分别放入某个变量中,例如,对于arduino的温度,变量temp=24,在0.5秒25之后,然后是24,25,23,25。。平均他们。24+25+24+25+23+25/6并打印结果。 所以距离和勒克斯也是一样的。在


Tags: 代码echo参数serialarduinodistancedurationprintln
2条回答

你能一次读三行吗?在

vars = []

def read_float(ser):
    return float(ser.readline().decode("utf-8"))

while True:
   vars.append([ read_float(ser), read_float(ser), read_float(ser) ])

关于“每5分钟”,请查看sleep函数,可能还有{}

为什么不这样?在

import serial
from collections import defaultdict
ser= serial.Serial('/dev/ttyUSB0',9600)
var = ['temp', 'distance', 'lux']
val_dict = defaultdict(list)

while True:
   line = ser.readline()
   val = zip(var,line.decode("utf-8")))
   for k, v in val:
       val_dict[k].append(float(v))


defaultdict(list, {'distance': [112.0], 'lux': [524.0], 'temp': [24.0]})

相关问题 更多 >