2016-08-10 104 views
0

我正在使用Roomba机器人(清洁机器人),每次机器人撞到某物时我都要打印。感谢Picamera,我还必须每10秒钟拍摄一张照片。我希望能够打印图片n和图片n + 1之间发生碰撞。 拍摄照片时,我会增加拍摄的照片数量,并在发生颠簸时增加相同数量(增加颠簸数量)。 例如,如果图片编号1和2之间出现凹凸1,我的代码将打印“图片1和图片2之间的凹凸1”。 问题是,如果拍摄图片2,我的代码将打印“图片2和图片3之间的凹凸1”。但它是错误的,凹凸1仍然在图片1和图片2之间。 即使已经拍摄了另一张图片,我仍然无法找到能够保留在相同图片之间的解决方案。python - 不同功能的返回值

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 

非常感谢您的任何回答!

回答

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。

+0

我试过了,它没有工作。 我想像“如果凹凸计数没有改变,仍然打印最后碰撞发生在图片n和图片n + 1之间,即使已经拍摄了1000张图片”。 –

+0

啊,是的。忽略我写的内容,甚至不修改displayBumpings()中的计数值,对不起。我无法在我的机器上测试你的代码,但我已经多次阅读它,它似乎应该工作?根据你说的你在shell中得到的是正确的,不是吗? 你能指定更确切的问题是什么吗? –

+0

直到拍摄图片2为止,我在外壳中获得的内容都是正确的。正如你所看到的,图片2被拍摄。但是,真正出现在图片1和图片2之间的凹凸1现在出现在图片2和图片3之间。但是它应该是相同的凹凸,它应该打印: '拍摄图片2' '图片1和图片2' –