Bonjour
je souhaite afficher l’heure sur un ecran OLED et en meme temps réagir aux actions d’une telecommande IR.
pour l’ecran j’ai créé une classe :
class Welcome():
def __init__(self, **Arguments):
global time_var
global date_var
draw=ImageDraw.Draw(image_bw)
while True:
oled.image(image_bw)
#efface le texte de la frame précédente
draw.text((55,2),time_var,font=font1,size=1,fill=0)
draw.text((40,45),date_var,font=font2,size=1,fill=0)
set_time()
#update la frame avec l'heure réactualisée
draw.text((55,2),time_var,font=font1,size=1,fill=1)
draw.text((40,45),date_var,font=font2,size=1,fill=1)
oled.show()
ce code fonctionne bien. Dans la boucle while j’ai ajouté :
event = dev.read_one()
if (event):
print("You pressed: ")
print(event.value)
le code réagit bien à une action de la télécommande mais il renvoie plusieurs events pour une action simple. De plus il renvoie des events parasites associés au code 0. Pour être plus clair un exemple. Si j’appuie sur la touche 24, le résultat est :
You pressed: 24
You pressed: 0
You pressed: 24
You pressed: 0
You pressed: 24
You pressed: 0
j’ai donc 3 évenements associés à la touche 24 et 3 associés à la touche 0 alors que je n’attends qu’un évènement unique associé à la touche 24. Ce comportement n’est pas dû à l’association avec le code d’affichage OLED car il se produit identiquement si je garde uniquement les 4 lignes précédentes dans une boucle while.
J’ai essayé l’autre méthode :
timer = 0.0
tolerance = 0.5
for event in dev.read_loop():
if timer == 0.0 or time.time() > timer + tolerance:
timer = time.time()
print(event.value)
qui fonctionne bien seule. si je l’ajoute dans la boucle while, bien entendu il reste indéfiniment dans la boucle dev.read_loop() et l’affichage n’est pas réactualisé.