8x32 PI : vitesse de lecture, QR code et affiche, sens de l'image sur la vitrine

- Vitesse de lecture : réglage VITESSE du lecteur et menu « Vitesse » sur la
  page web (×0,25 à ×2, gardé dans .vitesse.txt du dossier des animations).
- QR code d'accès à la page web et affiche A5 (outils/generer_qrcode.py →
  qrcode/) : une coulée inspirée de « cascade » en haut, une partie de
  « tetris » en bas, couleurs tirées des animations de l'équipe
  (qrcode/sources/), titre en pixels de couleur.
- Matrice de la vitrine : image retournée d'un demi-tour (INVERSER_X et
  INVERSER_Y) et nouveau réglage DECALAGE_X / DECALAGE_Y (ici 1 pixel vers
  la droite).
- Doc : README, INTERFACE_WEB.md et CLAUDE.md à jour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
bach
2026-10-09 16:04:13 +02:00
co-authored by Claude Opus 5.5
parent 156f9ce438
commit 5b0e858abe
135 changed files with 434 additions and 11 deletions
+21 -4
View File
@@ -121,8 +121,16 @@ COURANT_MAX_MA = 2500
# - rouge et vert inversés (gauche/droite) → INVERSER_X = True
# - rouge et vert en bas au lieu d'en haut → INVERSER_Y = True
# - les deux à la fois (image à l'envers) → les deux à True
INVERSER_X = False
INVERSER_Y = False
INVERSER_X = True
INVERSER_Y = True
# DÉCALAGE de l'image sur la matrice, en pixels (après INVERSER_X / Y).
# DECALAGE_X = 1 : toute l'image glisse d'un pixel vers la DROITE ;
# la colonne de gauche reste éteinte, la dernière colonne de l'image sort
# de la matrice. Utile si un bord de la matrice est caché dans la vitrine.
# (Valeurs négatives : vers la gauche ; DECALAGE_Y : vers le bas.)
DECALAGE_X = 1
DECALAGE_Y = 0
# CORRECTION GAMMA (voir partie 4). 2.2 = comme un écran d'ordinateur.
# 1.0 = pas de correction (les couleurs sombres paraîtront trop claires).
@@ -526,9 +534,18 @@ def assombrir(pourcentage):
for (r, v, b) in pixels_de(toile)])
def decaler(image):
"""Applique DECALAGE_X / DECALAGE_Y : l'image glisse, le vide est noir."""
if DECALAGE_X == 0 and DECALAGE_Y == 0:
return image
decalee = Image.new("RGB", (LARGEUR, HAUTEUR))
decalee.paste(image, (DECALAGE_X, DECALAGE_Y))
return decalee
def montrer(image=None):
"""Affiche la toile (ou une autre image de 32 × 8) sur l'écran."""
_ecran.afficher(image if image is not None else toile)
"""Affiche la toile (ou une autre image de la taille de la matrice) sur l'écran."""
_ecran.afficher(decaler(image if image is not None else toile))
def attendre(millisecondes):