Python和Arduino串行读取

时间:2020-05-20 12:45:20

标签: python arduino

我已经使用Arduino和电位计构建了如下所示的简单电路

Here

我已经编写了它的Arduino代码,如下所示:

void setup() {
  Serial.begin(9600);
  pinMode(A0,INPUT);
}

void loop() {
  Serial.println(analogRead(A0));
  delay(100);
}

我想要的是,仅当检测到面部时,我才想获得电位器的模拟值一次。我编写了如下所示的Python代码:

import cv2
import serial

arduino = serial.Serial('COM3', 9600, timeout=.1)
success = False

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# Read the input image
#img = cv2.imread('test.png')
cap = cv2.VideoCapture(0)

while cap.isOpened():
    _, img = cap.read()

    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.1, 4)

    if faces == ():
        success = False

    for (x, y , w ,h) in faces:
        cv2.rectangle(img, (x,y), (x+w, y+h), (0, 0, 255), 3)
        while (success == False):
            data = arduino.readline()
            if data:
                print(float(data.decode('utf-8')))
                success = True

    cv2.imshow('img', img)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()

在网络摄像头上检测到脸部时,程序将仅根据需要获取电位器的值1倍。如果我将电位器设置为1023,然后运行Python代码,它将输出1023;否则,将显示1023。但是问题是;当我不停止代码并从视图中拔出头并将电位器的值设置为500左右时,再次显示我的头后,它又显示1023。我的错在哪里?你能解决吗?

0 个答案:

没有答案
相关问题