【发布时间】:2022-01-17 18:21:00
【问题描述】:
我写了这段代码用Python打印传感器值,但问题是soil_sensor打印了两次。
这是 Arduino 中的代码:
#include <DHT.h>
#include <DHT_U.h>
#define DHTPIN 8
#define DHTTYPE DHT11
int msensor = A0;
int msvalue = 0;
int min = 0;
int max = 1024;
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
pinMode(msensor, INPUT);
dht.begin();
}
void loop() {
msvalue = analogRead(msensor);
float percentage = (float)((msvalue - min) * 100) / (max - min);
percentage = map(msvalue, max, min, 0, 100);
Serial.print("r ");Serial.println(percentage);
int h = dht.readHumidity();
int t = dht.readTemperature();
Serial.print ("h ");
Serial.println (h);
Serial.print ("c ");
Serial.println (t);
delay(2000);
}
这是 Python 中的代码:
from time import sleep
import serial
arduinoP1 = serial.Serial(port="/dev/ttyUSB0", baudrate=9600)
def rtot():
arduino_data = arduinoP1.read(6)
str_rn = arduino_data.decode()
sleep(1)
return str_rn
for x in range(3):
i = rtot()
if "r" in i:
v1 = int(float(i[1:5].strip('\\r\\nr')))
print(v1, 'soil_sensor')
if "c" in i:
print(i[1:2], 'temperature_sensor')
if "h" in i:
v3 = int(i[2:4])
print(v3, 'Humidity_sensor')
如您所见,土壤传感器重复了两次: soil sensor is repeated twice
我希望数值以数字的形式正确显示
【问题讨论】:
-
您错误地假设整个发送的字符串只有 6 个字节长,并且只包含来自单个传感器的数据。并且尝试每 3 秒读取 3 个传感器,当它们每 2 秒发送一次时,也不会起作用。
-
你有什么解决办法吗?
-
您的输出与您的代码不匹配。我预计这里会出错。根据您的输出,您的 soil_sensor 值为 0。当您读取第二组 6 个字节时,您会读取类似
"\r\nh 60"的内容,因此您最终会得到int("h "),这将导致错误。请使用硬编码值和该代码的实际输出
标签: python c++ python-3.x arduino pyserial