python - 不同函数的返回值

时间:2016-08-10 07:30:12

标签: python count

我正在研究Roomba机器人(清洁机器人),每次机器人撞到某物时我都需要打印。由于Picamera,我还必须每隔10秒拍照。我希望能够打印出图片n和图片n + 1之间发生碰撞。 拍摄照片时,我会增加拍摄的照片数量,并在发生碰撞时增加(增加碰撞次数)。 例如,如果在图片编号1和2之间出现凹凸1,则我的代码将打印“图片1和图片2之间的凹凸1”。 问题是如果拍摄了图片2,我的代码将打印“图片2和图片3之间的凹凸1”。但这是假的,Bump 1仍然在图片1和图片2之间。 即使已经拍摄了另一张照片,我找不到能够保持相同照片的解决方案。

count = 0
PicturesNumber = 0

def takePictures():

global PicturesNumber

    for i in range(10):
        sleep(5)
        PicturesNumber += 1
        print(("Picture %i taken" % (i + 1,)))
        camera.capture(('/home/pi/Project/image%s.jpg') % (i,))
        camera.close()
    return PicturesNumber

def reactSensors():

    global count
    threading.Timer(1, reactSensors).start()
    array = r.getSensor('BUMPS_AND_WHEEL_DROPS') # get information from the roomba sensors
    if array[3] == 1 or array[4] == 1:
       count += 1
       #print(("Bump %i" % (count,)))
    return count

def displayBumpings():

    threading.Timer(1, displayBumpings).start()
    print(("Bump %i between picture %i and picture %i\n" (count + 1, PicturesNumber, PicturesNumber + 1,)))

 if __name__ == '__main__':

 r = create.Create(SERIAL_PORT)
 settime = time.time()

 resp = input("Ready to roll? ")
 if resp[0] != 'y':
 r.shutdown()
 if resp[0] == 'y':
 print("Let's go\n")

 # I am using threading to run each function at the same time
 Thread(target=reactSensors).start()
 Thread(target=takePictures).start()
 Thread(target=displayBumpings).start()

我知道DisplayBumpings打印行存在问题,因为每次拍摄照片时PicturesNumber更新都是值。

这是我在shell中获得的内容

Picture 1 taken

Bump 1 between picture 1 and picture 2

Picture 2 taken

Bump 1 between picture 2 and picture 3

非常感谢您的回答!

1 个答案:

答案 0 :(得分:0)

添加一个仅在count计数时更新的变量? 我的意思是,在reactSensor():

reactSensor(): 
   ... 
   if array[3] == 1 or array[4] == 1: 
     count +=1 
     newvariable = PicturesNumber
     global newvariable

def displayBumpings():

    threading.Timer(1, displayBumpings).start()
    print(("Bump %i between picture %i and picture %i\n" (count + 1,newvariable, newvariable+ 1,)))

然后在碰撞时使用newvariable。