from machine import I2C, Pin
from time import sleep
import ssd1306 #PER L'UTILIZZO DEL DISPLAY
''' Per OLED SSD1306 intendiamo un display che utilizza un'interfaccia SPI o
I2C ed è disponibile in diverse dimensioni (128x64, 128x32, 72x40, 64x48 - larghezzaxprofondità)
e colori (bianco, giallo, blu, giallo + blu).
Ogni carattere stampato sul display occupa uno spazio di 8x8 pixel,
quindi una riga più contenere massimo 16 caratteri (non solo lettere ma anche
simboli e lo spazio!).
'''
i2c=I2C(0) #il numero dell'interfaccia scelta è 0
display = ssd1306.SSD1306_I2C(128, 64, i2c) #scelta del display
display.fill(0)
#.fill() permette di accendere o spegnere tutti i pixel del display
'''L'interfaccia I2C ha dei pin di default assegnati, nel caso della numero 0
sono: SCL=18 e SDA=19. Usiamoli per collegare il display alla ESP32.
'''
#VISUALIZZA UN TESTO
display.text('Dispositivi e ', 0, 0, 1)
'''Il testo verrà posizionato a 0 pixel dalla sinistra del display (asse x)
e 0 pixel dall'alto del display (asse y), il numero 1 indica il colore
del testo - bianco'''
display.text('sensori', 0, 10, 1)
'''10 pixel dall'alto perché 8 pixel occupato da un singolo carattere e
2 di leading, cioè uno spazio verticale aggiunto tra le righe di testo
per migliorare la leggibilità e l'estetica del testo stesso'''
display.text('Biomedicali', 0, 20, 1) #2 pixel di leading
display.text('Studente: ', 0, 40, 1) #12 pixel di leading
display.text('Nome Cognome', 0, 50, 1) #2 pixel di leading
display.show()
#SCROLLING DEL TESTO
'''display.scroll(20,0) sposta il testo scritto sul display di 20 pixel verso
destra (numero negativo -->spostamento verso sinistra),
l'altro numero indica lo spostamento verticale. Non possiamo usare questo modulo
perché vogliamo spostare solo una riga e non tutto il testo!'''
def scroll_text (text, y, col):
'''I parametri sono:
1)text, rappresenta il testo che si desidera far scorrere sul display
2)y, indica l'altezza alla quale il testo deve essere posizionato sul display. In questo caso, l'altezza è specificata in pixel. Il testo verrà quindi visualizzato a questa altezza e si muoverà lateralmente mantenendo costante l'altezza.
3)col, indica il colore del testo.'''
text=' '+text+' ' #Aggiunta di uno spazio all'inizio e alla fine del testo (non obbligatorio)
for i in range(0,len(text)*8-display.width):
#ciclo per scorrere pixel per pixel tutti i punti del testo (ogni font è largo 8 pixel)
display.fill_rect(0, y, display.width, 8, 0)
'''ad ogni iterazione cancella quanto scritto precedentementemente
disegnando un rettangolo largo quanto il display e alto 8 pixel'''
display.text(text, -i, y, 1) #si sposta di 1 pixel alla volta
display.show()
sleep(0.01)
sleep(5)
display.fill(0)
display.text('Studente: ', 0, 40, 1)
display.text('Nome Cognome', 0, 50, 1)
while True:
scroll_text('Dispositivi e Sensori Biomedicali', 10, 1)