我有一个通过USB与Raspberry Pi连接的Arduino。 Python程序通过USB发送值,然后arduino接收它并打开LED。 Arduino正在将一个模拟值从A0发送到Raspberry上的Python程序。但Python有时会收到024
,24
或4
而不是1024
。我怎样才能解决这个问题?这是我的代码:
http://www.bitsharr.com/Hsoxw7nG
Arduino代码:
int led = 13;
char charIn;
int sensorPin = A0; // select the input pin for the potentiometer
int sensorValue = 0; // variable to store the value coming from the sensor
long previousMillis = 0;
long interval = 1000;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
Serial.begin(9600); //This initializes the USB as a serial port
}
void loop() {
if (Serial.available()) {
delay(5); // warten bis alle Daten da sind
while(Serial.available() > 0) {
charIn =(char) Serial.read();
if (charIn == '1') {
digitalWrite(led,HIGH);
delay(5000);
digitalWrite(led,LOW);
}
}
}
Python代码:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from serial import Serial
ser = Serial('/dev/ttyUSB0', 9600)
x=ser.readline()
ser.write('1')
print(x)
def cleanup( str ):
result = ""
for c in str:
if( (c >= "0") and (c <= "9") ):
result += c
return result
print( cleanup(x))
#ser.write("1")
sensorValue = analogRead(sensorPin); //Reads the voltage of the resistor.
Serial.println(sensorValue); //Writes the voltage on the Serial port.
}
答案 0 :(得分:1)
sensorValue = analogRead(sensorPin); //Reads the voltage of the resistor.
Serial.println(sensorValue); //Writes the voltage on the Serial port.
您的计算机如何知道Arduino上的值是什么?您需要将其移到Arduino代码中。我无法告诉你哪里:你从未用这段代码确切地指明了你想要完成的任务。
您的代码还有一些问题:
#ser.write("1")
应为ser.write("1")
这两行不是很糟糕,但由于你不使用它们,所以它们包含的编码习惯不好:
long previousMillis = 0;
long interval = 1000;
但是python有时会收到024,24或4而不是1024。
Arduino永远发送任何东西;没有serial.print();
或serial.println();
!我不知道你是如何接收数据的。如果您对上面的代码进行了编辑和/或指定完全您想要做什么(即向Arduino发送1,请打开LED,每隔5秒钟返回一次传感器数据,如果数据超过50%,关灯)仍然不知道该怎么做,请随时评论澄清。