2016-08-10 23 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() 

ピクチャが撮影されるたびにPicturesNumberの更新が値であるため、DisplayBumpingsプリント行に問題があることは知っています。

これは私がシェルで得るものです

Picture 1 taken 

Bump 1 between picture 1 and picture 2 

Picture 2 taken 

Bump 1 between picture 2 and picture 3 

はどんな答えありがとうございました!

答えて

0

カウントが更新されるときにのみ更新される変数を追加しますか?

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使用: 私は何を意味)reactSensor(で、です。

+0

私はこれを試しても機能しませんでした。 バンプカウントが変更されない場合でも、1000枚の写真を撮っても、最後のバンプがピクチャnとピクチャn + 1の間に発生したことを印刷してください。 –

+0

ああ、そうです。私が書いたものを無視して、あなたはdisplayBumpings()のカウント値を修正していません。私のマシン上でコードをテストすることはできませんが、私はそれを何度か読んだので、うまくいくはずです。あなたが言うことによると、それは正しいですか? 問題の内容をより正確に指定できますか? –

+0

写真2が撮られるまで、私がシェルに入るのは正しいです。ご覧のように、写真2が撮られます。しかし、実際に写真1と写真2の間に現われたバンプ1は、今度は写真2と写真3の間に現れていますが、同じバンプですので印刷してください: '写真2撮影 ' '画像1と画像2 ' –