refresh simultané de plusieurs variables sur un lcd - Raspberry Pi Forums
bonjour à tous,
je souhaite afficher sur mon lcd 2x16 les infos suivantes:
-température et heure sur la 1ere ligne
-vitesse et chrono sur la seconde
en bidouillant mon code je parviens à afficher les 2 en même temps mais soit la boucle de la ligne1 fonctionne mais pas la seconde et vice versa (ce qui est plus ou moins normal dans l'état actuel de mon code).
la température peut être rafraichie toutes les 0.5s, l'heure toutes les minutes (logique), la vitesse toutes les 0.25s mais on ne peut pas interrompre la boucle du chrono évidemment (qui d'ailleurs ne fonctionne pas comme je le voudrais, mais c'est un autre sujet...).
j'ai vu des cours sur le threading mais je n'ai encore pas vu d'exemple qui s'applique à mon problème.
quelle serait la solution pour tout faire fonctionner en même temps ? (sachant que d'autres variables pourront s'ajouter à la version actuelle)
mon code est un peu crade, j'ai imbriqué des morceaux piqués un peu partout (ce qui est peut-être une des raisons de mon problème...) je n'ai mis que la partie qui nous intéresse
je souhaite afficher sur mon lcd 2x16 les infos suivantes:
-température et heure sur la 1ere ligne
-vitesse et chrono sur la seconde
en bidouillant mon code je parviens à afficher les 2 en même temps mais soit la boucle de la ligne1 fonctionne mais pas la seconde et vice versa (ce qui est plus ou moins normal dans l'état actuel de mon code).
la température peut être rafraichie toutes les 0.5s, l'heure toutes les minutes (logique), la vitesse toutes les 0.25s mais on ne peut pas interrompre la boucle du chrono évidemment (qui d'ailleurs ne fonctionne pas comme je le voudrais, mais c'est un autre sujet...).
j'ai vu des cours sur le threading mais je n'ai encore pas vu d'exemple qui s'applique à mon problème.
quelle serait la solution pour tout faire fonctionner en même temps ? (sachant que d'autres variables pourront s'ajouter à la version actuelle)
mon code est un peu crade, j'ai imbriqué des morceaux piqués un peu partout (ce qui est peut-être une des raisons de mon problème...)
code: select all
def ligne1(): while true: #######affichage température tfile = open(temp_w1_path) text = tfile.read() tfile.close() secondline = text.split("\n")[1] temperaturedata = secondline.split(" ")[9] temperature = float(temperaturedata[2:]) temperature = temperature / 1000 temp = "%.1f" % (temperature) temp = str(temp) #######heure locale mytime = "" f=os.popen("date") for in f.readlines(): mytime += mytime = mytime[-20:-15] #######creation du str de la 1ere ligne deg = chr(223) celcius = "c " firstline = temp + deg + celcius + mytime lcd_string(firstline,lcd_line_1)#################################################################probleme dans la boucle de mise jour temp ligne2() def ligne2(): while true: gpio.setmode(gpio.bcm) gpio.setup(17,gpio.in) gpio.setup(21,gpio.in) global speed speed = 0 lasttime = datetime.datetime.now() tzero=time.time() #recuperation de tzero while true: #ligne1() input = gpio.input(17)###########compteur de vitesse if not input: thistime = datetime.datetime.now() timediff = (thistime-lasttime).total_seconds() speed = circumference/(timediff/3600) lasttime = thistime input = gpio.input(pin) while not input: input = gpio.input(pin) else: if speed > 0: thistime = datetime.datetime.now() timediff = (thistime-lasttime).total_seconds() if timediff > timenoactivity: speed = 0 if gpio.input(21) == false: ###################chronometre t=time.time() -tzero # temps apres tzero t=time.time() -tzero tituple=time.gmtime(t) reste=t-tituple[3]*3600.0-tituple[4]*60.0-tituple[5]*1.0 restes=("%.2f" % reste )[-2::] tt=time.strftime("%m:%s", tituple)+","+restes time.sleep(0.01) #attente en seconde speed = str(speed) speed = "%.1s" % (speed) unit = "km/h " unit = str(unit) temps = str(tt) secondline = speed + unit + temps lcd_string(secondline,lcd_line_2) while true: ligne1() ligne2()
il y automatiquement conflit pour l'accès au lcd.
amha il faut faire deux programmes d'acquisition indépendants : deux process (température et vitesse) et un programme qui gère l'afficheur en "piquant" les infos que calculent les 2 autre programmes.
pour ta boucle du chrono cela peut être une solution aussi
je pense aux threads, regarde dans la librairie python correspondante.
pour la liaison entre les process, il y la possibilité d'utiliser les pipes et des signaux.
de la belle bidouille en perspective. plein de doc à lire
amha il faut faire deux programmes d'acquisition indépendants : deux process (température et vitesse) et un programme qui gère l'afficheur en "piquant" les infos que calculent les 2 autre programmes.
pour ta boucle du chrono cela peut être une solution aussi
je pense aux threads, regarde dans la librairie python correspondante.
pour la liaison entre les process, il y la possibilité d'utiliser les pipes et des signaux.
de la belle bidouille en perspective. plein de doc à lire
raspberrypi
Comments
Post a Comment