Advertisement
Lumino1109

Pont IT cléche Code V1.5

Jan 25th, 2025
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.52 KB | Science | 0 0
  1. import time
  2. from machine import I2C, Pin
  3. from I2C_LCD import I2CLcd
  4. from Ultrasonic import *
  5.  
  6. i2c = I2C(1, sda=Pin(6), scl=Pin(7), freq=400000)
  7. devices = i2c.scan()
  8.  
  9. Trig = Pin(27, Pin.OUT, 0)
  10. Echo = Pin(26, Pin.IN, 0)
  11. Mode_1 = Pin(14, Pin.IN)
  12.  
  13.  
  14. soundVelocity = 250  # Vitesse du son en m/s
  15.  
  16. lcd = I2CLcd(i2c, devices[0], 2, 16)
  17.  
  18.  
  19. # Fonction pour obtenir la distance
  20. def getDistance():
  21.     Trig.value(1)
  22.     time.sleep_us(10)
  23.     Trig.value(0)
  24.     while not Echo.value():
  25.         pass
  26.     pingStart = time.ticks_us()
  27.     while Echo.value():
  28.         pass
  29.     pingStop = time.ticks_us()
  30.     distanceTime = time.ticks_diff(pingStop, pingStart) // 2
  31.     distance = int(soundVelocity * distanceTime // 1000)
  32.     return distance
  33.  
  34. # Fonction pour gérer la barre de chargement
  35. def Barre_progression(duration_ms, elapsed_ms, length=7):
  36.     filled_length = int((elapsed_ms / duration_ms) * length)
  37.     return "[" + "✅" * filled_length + " " * (length - filled_length) + "]"
  38.  
  39. def Mode_Normal():
  40.     print("##########################-Mode 1 : NORMAL-##########################")
  41.     base = None          # Variable pour stocker la base (en mm)
  42.     distance_stable = None
  43.     stable_start_time = None
  44.     try:
  45.         if devices:
  46.             lcd = I2CLcd(i2c, devices[0], 2, 16)
  47.             while True:
  48.                 current_distance = getDistance()
  49.                 lcd.clear()
  50.                 print("distance:", current_distance, "mm")
  51.                 lcd.putstr("Distance :")
  52.                 lcd.move_to(0, 1)
  53.                 lcd.putstr(f"{current_distance} mm ")
  54.                 # Si une base n'est pas encore enregistrée
  55.                 if base is None:
  56.                     # Vérifier la stabilité de la distance
  57.                     if distance_stable == current_distance:
  58.                         # Vérifier la durée de stabilité
  59.                         if stable_start_time is None:
  60.                             stable_start_time = time.ticks_ms()
  61.                    
  62.                         duree = time.ticks_diff(time.ticks_ms(), stable_start_time)
  63.                    
  64.                         # Mettre à jour l'écran LCD avec la barre de chargement
  65.                         lcd.clear()
  66.                         print("distance:", current_distance, "mm")
  67.                         lcd.putstr("Distance :")
  68.                         lcd.move_to(0, 1)
  69.                         lcd.putstr(f"{current_distance} mm ")
  70.                         progress_bar = Barre_progression(2000, duree)
  71.                         lcd.putstr(progress_bar)
  72.  
  73.                         # Si la distance reste stable pendant 2 seconde
  74.                         if duree >= 2000:
  75.                             base = current_distance  # Enregistrer la base
  76.                             lcd.clear()
  77.                             lcd.putstr("Base fixee !")
  78.                             print("##########################-BASE FIXEE !-##########################")
  79.                             time.sleep(2)
  80.                     else:
  81.                         # Réinitialiser si la distance change
  82.                         distance_stable = current_distance
  83.                         stable_start_time = None
  84.                 else:
  85.                     # Afficher le flanchement : base - distances
  86.                     lcd.clear()
  87.                     lcd.putstr("Fléche :")
  88.                     lcd.move_to(0, 1)
  89.                     flanchement = base - current_distance
  90.                     lcd.putstr(f"{flanchement} mm")
  91.                     print("flanchement:", flanchement, "mm")
  92.                     if flanchement <= -25 or flanchement >= 2000:
  93.                             lcd.clear()
  94.                             print("flanchement:", flanchement, "mm" + "\n\nVALEUR TROP BASSE/TROP HAUTE, veuillez verifier le capteur/sa fixation/Le cablage et le recalibrer !")
  95.                             lcd.move_to(0, 0)
  96.                             lcd.putstr("Mal fixe")
  97.                             time.sleep(1)
  98.                             lcd.clear()
  99.                             lcd.putstr("Veuillez")
  100.                             lcd.move_to(0, 1)
  101.                             lcd.putstr("Recalibrer !")
  102.                             time.sleep(3)
  103.                             while True :
  104.                                 lcd.clear()
  105.                                 lcd.move_to(0, 0)
  106.                                 lcd.putstr("Debranchez et")
  107.                                 lcd.move_to(0, 1)
  108.                                 lcd.putstr("Rebranchez")
  109.                                 time.sleep(1.5)
  110.                                 lcd.clear()
  111.                                 lcd.move_to(0, 0)
  112.                                 lcd.putstr("Ou appuyez sur le")
  113.                                 lcd.move_to(0, 1)
  114.                                 lcd.putstr("Bouton Rouge !")
  115.                                 time.sleep(2)
  116.                 if Mode_1.value() == 1: #Bah sinon Mode 2 : Juste distance entre capteur et la base
  117.                     lcd.clear()
  118.                     lcd.putstr("Mode :")
  119.                     lcd.move_to(0, 1)
  120.                     lcd.putstr("Capteur [2]")
  121.                     time.sleep(2)
  122.                     Mode_Captation_Seul()
  123.                 time.sleep_ms(250)  # Pause entre les mesures
  124.         else:
  125.             print("Pas d'addresse trouvé :/")
  126.     except Exception as e:
  127.         print("Erreur mode Normal :", e)
  128.  
  129.  
  130. def Mode_Captation_Seul():
  131.     print("##########################-Mode 2 : Distance Only-##########################")
  132.     while True :
  133.         current_distance = getDistance()
  134.         lcd.clear()
  135.         lcd.putstr("Distance :")
  136.         lcd.move_to(0, 1)
  137.         lcd.putstr(f"{current_distance} mm ")
  138.         print("distance:", current_distance, "mm")
  139.         if Mode_1.value() == 0: #Mode 1 actif donc mode normal : Prendre distance, mettre une base, puis flenchage
  140.             lcd.clear()
  141.             lcd.putstr("Mode :")
  142.             lcd.move_to(0, 1)
  143.             lcd.putstr("Normal [1]")
  144.             time.sleep(2)
  145.             Mode_Normal()
  146.         time.sleep_ms(200)
  147.  
  148.  
  149.  
  150. if Mode_1.value() == 0: #Mode 1 actif donc mode normal : Prendre distance, mettre une base, puis flenchage
  151.     lcd.clear()
  152.     lcd.putstr("Mode :")
  153.     lcd.move_to(0, 1)
  154.     lcd.putstr("Normal [1]")
  155.     time.sleep(2)
  156.     Mode_Normal()
  157. if Mode_1.value() == 1: #Bah sinon Mode 2 : Juste distance entre capteur et la base
  158.     lcd.clear()
  159.     lcd.putstr("Mode :")
  160.     lcd.move_to(0, 1)
  161.     lcd.putstr("Capteur [2]")
  162.     time.sleep(2)
  163.     Mode_Captation_Seul()
  164.  
Tags: it Pont A.Briand
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement