vendredi 24 juillet 2020

Using if statements inside while true loop and issues with it

I'm python noob so please go easy on me.I have a Raspberry Pi 4 and Sensehat on top of it. I'm making an interesting project with it that involves cycling and safety. The gyro on the Sensehat senses the direction I'm turning/leaning and shows an arrow animation on the Sensehat's 8x8 matrix leds towards that direction so that drivers can see it.

As you can see everything is wrapped inside a while True Loop and i added some if statements inside while true. When x and y and z are between such values, show this animation...

The direction sensing works great, animation also loops but I faced one small hiccup: Everytime a loop completes the animation lags half a second or so. I can also see the lag when I'm printing the gyro's x,y,z output. I mean when animation is displayed on the LEDs, the output of x,y,z lags.

Please watch this short video that demonstrates the issue in action as it's a bit hard to describe: https://youtu.be/Iou20WMxCOo

As you can see in the video, the arrow animation is not flowing smoothly. It stops for a short while after each loop.

I can kinda tell what's going on. When the conditions of if statements are met, the following code which is the arrow animation, is running but I thought Python would also keep running the rest of the code in that while True loop, which doesn't seem to be the case.

So do I need a seperate, dedicated while true to loop for animation? Is there even such a thing?

Here's my code:

from sense_hat import SenseHat
import time

sense = SenseHat()

g = (0, 255, 0) # Green
b = (0, 0, 0) # Black

while True:
    x, y, z = sense.get_accelerometer_raw().values()
    x = round(x, 2)
    y = round(y, 2)
    z = round(z, 2)
    print("x=%s, y=%s, z=%s" % (x, y, z))
    time.sleep(0.1)
    if (x > 0.17) and (z < 0.15) and (z > -0.05) and (y > 0.90):
       sense.set_rotation(180)
       anim1 = [
       b, b, b, b, b, b, b, g,
       b, b, b, b, b, b, g, g,
       b, b, b, b, b, g, g, g,
       b, b, b, b, g, g, g, g,
       b, b, b, b, g, g, g, g,
       b, b, b, b, b, g, g, g,
       b, b, b, b, b, b, g, g,
       b, b, b, b, b, b, b, g
       ]
       sense.set_pixels(anim1)
       time.sleep(0.05)
       
       anim2 = [
       b, b, b, b, b, b, g, b,
       b, b, b, b, b, g, g, b,
       b, b, b, b, g, g, g, b,
       b, b, b, g, g, g, g, b,
       b, b, b, g, g, g, g, b,
       b, b, b, b, g, g, g, b,
       b, b, b, b, b, g, g, b,
       b, b, b, b, b, b, g, b
       ]
       sense.set_pixels(anim2)
       time.sleep(0.05)
       
       anim3 = [
       b, b, b, b, b, g, b, b,
       b, b, b, b, g, g, b, b,
       b, b, b, g, g, g, b, b,
       b, b, g, g, g, g, b, b,
       b, b, g, g, g, g, b, b,
       b, b, b, g, g, g, b, b,
       b, b, b, b, g, g, b, b,
       b, b, b, b, b, g, b, b
       ]
       sense.set_pixels(anim3)
       time.sleep(0.05)
       
       anim4 = [
       b, b, b, b, g, b, b, b,
       b, b, b, g, g, b, b, b,
       b, b, g, g, g, b, b, b,
       b, g, g, g, g, b, b, b,
       b, g, g, g, g, b, b, b,
       b, b, g, g, g, b, b, b,
       b, b, b, g, g, b, b, b,
       b, b, b, b, g, b, b, b
       ]
       sense.set_pixels(anim4)
       time.sleep(0.05)
       
       anim5 = [
       b, b, b, g, b, b, b, b,
       b, b, g, g, b, b, b, b,
       b, g, g, g, b, b, b, b,
       g, g, g, g, b, b, b, b,
       g, g, g, g, b, b, b, b,
       b, g, g, g, b, b, b, b,
       b, b, g, g, b, b, b, b,
       b, b, b, g, b, b, b, b
       ]
       sense.set_pixels(anim5)
       time.sleep(0.05)
       
       anim6 = [
       b, b, g, b, b, b, b, b,
       b, g, g, b, b, b, b, b,
       g, g, g, b, b, b, b, b,
       g, g, g, b, b, b, b, b,
       g, g, g, b, b, b, b, b,
       g, g, g, b, b, b, b, b,
       b, g, g, b, b, b, b, b,
       b, b, g, b, b, b, b, b
       ]
       sense.set_pixels(anim6)
       time.sleep(0.05)
       
       anim7 = [
       b, g, b, b, b, b, b, b,
       g, g, b, b, b, b, b, b,
       g, g, b, b, b, b, b, b,
       g, g, b, b, b, b, b, b,
       g, g, b, b, b, b, b, b,
       g, g, b, b, b, b, b, b,
       g, g, b, b, b, b, b, b,
       b, g, b, b, b, b, b, b
       ]
       sense.set_pixels(anim7)
       time.sleep(0.05)
       
       anim8 = [
       g, b, b, b, b, b, b, b,
       g, b, b, b, b, b, b, b,
       g, b, b, b, b, b, b, b,
       g, b, b, b, b, b, b, b,
       g, b, b, b, b, b, b, b,
       g, b, b, b, b, b, b, b,
       g, b, b, b, b, b, b, b,
       g, b, b, b, b, b, b, b
       ]
       sense.set_pixels(anim8)
       time.sleep(0.05)
       
       anim9 = [
       b, b, b, b, b, b, b, b,
       b, b, b, b, b, b, b, b,
       b, b, b, b, b, b, b, b,
       b, b, b, b, b, b, b, g,
       b, b, b, b, b, b, b, g,
       b, b, b, b, b, b, b, b,
       b, b, b, b, b, b, b, b,
       b, b, b, b, b, b, b, b
       ]
       sense.set_pixels(anim9)
       time.sleep(0.05)
       
       anim10 = [
       b, b, b, b, b, b, b, b,
       b, b, b, b, b, b, b, b,
       b, b, b, b, b, b, b, g,
       b, b, b, b, b, b, g, g,
       b, b, b, b, b, b, g, g,
       b, b, b, b, b, b, b, g,
       b, b, b, b, b, b, b, b,
       b, b, b, b, b, b, b, b
       ]
       sense.set_pixels(anim10)
       time.sleep(0.05)
       
       anim11 = [
       b, b, b, b, b, b, b, b,
       b, b, b, b, b, b, b, g,
       b, b, b, b, b, b, g, g,
       b, b, b, b, b, g, g, g,
       b, b, b, b, b, g, g, g,
       b, b, b, b, b, b, g, g,
       b, b, b, b, b, b, b, g,
       b, b, b, b, b, b, b, b
       ]
       sense.set_pixels(anim11)
       time.sleep(0.05)
       
       anim12 = [
       b, b, b, b, b, b, b, b,
       b, b, b, b, b, b, b, g,
       b, b, b, b, b, b, g, g,
       b, b, b, b, b, g, g, g,
       b, b, b, b, b, g, g, g,
       b, b, b, b, b, b, g, g,
       b, b, b, b, b, b, b, g,
       b, b, b, b, b, b, b, b
       ]
       sense.set_pixels(anim12)
       time.sleep(0.05)
    elif x < -0.17 and (z < 0.15) and (z > -0.05) and (y > 0.90):
       sense.set_rotation(0)
       anim1 = [
       b, b, b, b, b, b, b, g,
       b, b, b, b, b, b, g, g,
       b, b, b, b, b, g, g, g,
       b, b, b, b, g, g, g, g,
       b, b, b, b, g, g, g, g,
       b, b, b, b, b, g, g, g,
       b, b, b, b, b, b, g, g,
       b, b, b, b, b, b, b, g
       ]
       sense.set_pixels(anim1)
       time.sleep(0.05)
       
       anim2 = [
       b, b, b, b, b, b, g, b,
       b, b, b, b, b, g, g, b,
       b, b, b, b, g, g, g, b,
       b, b, b, g, g, g, g, b,
       b, b, b, g, g, g, g, b,
       b, b, b, b, g, g, g, b,
       b, b, b, b, b, g, g, b,
       b, b, b, b, b, b, g, b
       ]
       sense.set_pixels(anim2)
       time.sleep(0.05)
       
       anim3 = [
       b, b, b, b, b, g, b, b,
       b, b, b, b, g, g, b, b,
       b, b, b, g, g, g, b, b,
       b, b, g, g, g, g, b, b,
       b, b, g, g, g, g, b, b,
       b, b, b, g, g, g, b, b,
       b, b, b, b, g, g, b, b,
       b, b, b, b, b, g, b, b
       ]
       sense.set_pixels(anim3)
       time.sleep(0.05)
       
       anim4 = [
       b, b, b, b, g, b, b, b,
       b, b, b, g, g, b, b, b,
       b, b, g, g, g, b, b, b,
       b, g, g, g, g, b, b, b,
       b, g, g, g, g, b, b, b,
       b, b, g, g, g, b, b, b,
       b, b, b, g, g, b, b, b,
       b, b, b, b, g, b, b, b
       ]
       sense.set_pixels(anim4)
       time.sleep(0.05)
       
       anim5 = [
       b, b, b, g, b, b, b, b,
       b, b, g, g, b, b, b, b,
       b, g, g, g, b, b, b, b,
       g, g, g, g, b, b, b, b,
       g, g, g, g, b, b, b, b,
       b, g, g, g, b, b, b, b,
       b, b, g, g, b, b, b, b,
       b, b, b, g, b, b, b, b
       ]
       sense.set_pixels(anim5)
       time.sleep(0.05)
       
       anim6 = [
       b, b, g, b, b, b, b, b,
       b, g, g, b, b, b, b, b,
       g, g, g, b, b, b, b, b,
       g, g, g, b, b, b, b, b,
       g, g, g, b, b, b, b, b,
       g, g, g, b, b, b, b, b,
       b, g, g, b, b, b, b, b,
       b, b, g, b, b, b, b, b
       ]
       sense.set_pixels(anim6)
       time.sleep(0.05)
       
       anim7 = [
       b, g, b, b, b, b, b, b,
       g, g, b, b, b, b, b, b,
       g, g, b, b, b, b, b, b,
       g, g, b, b, b, b, b, b,
       g, g, b, b, b, b, b, b,
       g, g, b, b, b, b, b, b,
       g, g, b, b, b, b, b, b,
       b, g, b, b, b, b, b, b
       ]
       sense.set_pixels(anim7)
       time.sleep(0.05)
       
       anim8 = [
       g, b, b, b, b, b, b, b,
       g, b, b, b, b, b, b, b,
       g, b, b, b, b, b, b, b,
       g, b, b, b, b, b, b, b,
       g, b, b, b, b, b, b, b,
       g, b, b, b, b, b, b, b,
       g, b, b, b, b, b, b, b,
       g, b, b, b, b, b, b, b
       ]
       sense.set_pixels(anim8)
       time.sleep(0.05)
       
       anim9 = [
       b, b, b, b, b, b, b, b,
       b, b, b, b, b, b, b, b,
       b, b, b, b, b, b, b, b,
       b, b, b, b, b, b, b, g,
       b, b, b, b, b, b, b, g,
       b, b, b, b, b, b, b, b,
       b, b, b, b, b, b, b, b,
       b, b, b, b, b, b, b, b
       ]
       sense.set_pixels(anim9)
       time.sleep(0.05)
       
       anim10 = [
       b, b, b, b, b, b, b, b,
       b, b, b, b, b, b, b, b,
       b, b, b, b, b, b, b, g,
       b, b, b, b, b, b, g, g,
       b, b, b, b, b, b, g, g,
       b, b, b, b, b, b, b, g,
       b, b, b, b, b, b, b, b,
       b, b, b, b, b, b, b, b
       ]
       sense.set_pixels(anim10)
       time.sleep(0.05)
       
       anim11 = [
       b, b, b, b, b, b, b, b,
       b, b, b, b, b, b, b, g,
       b, b, b, b, b, b, g, g,
       b, b, b, b, b, g, g, g,
       b, b, b, b, b, g, g, g,
       b, b, b, b, b, b, g, g,
       b, b, b, b, b, b, b, g,
       b, b, b, b, b, b, b, b
       ]
       sense.set_pixels(anim11)
       time.sleep(0.05)
       
       anim12 = [
       b, b, b, b, b, b, b, b,
       b, b, b, b, b, b, b, g,
       b, b, b, b, b, b, g, g,
       b, b, b, b, b, g, g, g,
       b, b, b, b, b, g, g, g,
       b, b, b, b, b, b, g, g,
       b, b, b, b, b, b, b, g,
       b, b, b, b, b, b, b, b
       ]
       sense.set_pixels(anim12)
       time.sleep(0.05)
    else:
       sense.clear()
        
    


Aucun commentaire:

Enregistrer un commentaire