[Optimisation] Récupération de la position d'un fader motorisé et affichage sur écran LCD

Bonjour à tous !

Je suis étudiant audiovisuel et je suis actuellement sur un projet d’étude : la fabrication d’une console DMX opensource, sur raspberry pi 3B

J’ai essayé de créer un programme en python qui puisse récupérer et convertir la valeur d’un fader et l’afficher sur un petit écran LCD.
J’utilise pour cela un fader motorisé ainsi qu’un CAN MCP3008 et un écran OLED SSD1308

Voici le code :

Code

import time
import Adafruit_GPIO.SPI as SPI
#ADC lib
import Adafruit_MCP3008
#OLED screen lib
import Adafruit_SSD1306
#Displaying libs
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

	###Hardware SPI configuration###

SPI_PORT = 0
SPI_DEVICE = 0
mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE))
RST = 0

	###DISPLAY CONFIGURATION###

#Create display object
disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)
#init display
disp.begin()
#Cleat display
disp.clear()
disp.display()

Create blank image for drawing with mode ‹ 1 › for 1-bit color.

width = disp.width
height = disp.height
image = Image.new(‹ 1 ›, (width, height))

Get drawing object to draw on image.

draw = ImageDraw.Draw(image)
#load default font
font = ImageFont.truetype(’/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf’, 20)

start=time.time()
raw_value = mcp.read_adc(0)
while True:
new_raw_value = mcp.read_adc(0)

#Because of a non stable input voltage, the read value is not constant
#We need to do a hysteresis
if new_raw_value < raw_value-5 or new_raw_value  > raw_value+5:
	raw_value = new_raw_value

raw_value_str = str(raw_value)
value = (raw_value*100)/1023 
value_str = str(value)
#print "The value is", value

#Draw some text
draw.text((0,0), value_str, font=font, fill=255)
    draw.text((40,0), "%", font=font, fill=255)
    draw.text((0,30), raw_value_str, font=font, fill=255)
#Update display
disp.image(image)
disp.display()
#Refresh text
image = Image.new('1', (width, height))
draw = ImageDraw.Draw(image)
draw.text((0,0), " ", font=font, fill=255)
    draw.text((0,30), " ", font=font, fill=255)

Le problème est que je n’ai pas trouvé d’autre moyen que de supprimer les objets image et l’objet draw, en recréer des vides pour les écraser et recommencer… les différentes méthodes clear() ne faisaient rien et mes textes se superposaient.
Je pense donc qu’il y a un problème d’optimisation à ce niveau-là puisque mon programme consomme 23% d’un des cœurs de ma framboise.

Merci d’avance pour vos conseils !
Cordialement,
Alexandre.

1 « J'aime »

Coucou ici,

je ne peux pas te répondre ca dépasse mes compétances, mais je suis fan de ton projet !!
J’espere qu’un de nos lumiere saura t’aider !

Courage

Merci beaucoup, ça fait plaisir !

En fait dans le département de ma fac, y’a un des plateau TV qui n’a plus de console son. Etant donne que je suis en master Ingénierie des Systèmes Images et Sons (ISIS), un des profs a proposé comme projet sur l’année de créer cette console. On s’y est mis à 4 et on y travail !