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...)

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() 
je n'ai mis que la partie qui nous intéresse

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 :-)


raspberrypi



Comments

Popular posts from this blog

invalid use of void expresion in FlexiTimer2 library

error: a function-definition is not allowed here before '{' token

LED Strip Code