Note

Bonjour, bienvenue dans la communauté SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts sur Facebook ! Plongez plus profondément dans l’univers du Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.

Pourquoi nous rejoindre ?

  • Support d’experts : Résolvez les problèmes après-vente et les défis techniques avec l’aide de notre communauté et de notre équipe.

  • Apprendre & Partager : Échangez des astuces et des tutoriels pour améliorer vos compétences.

  • Aperçus exclusifs : Bénéficiez d’un accès anticipé aux annonces de nouveaux produits et aux avant-premières.

  • Réductions spéciales : Profitez de réductions exclusives sur nos nouveaux produits.

  • Promotions festives et concours : Participez à des concours et à des promotions spéciales pendant les fêtes.

👉 Prêt à explorer et à créer avec nous ? Cliquez sur [ici] et rejoignez-nous dès aujourd’hui !

5. Arrêter toutes les actions

Après les chapitres précédents, vous avez peut-être remarqué que le contrôle des servomoteurs de PiDog est divisé en trois threads. Cela permet à la tête et au corps de PiDog de bouger simultanément, même en utilisant seulement deux lignes de code.

Voici quelques fonctions qui gèrent ces trois threads de servomoteurs :

Pidog.wait_all_done()

Attend que toutes les actions dans les buffers des jambes, de la tête et de la queue soient exécutées.

Pidog.body_stop()

Arrête toutes les actions des jambes, de la tête et de la queue.

Pidog.stop_and_lie()

Arrête toutes les actions des jambes, de la tête et de la queue, puis remet le robot en position « couché ».

Pidog.close()

Arrête toutes les actions, remet en position « couché » et ferme tous les threads, généralement utilisé pour quitter un programme.

Voici quelques exemples d’utilisation courants :

from pidog import Pidog
import time

my_dog = Pidog()

try:
    # préparation pour les pompes
    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() # attendre la fin de toutes les actions
    time.sleep(0.5)

    # pompes
    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],
    ]

    # remplir les buffers d'actions
    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)

    # afficher la longueur des buffers
    print(f"legs buffer length (start): {len(my_dog.legs_action_buffer)}")

    # maintenir pendant 5 secondes et afficher la longueur des buffers
    time.sleep(5)
    print(f"legs buffer length (5s): {len(my_dog.legs_action_buffer)}")

    # arrêter les actions et afficher la longueur des buffers
    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() # fermer tous les threads des servomoteurs