Advertisement
Lumino1109

Pont IT cléche Code Final

Mar 3rd, 2025 (edited)
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.36 KB | Science | 0 0
  1. import time
  2. from Ultrasonic import Ultrasonic
  3. from AfficheurLCD import AfficheurLCD
  4.  
  5. # Initialisation du capteur ultrasonique + Afficheur
  6. capteur = Ultrasonic(pin_ech=21, pin_trig=20)
  7. afficheur = AfficheurLCD (pin_SDA=8, pin_SCL=9)
  8.  
  9. # Fonction pour gérer la barre de chargement avec ramplissage sur le LCD
  10. def Barre_progression(duration_ms, elapsed_ms, length=7): # Ca taille est de 7 unités (à modifier selon la place restante)
  11.     filled_length = int((elapsed_ms / duration_ms) * length)
  12.     return "[" + "✅" * filled_length + " " * (length - filled_length) + "]"
  13.  
  14. def Mode_Normal(): #Fonction d'un mode normal (plus vraiment important, il fut surtout utilisé pour des tests)
  15.     afficheur.effacer_ecran()
  16.     print("##########################-Mode 1 : NORMAL-##########################") # Ceci s'affiche dans la console
  17.     afficheur.affiche_message("Mode 1")                                            # Ceci s'affiche sur l'écran LCD
  18.     base = 0                    # Variable pour stocker la base (en mm)
  19.     distance_stable = None      # Variable pour stocker une distance "stable" entre le capteur et le dessous du tablier
  20.     stable_start_time = None    # Variable pour stocker un temps qui va se démarrer pour l'attente de 2 secondes de stabilité
  21.    
  22.     while True:
  23.         current_distance = round(capteur.distance_en_mm()) #Obtenir la ditance en mm, arrondie sans virgule
  24.  
  25.         # Si une base n'est pas encore enregistrée
  26.         if base == 0:
  27.             # Vérifier la stabilité de la distance
  28.             if distance_stable == current_distance or distance_stable == current_distance + 1 or distance_stable == current_distance -1 :
  29.                 # Vérifier la durée de stabilité
  30.                 if stable_start_time is None:
  31.                     stable_start_time = time.ticks_ms() # Attribution d'une durée à la variable "stable_start_time"
  32.                    
  33.                 duree = time.ticks_diff(time.ticks_ms(), stable_start_time) # Calcul de la durée
  34.                    
  35.                 # Mettre à jour l'écran LCD avec la barre de chargement
  36.                 afficheur.effacer_ecran()
  37.                 print("distance:", current_distance, "mm") # Affichage de la ditance actuelle dans la console
  38.                
  39.                 afficheur.affiche_message("Distance :")                 #--|
  40.                 afficheur.positionner_curseur(0, 1)                     #  |
  41.                 afficheur.affiche_message(f"{current_distance} mm ")    #  |- Affichage de la ditance actuelle sur l'écran LCD.
  42.                 progress_bar = Barre_progression(2000, duree)           #  |
  43.                 afficheur.affiche_message(progress_bar)                 #--|
  44.  
  45.                 # Si la distance reste stable pendant 2 seconde
  46.                 if duree >= 2000:
  47.                     base = current_distance  # Enregistrer la base
  48.                     afficheur.effacer_ecran()
  49.                     afficheur.affiche_message("Base fixee !")                                   # On l'affiche sur à la fois sur le LCD et la console
  50.                     print("##########################-BASE FIXEE !-##########################") #
  51.  
  52.                     time.sleep(2)
  53.             else:
  54.             # Réinitialiser toutes les variables si la distance change
  55.                 distance_stable = current_distance
  56.                 stable_start_time = None
  57.         else: #Si la base est fixée, on part sur la flèche
  58.             time.sleep_ms(250)
  59.  
  60.            
  61.             fleche_Arron = base - round(capteur.distance_en_mm()) # Flèche arrondie au mm prêt
  62.             fleche = base - capteur.distance_en_mm()              # Flèche en distance exacte
  63.                 # Afficher le fleche : base - distances
  64.  
  65.             afficheur.effacer_ecran()                       #--|
  66.             afficheur.affiche_message("fleche :")           #  | Affichage de la flèche (arrondie) sur l'écran LCD
  67.             afficheur.positionner_curseur(0, 1)             #  |
  68.             afficheur.affiche_message(f"{fleche_Arron} mm") #--|
  69.  
  70.             print(" |-> Fleche:", fleche, "mm")             #--|Affichage de la flèche (taille exacte) ET de la distance (pour le débug si besoins) sur la console
  71.             print(" |-> Distance:", current_distance, "mm") #--|
  72.  
  73.             if fleche_Arron <= -25 or fleche_Arron >= 300: # Si la flèche arrondie est dessous/égale à 2.5 cm ou est au dessus/égale à 30 cm
  74.                    
  75.                     # On indique sur la console et sur l'écran LCD qu'il y a un soucis de valeur de flèche. Donc il faut recalibrer ou ajuster les paramètres
  76.                                        
  77.                     afficheur.effacer_ecran()
  78.                     print("fleche:", fleche, "mm" + "\n\nVALEUR TROP BASSE/TROP HAUTE, veuillez verifier le capteur/sa fixation/Le cablage et le recalibrer !")
  79.                     afficheur.positionner_curseur(0, 0)
  80.                     afficheur.affiche_message("Mal fixe")
  81.                     time.sleep(1)
  82.                     afficheur.effacer_ecran()
  83.                     afficheur.affiche_message("Veuillez")
  84.                     afficheur.positionner_curseur(0, 1)
  85.                     afficheur.affiche_message("Recalibrer !")
  86.                     time.sleep(3)
  87.  
  88.  
  89. Mode_Normal() # Pour démarrer le programme / La fonction du mode "Normal". Utilisation pour des anciens tests mais on le conserve au cas où.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement