from machine import time_pulse_us, Pin, I2C
from time import sleep_us, sleep
import ssd1306
trigger=Pin(27, Pin.OUT)
#trigger è un pin di input per il sensore e di output per la scheda
echo=Pin(26, Pin.IN)
#echo è un pin di output per il sensore e di input per la scheda
led=Pin(32, Pin.OUT)
velocità=34000 #Velocità del suono in cm/s
i2c=I2C(0)
#Inizializzazione del display OLED
display=ssd1306.SSD1306_I2C(128, 64, i2c)
#Variabili per il disegno del grafico sul display:
x=0
y_prec=63
distanza_prec=0
display.fill(0) #Pulizia del display
while True:
trigger.value(1)
sleep_us(10) #Segnale trigger alto per 10 microsecondi, viene fornito l'impulso
trigger.value(0) #Segnale trigger basso, emissione dell'onda
hltime=time_pulse_us(echo, 1) #Controllo per quanto tempo echo è alto,
#alla funzione passiamo il nome del pin e il valore (0/1) per
#il quale effettuare il controllo
#hltime sta per high level time
distanza=round(((hltime/1e6)*velocità)/2, 2)
#Arrotondiamo per ridurre la sensibilità alle piccole variazioni
print("La distanza misurata è:", distanza, "cm")
#Stampa numerica della distanza sul display:
display.fill_rect(0, 0, 127, 10, 0)
display.text('D:'+str(distanza)+' cm', 35, 0, 1)
if distanza<20: #Oggetto rilevato
led.value(1) #Accensione del led
if abs(distanza-distanza_prec)<0.9: #Stabilizziamo le piccole variazioni
distanza=distanza_prec
#Mappiamo la distanza misurata sui pixel verticali del display
#impostando che:
#•1 cm equivale a 3 pixel
#•distanze >20 cm corrispondono al pixel 63
p_verticali=distanza*3 #Numero di pixel per la distanza misurata
y=round(63-p_verticali) #Calcolo della posizione sul display corrispondente
else: #Oggetto non rilevato
led.value(0) #Spegnimento del led
y=63
display.line(x, y_prec, x+1, y, 1) #Disegno della singola distanza
y_prec=y #Aggiornamento della posizione verticale precedente
x=x+1 #Avanzamento in orizzontale sul display
distanza_prec=distanza #Aggiornamento della distanza precedente
if x>=128: #Ritorno al primo pixel orizzontale del display
x=0
display.fill(0)
display.show()
sleep(0.5) #Piccola pausa per permettere lo spostamento del sensore