Прекратите получать данные из Arduino, когда Python получит данные из него - PullRequest
0 голосов
/ 30 апреля 2018

Я занимаюсь последовательной связью между 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 до того, как это сделал предыдущий. Спасибо, сэр

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...