Я занимаюсь последовательной связью между Python и Arduino. Это часть моего кода.
while True:
data = arduino.readline()
str = data[:-2].decode()
print(str) # to check the str
if str: # if str gets 1 from arduino
some logics here..............
но проблема в том, что когда код Python выполняется, в то время как предложение Arduino все еще отправляет данные в Python. Я думаю, что если он продолжит посылать его на python, я не думаю, что этот код работает хорошо. Итак, вопрос в том, как прекратить отправку данных при запуске предложения. Заранее спасибо.
Все коды здесь, прямо здесь!
код питона
import serial
import time
import MySQLdb
from datetime import datetime
import cv2
import boto3
now = datetime.today().strftime("%Y-%m-%d-%H-%M-%S")
station="hansung-"
type=".jpg"
filename=station+now+type
st=filename.split('-')[0]
ye=filename.split('-')[1]
mo=filename.split('-')[2]
da=filename.split('-')[3]
#the picture is just uploaded in to s3 bucket
port ="COM15" #I am testing this on my windows laptop
brate = 9600
arduino =serial.Serial(port, baudrate = brate, timeout=None)
while True:
#keep receive data from arduino
data= arduino.readline()
# delete \n\r from arduino
str = data[:-2].decode()
# if person exists str = 1 or str = 0
print(str)
if str:
#if picture is taken
cap = cv2.VideoCapture(0)
ret, frame = cap.read()
cv2.imwrite(filename, frame)
cap.release()
print('picture is taken')
#upload in to s3
s3 = boto3.resource('s3')
bucketname = 'dongyeon2'
bucket = s3.Bucket(bucketname)
bucket.upload_file(filename, filename, ExtraArgs={'ACL': 'public- read'})
bucketurl = "https://s3-ap-northeast-1.amazonaws.com/dongyeon2/" + filename
db = MySQLdb.connect(host='localhost', user='root',passwd='', db='pythonprogramming')
cur = db.cursor()
#insert into sql
sql = "insert into image(station,year,month,day,img_url) values(%s,%s,%s,%s,%s)"
cur.execute(sql, (st, ye, mo, da, bucketurl))
db.commit()
db.close()
else:
print("no body")
Это код Arduino
int IR_sensor = A0;
int value;
void setup()
{
Serial.begin(9600);
pinMode(IR_sensor, INPUT);
}
void loop() {
long IR_value = analogRead(IR_sensor);
long IR_range = gp2y0a21yk(IR_value);
if(IR_range < 50)
{
value=1;
Serial.println(value);
}
else {
value=0;
Serial.println(value);
}
delay(1000);
}
long gp2y0a21yk(long IR_value)
{
if (IR_value < 10)
{
IR_value = 10;
}
return ((67870.0 / (IR_value-3.0)) - 40.0)/10;
}
То, что я пытаюсь сделать, - это когда человек пропускает некоторую точку, а затем str изменяется на 1, а затем делает снимок человека, а затем загружает его на s3 и также сохраняет его в sql. Если нет человека, просто распечатайте тело. Но сейчас я сталкиваюсь с проблемой, что это не работает, что я надеюсь. это только показывает
0
нет тела
0
нет тела
Так что я думаю, что это произошло, потому что Arduino продолжает посылать данные в python, а python считывает значение str и переходит к предложению while до того, как это сделал предыдущий. Спасибо, сэр