from machine import Pin, ADC, SPI
from ST7735 import TFT
from sysfont import sysfont
from time
# Configurar SPI per la pantalla ST7735
spi = SPI(1, baudrate=20000000, polarity=0, phase=0, sck=Pin(14), mosi=Pin(13), miso=Pin(12))
# Crear instància de la pantalla TFT
tft =TFT(spi, 2, 4, 15)
# Inicialitzar la pantalla
tft.initr()
tft.fill(TFT.BLACK) # Esborra la pantalla
tft.rotation(3)
# Configurar el sensor analògic (exemple: Pin 34)
sensor = ADC(Pin(34))
sensor.atten(ADC.ATTN_11DB) # Permet llegir de 0V a 3.3V
while True:
tft.fill(TFT.BLACK) # Esborra la pantalla abans d'escriure
valor = sensor.read() # Llegir el valor del sensor (0-4095)
# Mostrar dades a la pantalla (erls números s'han de convertir a text)
tft.text((10, 40), "Sensor ADC: " + str(valor) + " C", TFT.WHITE, sysfont, 1, nowrap=True)
time.sleep(1) # Esperar 1 segon abans de la següent lectura
Una altra opció: que no s'esborri tota la pantalla a cada bucle
# Dibuixar la part fixa del text només un cop, fora del bucle
tft.text((10, 70), "sensor:", TFT.WHITE, sysfont, 1, nowrap=True)
while True:
valor = sensor.read() # Llegir el valor del sensor (0-4095)
# Esborrar només la part on es mostrarà el valor amb un rectangle ple del color del fill:
tft.fillrect((75, 70), (50, 10), TFT.BLACK)
# mostrar les dades a actualitzar:
text = str(valor) + " C"
tft.text((75, 70), text, TFT.YELLOW, sysfont, 1, nowrap=True)
time.sleep(1) # Esperar 1 segon abans de la següent lectura
Podem fer que el color canviï segons el valor del sensor, per exemple:
🟢 verd si el valor és baix.
🟡 groc si el valor és mitjà.
🔴 vermell si el valor és alt.
while True:
valor = sensor.read()
tft.fillrect((75, 70), (50, 10), TFT.BLACK)
# Definir el color del text segons el valor:
if valor < 1500:
color = TFT.GREEN # Baix
elif valor < 3000:
color = TFT.YELLOW # Mitjà
else:
color = TFT.RED # Alt
# Mostrar el text amb el color corresponent
text = str(valor) + " C"
tft.text((75, 70), text, color, sysfont, 1, nowrap=True)
time.sleep(1)
Afegim un gràfic vertical en funció del valor del sensor:
from machine import Pin, ADC, SPI
from ST7735 import TFT
from sysfont import sysfont
import time
# Configurar SPI per la pantalla ST7735
spi = SPI(1, baudrate=20000000, polarity=0, phase=0, sck=Pin(14), mosi=Pin(13), miso=Pin(12))
# Crear instància de la pantalla TFT
tft =TFT(spi, 2, 4, 15)
# Inicialitzar la pantalla
tft.initr()
tft.fill(TFT.BLACK) # Esborra la pantalla
tft.rotation(1)
# Configurar el sensor analògic (exemple: Pin 34)
sensor = ADC(Pin(34))
sensor.atten(ADC.ATTN_11DB) # Permet llegir de 0V a 3.3V
#Dibuixar la part fixa del text només un cop
tft.text((10, 70), "sensor:", TFT.WHITE, sysfont, 1, nowrap=True)
# Coordenades del gràfic de barra
bar_x = 120 # Posició X de la barra
bar_y = 80 # Posició Y (base)
bar_width = 10 # Amplada de la barra
bar_max_height = 60 # Alçada màxima de la barra
# Bucle per llegir i mostrar dades cada segon
while True:
valor = sensor.read() # Llegir el valor del sensor (0-4095)
# 🔹 Esborrar només la part del text i el gràfic
tft.fillrect((75, 70), (50, 10), TFT.BLACK) # Esborrar text
tft.fillrect((bar_x, bar_y - bar_max_height), (bar_width, bar_max_height), TFT.BLACK) # Esborrar barra antiga
# 🔹 Calcular l'altura de la barra proporcional al valor
bar_height = int((valor / 4095) * bar_max_height)
# 🔹 Definir el color segons el valor
if valor < 1500:
color = TFT.GREEN # Baix
elif valor < 3000:
color = TFT.YELLOW # Mitjà
else:
color = TFT.RED # Alt
# 🔹 Mostrar el text amb el color corresponent
text = str(valor) + " C"
tft.text((75, 70), text, color, sysfont, 1, nowrap=True)
# 🔹 Dibuixar la barra del gràfic
tft.fillrect((bar_x, bar_y - bar_height), (bar_width, bar_height), color)
time.sleep(1) # Esperar 1 segon
Per fer el gràfic horitzontal, simplement canviem la manera com es dibuixa la barra:
✅ En comptes de variar l’alçada (height), ara variarem l’amplada (width) en funció del valor del sensor.
✅ La barra creixerà d'esquerra a dreta.
from machine import Pin, ADC, SPI
from ST7735 import TFT
from sysfont import sysfont
import time
# Configurar SPI per la pantalla ST7735
spi = SPI(1, baudrate=20000000, polarity=0, phase=0, sck=Pin(14), mosi=Pin(13), miso=Pin(12))
# Crear instància de la pantalla TFT
tft =TFT(spi, 2, 4, 15)
# Inicialitzar la pantalla
tft.initr()
tft.fill(TFT.BLACK) # Esborra la pantalla
tft.rotation(1)
# Configurar el sensor analògic (exemple: Pin 34)
sensor = ADC(Pin(34))
sensor.atten(ADC.ATTN_11DB) # Permet llegir de 0V a 3.3V
#Dibuixar la part fixa del text només un cop
tft.text((10, 70), "sensor:", TFT.WHITE, sysfont, 1, nowrap=True)
# 🔹 Coordenades del gràfic horitzontal
bar_x = 75 # Posició inicial X de la barra
bar_y = 85 # Posició Y de la barra
bar_height = 3 # Alçada de la barra
bar_max_width = 70 # Amplada màxima de la barra
# Bucle per llegir i mostrar dades cada segon
while True:
valor = sensor.read() # Llegir el valor del sensor (0-4095)
# 🔹 Esborrar només la part del text i la barra antiga
tft.fillrect((70, 68), (70, 10), TFT.BLACK) # Esborrar text anterior
tft.fillrect((bar_x, bar_y), (bar_max_width, bar_height), TFT.BLACK) # Esborrar barra antiga
# 🔹 Calcular l’amplada de la barra proporcional al valor
bar_width = int((valor / 4095) * bar_max_width)
# 🔹 Definir el color segons el valor
if valor < 1500:
color = TFT.GREEN # Baix
elif valor < 3000:
color = TFT.YELLOW # Mitjà
else:
color = TFT.RED # Alt
# 🔹 Mostrar el text amb el color corresponent
text = str(valor) + " C"
tft.text((75, 70), text, color, sysfont, 1, nowrap=True)
# 🔹 Dibuixar la barra horitzontal
tft.fillrect((bar_x, bar_y), (bar_width, bar_height), color)
time.sleep(1) # Esperar 1 segon