Raspberry Pi Python Продолжить цикл функции перемещения, пока определенная команда не остановит его - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь создать скрипт на python для робота, который будет непрерывно перемещаться после получения данных на сервер.

В настоящее время я могу переместить его с помощью перенесенной функции и вызвать его на сервер в ответе JSON.

То, что я действительно хочу, это иметь что-то вроде триггера, который продолжит выполнение функции move после того, как я остановлю его.

Вот мой текущий код

#!/usr/bin/env python
import RPi.GPIO as gpio
import serial
import movement as m
import time
import requests

#ttyACM0
#ttyUSB0

arduinoSerialData = serial.Serial('/dev/ttyUSB0',9600)
global myData
myData = ""
m.stop()                             
#m.forward(0.5)
m.right(0.1)
def move(myData = ""):
    #Start
    #far 
    while m.farTrack() == '1101':
        print ("Left")
        myData = ""
        m.left(0.01)
        break
    while m.farTrack() == '1011':
        print ("Right")
        myData = ""
        m.right(0.01)
        break 
    while m.farTrack() == '1110':
        print ("Right")
        myData = ""
        m.right(0.01)
        break 
    while m.farTrack() == '0111':
        print ("Left")
        myData = ""
        m.left(0.01)
        break 
    while m.farTrack() == '0011':
        print ("Left")
        myData = ""
        m.left(0.01)
        break
    while m.farTrack() == '1100':
        print ("Right")
        myData = ""
        m.right(0.01)
        break
    while m.farTrack() == '0110':
        print ("Right")
        myData = ""
        m.right(0.01)
        break
    while m.farTrack() == '0010':
        print ("Right")
        myData = ""
        m.right(0.01)
        break
    while m.farTrack() == '1111':#if counter
        print ("Left")
        myData = ""
        m.left(0.01)
        break
    while m.lineTrack() == '1110':
        print ("Right")
        myData = ""
        m.right(0.01)
        break 


def saveData(myData):
    url = 'http://aviarthardph.net/robot/post.php'
    dataw = {'tag': myData}
    r = requests.post(url, data=dataw)
    print r.text
    print("Saving")



def main():
    while(arduinoSerialData.inWaiting()>0):
        global myData
        myData = arduinoSerialData.readline()
        print ("Tag Idendified: ", myData)
        if(myData != ''):
            #saveData(myData)
            continue
    myData = myData
    while True:
        r = requests.get('http://aviarthardph.net/robot/table.php?tableInfo')
        data = r.json()
        print(data)
        if data['status'] == '0':
            while True:
                r = requests.get('http://aviarthardph.net/robot/table.php?tableInfo');
                data = r.json()
                if(data['table'] == '1' or data['table'] == 2 or data['table'] == 3 or data['table'] == 4):
                    if(data['movement'] == 'L'):
                        print ('move left')
                        move()
                        print('continue')


                 else:
                    print('move Right')
                    move()

            else:
                print ('move right')
            break
    print ("Identified RFID :", myData)
    print("Far Track", m.farTrack())
    print("Line Track", m.lineTrack())
    print("\n")
    #move(myData)   


if __name__ == "__main__":
    main()

Вывод, который я визуализирую, состоит в том, чтобы функция def move работала непрерывно до тех пор, пока статус не изменится с 0 на 1.

JSON содержит ограничение на несколько данных, равное 10, поэтому мне нужно проверить значение каждого из них.

Большое спасибо

1 Ответ

0 голосов
/ 12 июня 2019

Я бы использовал нить для движения.Примерно так (псевдокод)

def MoveThread():
   while(Enable):
      if(m.farTrack() == "0111"):
         <do something>


def main:
    if(Datavalid):
       t = Thread(target = MoveThread)
       t.start()

Если вы хотите остановить движение, снимите флажок Enable и позвольте нити присоединиться к вашему основному.

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