Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import time
- from machine import I2C, Pin
- from I2C_LCD import I2CLcd
- from Ultrasonic import *
- i2c = I2C(1, sda=Pin(6), scl=Pin(7), freq=400000)
- devices = i2c.scan()
- Trig = Pin(27, Pin.OUT, 0)
- Echo = Pin(26, Pin.IN, 0)
- Mode_1 = Pin(14, Pin.IN)
- soundVelocity = 250 # Vitesse du son en m/s
- lcd = I2CLcd(i2c, devices[0], 2, 16)
- # Fonction pour obtenir la distance
- def getDistance():
- Trig.value(1)
- time.sleep_us(10)
- Trig.value(0)
- while not Echo.value():
- pass
- pingStart = time.ticks_us()
- while Echo.value():
- pass
- pingStop = time.ticks_us()
- distanceTime = time.ticks_diff(pingStop, pingStart) // 2
- distance = int(soundVelocity * distanceTime // 1000)
- return distance
- # Fonction pour gérer la barre de chargement
- def Barre_progression(duration_ms, elapsed_ms, length=7):
- filled_length = int((elapsed_ms / duration_ms) * length)
- return "[" + "✅" * filled_length + " " * (length - filled_length) + "]"
- def Mode_Normal():
- print("##########################-Mode 1 : NORMAL-##########################")
- base = None # Variable pour stocker la base (en mm)
- distance_stable = None
- stable_start_time = None
- try:
- if devices:
- lcd = I2CLcd(i2c, devices[0], 2, 16)
- while True:
- current_distance = getDistance()
- lcd.clear()
- print("distance:", current_distance, "mm")
- lcd.putstr("Distance :")
- lcd.move_to(0, 1)
- lcd.putstr(f"{current_distance} mm ")
- # Si une base n'est pas encore enregistrée
- if base is None:
- # Vérifier la stabilité de la distance
- if distance_stable == current_distance:
- # Vérifier la durée de stabilité
- if stable_start_time is None:
- stable_start_time = time.ticks_ms()
- duree = time.ticks_diff(time.ticks_ms(), stable_start_time)
- # Mettre à jour l'écran LCD avec la barre de chargement
- lcd.clear()
- print("distance:", current_distance, "mm")
- lcd.putstr("Distance :")
- lcd.move_to(0, 1)
- lcd.putstr(f"{current_distance} mm ")
- progress_bar = Barre_progression(2000, duree)
- lcd.putstr(progress_bar)
- # Si la distance reste stable pendant 2 seconde
- if duree >= 2000:
- base = current_distance # Enregistrer la base
- lcd.clear()
- lcd.putstr("Base fixee !")
- print("##########################-BASE FIXEE !-##########################")
- time.sleep(2)
- else:
- # Réinitialiser si la distance change
- distance_stable = current_distance
- stable_start_time = None
- else:
- # Afficher le flanchement : base - distances
- lcd.clear()
- lcd.putstr("Fléche :")
- lcd.move_to(0, 1)
- flanchement = base - current_distance
- lcd.putstr(f"{flanchement} mm")
- print("flanchement:", flanchement, "mm")
- if flanchement <= -25 or flanchement >= 2000:
- lcd.clear()
- print("flanchement:", flanchement, "mm" + "\n\nVALEUR TROP BASSE/TROP HAUTE, veuillez verifier le capteur/sa fixation/Le cablage et le recalibrer !")
- lcd.move_to(0, 0)
- lcd.putstr("Mal fixe")
- time.sleep(1)
- lcd.clear()
- lcd.putstr("Veuillez")
- lcd.move_to(0, 1)
- lcd.putstr("Recalibrer !")
- time.sleep(3)
- while True :
- lcd.clear()
- lcd.move_to(0, 0)
- lcd.putstr("Debranchez et")
- lcd.move_to(0, 1)
- lcd.putstr("Rebranchez")
- time.sleep(1.5)
- lcd.clear()
- lcd.move_to(0, 0)
- lcd.putstr("Ou appuyez sur le")
- lcd.move_to(0, 1)
- lcd.putstr("Bouton Rouge !")
- time.sleep(2)
- if Mode_1.value() == 1: #Bah sinon Mode 2 : Juste distance entre capteur et la base
- lcd.clear()
- lcd.putstr("Mode :")
- lcd.move_to(0, 1)
- lcd.putstr("Capteur [2]")
- time.sleep(2)
- Mode_Captation_Seul()
- time.sleep_ms(250) # Pause entre les mesures
- else:
- print("Pas d'addresse trouvé :/")
- except Exception as e:
- print("Erreur mode Normal :", e)
- def Mode_Captation_Seul():
- print("##########################-Mode 2 : Distance Only-##########################")
- while True :
- current_distance = getDistance()
- lcd.clear()
- lcd.putstr("Distance :")
- lcd.move_to(0, 1)
- lcd.putstr(f"{current_distance} mm ")
- print("distance:", current_distance, "mm")
- if Mode_1.value() == 0: #Mode 1 actif donc mode normal : Prendre distance, mettre une base, puis flenchage
- lcd.clear()
- lcd.putstr("Mode :")
- lcd.move_to(0, 1)
- lcd.putstr("Normal [1]")
- time.sleep(2)
- Mode_Normal()
- time.sleep_ms(200)
- if Mode_1.value() == 0: #Mode 1 actif donc mode normal : Prendre distance, mettre une base, puis flenchage
- lcd.clear()
- lcd.putstr("Mode :")
- lcd.move_to(0, 1)
- lcd.putstr("Normal [1]")
- time.sleep(2)
- Mode_Normal()
- if Mode_1.value() == 1: #Bah sinon Mode 2 : Juste distance entre capteur et la base
- lcd.clear()
- lcd.putstr("Mode :")
- lcd.move_to(0, 1)
- lcd.putstr("Capteur [2]")
- time.sleep(2)
- Mode_Captation_Seul()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement