Nota

Ciao, benvenuto nella Community di SunFounder per gli appassionati di Raspberry Pi, Arduino ed ESP32 su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme a tanti altri appassionati.

Perché Unirsi a Noi?

  • Supporto Esperto: Risolvi problemi post-vendita e affronta le sfide tecniche con il supporto della nostra community e del nostro team.

  • Impara e Condividi: Scambia consigli e tutorial per migliorare le tue abilità.

  • Anteprime Esclusive: Ottieni accesso anticipato alle nuove presentazioni di prodotti e alle anteprime.

  • Sconti Esclusivi: Approfitta di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni e Concorsi Festivi: Partecipa a giveaway e promozioni speciali durante le festività.

👉 Pronto a esplorare e creare con noi? Clicca su [here] e unisciti oggi stesso!

5. Arresto di Tutte le Azioni

Dopo i capitoli precedenti, avrai notato che il controllo dei servo di PiDog è suddiviso in tre thread distinti. Questo consente alla testa e al corpo di PiDog di muoversi simultaneamente, anche con due linee di codice separate.

Di seguito sono elencate alcune funzioni che operano sui tre thread dei servo:

Pidog.wait_all_done()

Attende che tutte le azioni presenti nei buffer delle gambe, della testa e della coda siano completate.

Pidog.body_stop()

Ferma tutte le azioni di gambe, testa e coda.

Pidog.stop_and_lie()

Ferma tutte le azioni di gambe, testa e coda e ripristina la posizione in «lie».

Pidog.close()

Ferma tutte le azioni, ripristina la posizione in «lie» e chiude tutti i thread. Di solito viene usato per terminare un programma.

Ecco alcuni esempi di utilizzo comune:

from pidog import Pidog
import time

my_dog = Pidog()

try:
    # preparazione push-up
    my_dog.legs_move([[45, 35, -45, -35, 80, 70, -80, -70]], speed=30)
    my_dog.head_move([[0, 0, 0]], pitch_comp=-10, speed=80)
    my_dog.wait_all_done() # attende che tutte le azioni siano completate
    time.sleep(0.5)

    # push-up
    leg_pushup_action = [
        [90, -30, -90, 30, 80, 70, -80, -70],
        [45, 35, -45, -35, 80, 70, -80, -70],
    ]
    head_pushup_action = [
        [0, 0, -30],
        [0, 0, 20],
    ]

    # riempi i buffer delle azioni
    for _ in range(50):
        my_dog.legs_move(leg_pushup_action, immediately=False, speed=50)
        my_dog.head_move(head_pushup_action, pitch_comp=-10, immediately=False, speed=50)

    # mostra la lunghezza del buffer
    print(f"legs buffer length (start): {len(my_dog.legs_action_buffer)}")

    # mantieni per 5 secondi e mostra la lunghezza del buffer
    time.sleep(5)
    print(f"legs buffer length (5s): {len(my_dog.legs_action_buffer)}")

    # ferma le azioni e mostra la lunghezza del buffer
    my_dog.stop_and_lie()
    print(f"legs buffer length (stop): {len(my_dog.legs_action_buffer)}")

except KeyboardInterrupt:
    pass
except Exception as e:
    print(f"\033[31mERROR: {e}\033[m")
finally:
    print("closing ...")
    my_dog.close() # chiude tutti i thread dei servo