FLL/old/info_porte.py
2025-10-26 19:00:36 +01:00

78 lines
2.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# --- SCAN DELLE PORTE AF: CHE DISPOSITIVO C'È COLLEGATO? (fix senza p.name) ---
from pybricks.parameters import Port # costanti delle porte fisiche: A, B, C, D, E, F
from pybricks.pupdevices import (
ColorDistanceSensor, # sensore colore+distanza (SPIKE Essential / PUP combo)
ColorSensor, # sensore colore (SPIKE Prime)
ForceSensor, # sensore di forza/pulsante
Motor, # motori con encoder
UltrasonicSensor, # sensore ultrasuoni
)
from pybricks.tools import wait # piccole attese per non “martellare” il bus
# Mapping esplicito: da oggetto Port alla sua etichetta stringa
PORT_LABEL = {
Port.A: "A",
Port.B: "B",
Port.C: "C",
Port.D: "D",
Port.E: "E",
Port.F: "F",
}
def scan_ports() -> list[tuple[str, str]]:
"""
Ritorna una lista di coppie (porta, cosa_c'è).
Esempio: [("A","Motor"), ("B","vuota"), ...]
"""
# elenco delle porte esterne da scandire in ordine
ports: list[Port] = [Port.A, Port.B, Port.C, Port.D, Port.E, Port.F]
# accumulatore risultati (stringa etichetta porta, descrizione)
results: list[tuple[str, str]] = []
# analizza ogni porta
for p in ports:
descr: str = "-" # predefinito: niente collegato/riconosciuto
# prova come MOTORE (se fallisce, solleva OSError -> proviamo altro)
try:
_ = Motor(p)
descr = "Motor"
except OSError:
# prova come COLOR SENSOR “classico”
try:
_ = ColorSensor(p)
descr = "ColorSensor"
except OSError:
# prova come COLOR+DISTANCE (combo sensor)
try:
_ = ColorDistanceSensor(p)
descr = "ColorDistanceSensor"
except OSError:
# prova come ULTRASONIC
try:
_ = UltrasonicSensor(p)
descr = "UltrasonicSensor"
except OSError:
# prova come FORCE SENSOR
try:
_ = ForceSensor(p)
descr = "ForceSensor"
except OSError:
# nessun device riconosciuto: lasciamo "vuota"
pass
# aggiungi la riga risultato con etichetta porta (dal mapping) e descrizione
results.append((PORT_LABEL[p], descr))
# piccola pausa (facoltativa) per stabilità del bus
wait(5)
# ritorna la lista completa
return results
# --- Esempio d'uso minimale (stampa la lista) ---
print(scan_ports()) # otterrai qualcosa tipo: [('A','Motor'), ('B','vuota'), ...]