Pysial不会从Arduino获得新价值
Pyserial not getting new value from Arduino
我正在尝试将数据从Arduino上的超声操纵杆流式传输到我的笔记本电脑。从Arduino获取新值时,我似乎有一个问题。当我启动Python脚本时,它会像我希望的那样开始打印数据。但是,当我更改传感器看到的距离时,这些数据不会改变,这几乎就像serial.readline()
卡在第一个值之一一样。我是这种串行通信的新手,因此非常感谢任何帮助!
代码在下面,为了理智,我确实检查了传感器是否正在使用Arduino IDE中的串行监视器。
import numpy
import serial
import time
import sys
import cv2
import pickle
#set up the camera stuff
cap = cv2.VideoCapture(0)
#container for images
images=[]
#container for distances
distances=[]
#first frame number
frame_num=1
#setup the serial connection and pause to establish it
ser = serial.Serial('/dev/cu.usbmodem1421', 9600,timeout=1)
time.sleep(5)
while True:
try:
#grab and image
ret,frame=cap.read()
#grab the distance
distance=ser.readline()
print(distance)
#process the image to a gray and 1241,376
#gray=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
#gray_resized=cv2.resize(gray,(1241,376))
#cv2.imshow("FRAME",gray_resized)
#print(distance)
#images.append([frame_num,gray_resized])
#distances.append([frame_num,distance])
#ser.flush()
except KeyboardInterrupt:
#pickle.dump( images, open( "save.p", "wb" ) )
#pickle.dump( distances, open( "save.p", "wb" ) )
sys.exit()
arduino代码:
// defines pins numbers
const int trigPin = 7;
const int echoPin = 8;
// defines variables
long duration;
int distance;
void setup() {
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
Serial.begin(9600); // Starts the serial communication
delayMicroseconds(50);
}
void loop() {
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance in CM
distance= duration*0.034/2;
String distance_out=String(distance);
// Prints the distance on the Serial Monitor in CM
Serial.println(distance);
Serial.flush();
//Serial.print("Distance: ");
//Serial.println(distance);
}
实际上,python的serial.readline()
一直在阻塞直到获得EOL,因此,如果您没有锁定问题,则意味着Arduino在缓冲区中更快地编写了您的Python脚本。P>
您应该在阅读后冲洗缓冲区,以确保(接近)使用serial.flushInput()
或serial.reset_input_buffer()
的实时阅读,具体取决于您的版本
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 使用新行和不使用新行读取文件
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 遇到新行时,有没有办法停止istream_iterator
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- 分配新的零大小数组可以具有有效价值吗?
- Arduino 控制 ledstrip 与新像素卡住
- Arduino Eeprom获得损坏的价值
- Pysial不会从Arduino获得新价值
- 布局"新"是否取决于潜在的存储价值
- 新的Operator大幅增加了Arduino草图的大小-为什么
- 如何在C++宏中格式化"if"语句(以及如何使用Arduino的新EEPROM库get&put函数)
- 新设置开关案例arduino
- 让程序重新开始并获得新的价值
- 在C++宏"int val = rand()"中创造新价值
- 在新变量中存储类实例会导致奇怪的行为(Arduino Serial)
- 放置新的,按价值返还,并安全处置临时副本
- 新项目没有任何价值?