[REVIEW] Buggy #42124

Vos avis et impressions sur les sets.
Zebulon
Level 6
Level 6
 
Messages: 429
Âge: 49 ans

Messagepar Zebulon » Lun Jan 10, 2022 12:17 am

tamoil a écrit:Bonjour à tous, mon fils a reçu ce buggy pour noel
Pour le montage pas de soucis, mais nous n'arrivons pas à synchroniser les roues du buggy correctement, celles-ci se positionnent tout le temps vers la droite.
Est-ce que quelqu'un a déjà rencontré ce genre de problème ? Si oui comment avez vous fait pour le résoudre ?
Merci


Bon j'ai terminé le montage ce soir et tout a fonctionné du premier coup. Soit il s'agit d'un défaut sur le moteur de la direction soit le montage est incorrect.

Sinon je suis quand même bien surpris par la vitesse de ce petit buggy... pour un RC Lego s'entend. Le contrôle via smartphone est effectivement naze pour qui est habitué à une radio modélisme mais on a quand même deux modes possibles (une croix directionnelle et une "pédale" de frein qui fonctionne vraiment bien, ou bien direction et accélération séparés, mais la direction main gauche... :/ ).

Du coup Celeri ça m'intéresse bien de pouvoir utiliser une télécommande physique. C'est la 88010 c'est ça ? Bon visiblement il ne faut pas recompiler un noyau linux pour que ça fonctionne mais tout de même il faut se poser un peu pour comprendre tout ça de A à Z et les messages de higgins91 ne me rassurent pas trop... je n'ai pas envie d'y passer trop de soirées. :)

Zebulon
Level 6
Level 6
 
Messages: 429
Âge: 49 ans

Messagepar Zebulon » Mer Jan 26, 2022 12:00 pm

Mister Céleri je viens de recevoir ma télécommande 88010. Je vais donc pouvoir tester ça avec le buggy. Mais je voulais savoir, existe-t-il une documentation expliquant le fonctionnement des hubs et de la télécommande avec notamment les procédures d'appairage, de reset du firmware en cas de problème, etc. Je n'ai rien trouvé chez Lego.

Avatar de l’utilisateur
Celeri
Level 7
Level 7
 
Messages: 583
Localisation: Paris
Âge: 44 ans

Messagepar Celeri » Mer Jan 26, 2022 12:47 pm

Il ne faut pas chercher ce genre d'infos chez Lego, non, c'est pas leur style de vouloir être utile à des bidouilleurs :fume:

Je confirme que ma remote est bien la 88010. Mon point de départ a été la vidéo de RacingBrick sur le sujet : https://racingbrick.com/tag/pybricks/. Dedans, il détaille comment on se sert de PyBricks (attention à bien utiliser la version beta ici : https://beta.pybricks.com/), ce qui globalement se passe ainsi :
1. Ouvrir PyBricks sur son navigateur : perso l'appairage BlueTooth n'a marché qu'avec Chrome
2. Allumer le hub en maintenant le bouton appuyé jusqu'à ce que le voyant clignote en violet : surtout ne pas relâcher le bouton !
3. Cliquer sur le bouton "install PyBricks software" : le hub devrait s'afficher dans la liste en tant que "LEGO bootloader" → cliquer sur "associer" (on peut alors relâcher le bouton)
4. L'installation prend environ une minute, après quoi on clique sur l'icône Bluetooth juste à côté et doit alors y voir son hub appelé "Pybricks Hub" → cliquer sur "associer"
5. Le voyant du hub doit alors être bleu fixe : on peut dès lors écrire son programme en Python et cliquer sur la touche "play" pour le tester : il faut allumer la télécommande juste après, car au bout d'un moment sans détecter de remote, le programme s'arrête ("timeout")

Une fois qu'on est satisfait de son programme, on peut alors l'associer "en dur" dans le firmware, de manière à ce qu'il soit chargé dès le démarrage du hub. Pour ça, il faut cliquer sur l'icône de réglages en haut à droite et cocher "Include current program" (on peut aussi affecter un nom à son hub juste en-dessous), déconnecter le hub (via le bouton "Bluetooth") et l'éteindre, puis reprendre les étapes 2 à 4. Une fois que c'est fait, on n'a plus besoin de l'ordi et on peut jouer en faisant juste ça : bouton du hub, puis bouton de la remote, puis enfin bouton du hub à nouveau.

Pour ceux qui veulent essayer, voilà le programme auquel je suis arrivé (basé sur la communauté + quelques customisations notamment sur les boutons rouges) :

Code: Tout sélectionner
from pybricks.hubs import TechnicHub
from pybricks.pupdevices import Motor, Remote
from pybricks.parameters import Port, Direction, Stop, Button, Color
from pybricks.tools import wait

# Initialize the hub
hub = TechnicHub()

# Initialize the motors
steer = Motor(Port.B)
front = Motor(Port.A, Direction.COUNTERCLOCKWISE)

# Connect to the remote
remote = Remote()

# Initialize the hub light
hub_animation_running = False
hub_color = 1

# Read the current settings
old_kp, old_ki, old_kd, _, _ = steer.control.pid()

# Set new values
steer.control.pid(kp=old_kp*4, kd=old_kd*0.4)

# Find the steering endpoint on the left and right.
# The middle is in between
left_end = steer.run_until_stalled(-200, then=Stop.HOLD)
right_end = steer.run_until_stalled(200, then=Stop.HOLD)

# We are now at the right. Reset this angle to be half the difference.
# That puts zero in the middle.
steer.reset_angle((right_end - left_end)/2)
steer.run_target(speed=200, target_angle=0, wait=False)

# Set steering angle for the buggy
steer_angle = (((right_end - left_end)/2)-5)
print('steer angle:',steer_angle)

# Now we can start driving!
hub.light.on(Color.GREEN)
while True:
    # Check which buttons are pressed.
    pressed = remote.buttons.pressed()

    # Choose the steer angle based on the right controls.

    if Button.RIGHT_PLUS in pressed:
        steer.run_target(1400, steer_angle, Stop.HOLD, False)
    elif Button.RIGHT_MINUS in pressed:
        steer.run_target(1400, -steer_angle, Stop.HOLD, False)
    else:
        steer.track_target(0)

    if Button.RIGHT not in pressed and hub_animation_running:
        hub.light.on(Color.GREEN)
        hub_animation_running = False

    if Button.LEFT in pressed:
        hub.light.on(Color.RED)
        hub_animation_running = False
    elif Button.RIGHT in pressed and not hub_animation_running:
        hub.light.animate([Color.RED, Color.ORANGE, Color.YELLOW, Color.GREEN, Color.CYAN, Color.BLUE, Color.VIOLET, Color.MAGENTA], interval=100)
        hub_animation_running = True

    # Choose the drive speed based on the left controls.
    drive_speed = 0
    if Button.LEFT_PLUS in pressed:
        drive_speed += 100
    if Button.LEFT_MINUS in pressed:
        drive_speed -= 100

    # Apply the selected speed.
    front.dc(drive_speed)

    # Wait.
    wait(10)
Rien n'est plus semblable à l'identique que ce qui est pareil à la même chose. (Pierre Dac)

Zebulon
Level 6
Level 6
 
Messages: 429
Âge: 49 ans

Messagepar Zebulon » Mer Jan 26, 2022 2:54 pm

Merci beaucoup pour toutes ces précieuses informations et pour ton programme perso qui me plaît beaucoup plus que celui d'origine. J'ai hâte d'essayer tout ça. ;)

Zebulon
Level 6
Level 6
 
Messages: 429
Âge: 49 ans

Messagepar Zebulon » Mer Jan 26, 2022 11:31 pm

Hôôôôô Master Celeri ! Respect éternel. :resp:

Mille et un mercis pour ton aide. Ca y est mon buggy répond désormais docilement à ma télécommande Lego. Exit le smartphone. Enfin les vrais sensations du RC ! :col:

En plus je viens de réaliser le potentiel créatif qui s'ouvre à moi... tout ça sans smartphone et en pissant du vrai code... bon ok il n'y a pas de point-virgule à la fin des lignes mais c'est sûrement un progrès. ;)

Non vraiment ça m'a illuminé ma fin de soirée, encore merci (je vais au sous-sol 5 minutes pour faire chauffer la gomme). :bougeotte:

Avatar de l’utilisateur
Celeri
Level 7
Level 7
 
Messages: 583
Localisation: Paris
Âge: 44 ans

Messagepar Celeri » Mer Jan 26, 2022 11:50 pm

Je t'en prie ! :)

Moi c'est pareil, je n'arrive pas à me faire au pilotage d'une voiture RC par smartphone... ne pas avoir le feedback des boutons et devoir regarder son écran tout le temps, c'est juste pas possible. C'est sans doute parce que j'ai eu quelques voitures RC étant plus jeune (aaah, la Grasshopper de Tamiya, que de bons souvenirs !) mais aussi peut-être parce que je suis un vétéran du jeu vidéo, et donc J'AIME LES BOUTONS, niah.

Sinon j'avais aussi un peu bidouillé un autre programme pour la 42124 : je ne sais plus trop d'où il vient à la base, mais il est intéressant car la gestion des boutons est différente (plus verbeuse mais aussi plus lisible). Il m'a aussi permis de me faire la main sur la customisation du voyant du hub. Et un autre truc sympa, c'est le bouton rouge de gauche qui agit selon le contexte :
- si on appuie dessus en même temps que la marche avant ou la marche arrière, alors il pousse la puissance au maximum
- sinon, il agit comme un frein

Code: Tout sélectionner
# Hub import
from pybricks.hubs import TechnicHub

# Remote import
from pybricks.pupdevices import Remote
from pybricks.parameters import Button
from pybricks.parameters import Color

# Motor import
from pybricks.pupdevices import Motor
from pybricks.parameters import Port
from pybricks.parameters import Stop
from pybricks.parameters import Direction

# Tool import
from pybricks.tools import wait

# Initialize HUB
#print(Color.GREEN.h, Color.GREEN.s, Color.GREEN.v) # 120 100 100
#print(Color.YELLOW.h, Color.YELLOW.s, Color.YELLOW.v) #60 100 100
#print(Color.ORANGE.h, Color.ORANGE.s, Color.ORANGE.v) #30 100 100
#print(Color.RED.h, Color.RED.s, Color.RED.v) #0 100 100
durationList = [75, 75, 75, 75, 75, 1000]

hub = TechnicHub()
hub.light.blink(Color.WHITE, durationList)

print("Prout 1")

# Connect to the remote
remote = Remote()
remote.light.on(Color.YELLOW)
hub.light.on(Color.YELLOW)

print("Prout 2")

# Initialize a motor on port A and B
steeringMotor = Motor(Port.B)
driveMotor = Motor(Port.A)
maxDriveSpeed = 1250 # experimental, TODO: add autotune

# Set parameters to steering motor to be more responsive
print(steeringMotor.control.target_tolerances()) # Read default value
steeringMotor.control.target_tolerances(5, 1) # Default 50, 10
print(steeringMotor.control.limits()) # Read default value
steeringMotor.control.limits(1000, 10000, 520) # Default: 1000, 1500, 100, 260
print(steeringMotor.control.pid()) # Read default value
steeringMotor.control.pid(40000, 600, 2000, 450, 50) # Default: 4000, 600, 1000, 45, 5

print("Prout 3")

# Center steering motor
steringSpeed = 100 # Centering speed
angleRight = steeringMotor.run_until_stalled(-steringSpeed, duty_limit=60, then=Stop.HOLD)
angleLeft = steeringMotor.run_until_stalled(steringSpeed, duty_limit=60, then=Stop.HOLD)
angleZero = (angleLeft + angleRight) / 2
steeringMotor.run_target(steringSpeed, angleZero, then=Stop.HOLD , wait=False)
steringSpeed = 250 # Default steering speed
wait(1000)

# Define power for drive motor
actualSpeed = 0
colorHueValue = 120
colorSpeed = Color(h=colorHueValue, s=100, v=100) # GREEN
maxPower = 100
idlePower = 80

powerState = 0 #0: null, 1: break, 2: maxPower, 3: coast
powerDirection = 0
oldPowerState = 0
oldPowerDirection = 0

# Ready!
remote.light.on(Color.GREEN)
hub.light.on(Color.GREEN)

# Buttons status
statusLeft = False;
statusRight = False;
statusLeftPlus = False;
statusLeftMinus = False;
statusRightPlus = False;
statusRightMinus = False;

oldStatusLeft = False;
oldStatusRight = False;
oldStatusLeftPlus = False;
oldStatusLeftMinus = False;
oldStatusRightPlus = False;
oldStatusRightMinus = False;

while True:
    # Get actual speed and calculate led color to a smooth change between them
    actualSpeed = abs(driveMotor.speed())

    if actualSpeed > maxDriveSpeed:
        maxDriveSpeed = actualSpeed

    colorHueValue = 120 - 120 * actualSpeed / (maxDriveSpeed - 10)
   
    if colorHueValue < 0:
        colorHueValue = 0

    if colorHueValue > 120:
        colorHueValue = 120

    # Check which buttons are pressed
    pressed = remote.buttons.pressed()

    if Button.LEFT in pressed:
        statusLeft = True
    else:
        statusLeft = False
    if Button.LEFT_PLUS in pressed:
        statusLeftPlus = True
    else:
        statusLeftPlus = False
    if Button.LEFT_MINUS in pressed:
        statusLeftMinus = True
    else:
        statusLeftMinus = False

    if Button.RIGHT in pressed:
        statusRight = True
    else:
        statusRight = False
    if Button.RIGHT_PLUS in pressed:
        statusRightPlus = True
    else:
        statusRightPlus = False
    if Button.RIGHT_MINUS in pressed:
        statusRightMinus = True
    else:
        statusRightMinus = False

    # Steering commands only if there is a button change
    if statusRight != oldStatusRight:
        if statusRight == True:
            # print("You pressed the Right button!")
            hub.light.animate([Color.RED, Color.ORANGE, Color.YELLOW, Color.GREEN, Color.CYAN, Color.BLUE, Color.VIOLET, Color.MAGENTA], interval=100)
        else:
            #print("You released the Right button!")
            hub.light.on(colorSpeed)

    if statusRightPlus != oldStatusRightPlus:
        if statusRightPlus == True:
            #print("You pressed the Right+ button!")
            steeringMotor.run_target(steringSpeed, angleLeft + 1, then=Stop.HOLD, wait=False)
        else:
            #print("You released the Right+ button!")
            steeringMotor.run_target(steringSpeed, angleZero, then=Stop.HOLD, wait=False)

    if statusRightMinus != oldStatusRightMinus:
        if statusRightMinus == True:
            steeringMotor.run_target(steringSpeed, angleRight - 1, then=Stop.HOLD, wait=False)
            #print("You pressed the Right- button!")
        else:
            #print("You released the Right- button!")
            steeringMotor.run_target(steringSpeed, angleZero, then=Stop.HOLD, wait=False)

    # Power commands
    if statusLeft != oldStatusLeft:
        if statusLeft == True:
            # print("You pressed the Left button!")
            powerState += 1
        else:
            #print("You released the Left button!")
            powerState -= 1

    if statusLeftPlus != oldStatusLeftPlus:
        if statusLeftPlus == True:
            #print("You pressed the Left+ button!")
            powerState += 1
            powerDirection = -1
        else:
            #print("You released the Left+ button!")
            powerState -= 1
            powerDirection = 0

    if statusLeftMinus != oldStatusLeftMinus:
        if statusLeftMinus == True:
            #print("You pressed the Left- button!")
            powerState += 1
            powerDirection = 1
        else:
            #print("You released the Left- button!")
            powerState -= 1
            powerDirection = 0

    if powerState != oldPowerState or powerDirection != oldPowerDirection:
        if powerDirection == 0:
            if powerState == 0:
                driveMotor.stop()
                #print("*** MOTOR COAST ***")
            else:
                driveMotor.brake()
                #print("*** MOTOR BRAKE ***")
        else: # power direction is not zero
            if powerState == 1:
                driveMotor.dc(powerDirection * idlePower)
                #print("*** MOTOR IDLE ***")
            elif powerState == 2:
                driveMotor.dc(powerDirection * maxPower)
                #print("*** MOTOR MAX ***")

    if statusRight == False:
        if powerState == 1 and powerDirection == 0: # BRAKE
            colorSpeed = Color(359, s=100, v=25)
            hub.light.on(colorSpeed)
            remote.light.on(colorSpeed)
        else:
            colorSpeed = Color(h=colorHueValue, s=100, v=100)
            hub.light.on(colorSpeed)
            remote.light.on(colorSpeed)

    # Update status
    oldStatusLeft = statusLeft
    oldStatusLeftPlus = statusLeftPlus
    oldStatusLeftMinus = statusLeftMinus
    oldStatusRight = statusRight
    oldStatusRightPlus = statusRightPlus
    oldStatusRightMinus = statusRightMinus
    oldPowerState = powerState
    oldPowerDirection = powerDirection
Rien n'est plus semblable à l'identique que ce qui est pareil à la même chose. (Pierre Dac)

Zebulon
Level 6
Level 6
 
Messages: 429
Âge: 49 ans

Messagepar Zebulon » Mer Jan 26, 2022 11:59 pm

Je prends aussi merci ! J'étudierai ça à tête reposée car la journée a été longue. :D

J'ai aussi le 42099 en magasin. Il va aussi falloir que je lui écrive un programme adhoc pour utiliser la télécommande.

Tops
Level 3
Level 3
 
Messages: 45

Messagepar Tops » Ven Jan 28, 2022 10:29 pm

Salut à tous
j'ai passé la journée à fouiller le premier code proposé par Celeri, merci toi.
Effectivement, la doc est très bien faite et les fonction offre de multiples possibilité, ça ouvre pleins d'opportunités.
j'ai essayer de noter en français les commentaires de ce que j'ai compris, pour aider les plus maladroits que moi, à s'y retrouver.
mais je n'ai pas tout compris, il y a des formulations qui mériterais d’être éclaircies. voir du ménage à faire.

Il y a 2 questions que j'ai mis dans les commentaires du code, que je n'ai pas résolus, je suis preneur de vos éventuelles réponses.

Bien que j'arrive à me connecter sur le hub avec le tel, impossible avec l'ordi portable Windows 10 hp.
de plus je n'ai pas encore de télécommande sous la main.
Normalement, je n'ai fait que rajouter des commentaires, mais il serais bon que quelqu'un confirme que le code marche aussi bien que l'original.
Bonne lecture.
Si vous faite des remarques dans les 4 ou 5 jours qui suivent, je pourrais éditer le code pour y mettre vos suggestions.

Code: Tout sélectionner
# - Import d’objets depuis les bibliothèques

from pybricks.hubs import TechnicHub
from pybricks.pupdevices import Motor, Remote
from pybricks.parameters import Port, Direction, Stop, Button, Color
from pybricks.tools import wait

# Initialize the hub
# - création d’une instance « hub » de la classe d’objet « TechnicHub() »
hub = TechnicHub()

# Initialize the motors
# - création d’une instance « steer » de l’objet « Motor() » pour ‘diriger’
steer = Motor(Port.B)
# - création d’une instance « front » de l’objet « Motor() » pour ‘Avancer’
front = Motor(Port.A, Direction.COUNTERCLOCKWISE)

# Connect to the remote
# - création d’une instance « remote » de l’objet « Remote() » pour gere la ‘télécommande’
remote = Remote()

# Initialize the hub light
# - création d’une variable type Boleen(0 ou 1) ( False ou true ) « hub_animation_running » et l’initialise sur la valeur « False »
hub_animation_running = False
# - création d’une variable  « hub_color » initialise sur la valleur « 1 »
hub_color = 1

# Read the current settings / Lecture des paramètres actuel
# - Création de trois variables pour sauvegarder les paramètres lues dans les propriétés de l’instance ‘steer’ de l’objet ‘Motor’
# - En faisant une recherche avec ‘control.pid()’ dans la documentation , on trouve :
# - kp (int)- Constante de contrôle de position proportionnelle. C'est le couple de rétroaction par degré d'erreur : µNm/deg.
# - ki (int)-  Constante de contrôle de position intégrale. Il s'agit du couple de rétroaction par degré d'erreur cumulé : µNm/(deg s).
# - kd (int)- Constante de contrôle de position dérivée (ou de vitesse proportionnelle). C'est le couple de retour par unité de vitesse : µNm/(deg/s).

old_kp, old_ki, old_kd, _, _ = steer.control.pid()

# Set new values
# - On attribut les nouvelles valeurs au moteur de direction.
# - ! On multiplie par 4 la force du couple, et on divise par 2,5 le cumul de résistance par sec avant coupure !
# - ! cela permet de tester la buté franchement, sans forcer trop longtemps !
steer.control.pid(kp=old_kp*4, kd=old_kd*0.4)

# Find the steering endpoint on the left and right.
# The middle is in between
# - Recherche du point de butté de direction à gauche et à droite. Le milieu est entre
# - On défini 2 variables ‘ left_end’ et ‘ right_end ‘ qui prennet le retour de la fonction ‘.run_until_stalled’ en degré.
# - Une recherche dans la doc de ‘ .run_until_stalled() ‘ nous informe quelle prends 3 paramètres et retourne la position en degré de rotation.
# - ‘speed’ (vitesse de rotation : deg/s) ; puis ‘Stop’ – Que faire après un arrêt ; puis ‘duty_limit’ (pourcentage : %)
# - Limite du cycle de service pendant cette commande.
# - Ceci est utile pour éviter d'appliquer le couple moteur complet à un mécanisme à engrenage ou à levier.
# - Retour de fonction ‘.run_until_stalled()’ : Angle auquel le moteur cale.
# - a voir aussi dans la documentation la classe: class Stop
# - Stop.HOLD lui demande de garder la position.
left_end = steer.run_until_stalled(-200, then=Stop.HOLD)
right_end = steer.run_until_stalled(200, then=Stop.HOLD)

# We are now at the right. Reset this angle to be half the difference.
# That puts zero in the middle.
# - Nous sommes maintenant à droite. On définie la position 0 à la moitié de la différence des angles.
# - On envoie en position 0, Cela met zéro au milieu.
# - .reset_angle(angle: deg) : Valeur à laquelle l'angle doit être réinitialisé a 0.
# - .run_target(speed, target_angle, then=Stop.HOLD, wait=True)
# - speed (vitesse de rotation : deg/s) – Vitesse du moteur.
# - target_angle (angle : deg) – Angle auquel le moteur doit allez, ici au 0 précédemment défini.
# - (Stop) – Que faire après un arrêt. Ici .HOLD bloquer en position.
# - wait (bool) – Attendez que le moteur atteigne la cible avant de continuer avec le reste du programme.
steer.reset_angle((right_end - left_end)/2)
steer.run_target(speed=200, target_angle=0, wait=False)

# Set steering angle for the buggy / Régler l'angle de braquage du buggy
# - créer et défini une variable ‘ steer_angle’
#  - ? Question 1 ?
# - ? La c’est moi qui bug, une explication, le reste d’une précédente version ?
# - !sans doute que dans la dinamique du programme, ca ramène à chaque tour vers le centre , ou pas!
#  - c’est quoi ce ‘-5’ ca va tire à gauche ! Et ce n(est pas dans la boucle.
#  - Edit : Cela va simplement réduire la course par rapport au maximum afin de ne pas aller en butée à chaque braquage ;
steer_angle = (((right_end – left_end)/2)-5)
# - Affiche le résultat à l’écran du PC → Très pratique pour débeuger et suivre l’évolution des variables.
print('steer angle:',steer_angle)

# Now we can start driving! / Maintenant, nous pouvons commencer à conduire ! Pas trop tôt !
# - On allume la lumière du hub en vert
hub.light.on(Color.GREEN)

# - On commence une boucle : Tant que la condition est ‘Vrai’  → bizarre c’ette condition qui est toujours vrais !
while True:
    # Check which buttons are pressed. / Vérifiez quels boutons sont enfoncés.
    pressed = remote.buttons.pressed()

    # Choose the steer angle based on the right controls.
# - Choisissez l'angle de braquage en fonction des bonnes commandes.
# - run_target(speed, target_angle, then=Stop.HOLD, wait=True)
#  -  La ‘class Button’ defini une serie de bouton de la télécommande, mais j’ai du mal à voir lesquels.
    if Button.RIGHT_PLUS in pressed:
        steer.run_target(1400, steer_angle, Stop.HOLD, False)
    elif Button.RIGHT_MINUS in pressed:
        steer.run_target(1400, -steer_angle, Stop.HOLD, False)
    else:
        steer.track_target(0)
#  - d’apres la doc, ‘ track_target’ force au max le retour a la position 0,
#  - ce qui n’est peut être pas le plus judicieux, pour une conduite de style coulé, comme dirait Jean-Raoul Ducable de la JBTeam !
#  - je remplacerais bien par : steer.run_target(300, 0, Stop.HOLD, False)
#  - !Jeux de lumière du hub en fonction des bouton pressés, pas très clair pour moi !
#  - ?Question 2 c’est quoi ce bouzin ? Je comprends rien.
    if Button.RIGHT not in pressed and hub_animation_running:
        hub.light.on(Color.GREEN)
        hub_animation_running = False

    if Button.LEFT in pressed:
        hub.light.on(Color.RED)
        hub_animation_running = False
    elif Button.RIGHT in pressed and not hub_animation_running:
        hub.light.animate([Color.RED, Color.ORANGE, Color.YELLOW, Color.GREEN, Color.CYAN, Color.BLUE, Color.VIOLET, Color.MAGENTA], interval=100)
        hub_animation_running = True

    # Choose the drive speed based on the left controls.
#  - Choisissez la vitesse de conduite en fonction des commandes de gauche.
#  - On crée une variable ‘ drive_speed’ que l’on initialise a 0
    drive_speed = 0
    if Button.LEFT_PLUS in pressed:
#  - Augmente la vitesse de 100
        drive_speed += 100
    if Button.LEFT_MINUS in pressed:
        drive_speed -= 100

    # Apply the selected speed. / Appliquer la vitesse sélectionnée.
    front.dc(drive_speed)

    # Wait. / pause de 10 millisecondes
    wait(10)
Dernière édition par Tops le Sam Jan 29, 2022 9:23 pm, édité 1 fois au total.

Zebulon
Level 6
Level 6
 
Messages: 429
Âge: 49 ans

Messagepar Zebulon » Sam Jan 29, 2022 12:05 pm

Sur l'ordinateur il fallait d'abord que je clique sur l'icône dans la page pybricks puis une fois que la boite de dialogue indiquant que la page voulait établir une connexion Bluetooth s'était ouverte alors seulement j'appuyais en continu sur le bouton du hub. Sinon le hub n'était pas détecté.

Pour tes commentaires et tes questions dans le script, s'il te plait, il faut faire un très gros effort sur l'orthographe et la syntaxe. Sinon oui c'est très bien d'avoir creusé dans la doc et commenté afin qu'un lecteur novice s'y retrouve plus facilement. Pour répondre à quelques unes de tes interrogations:
- le -5 dans le calcul de l'angle de braquage ne va pas faire tirer la voiture à gauche ni à droite, cela va simplement réduire la course par rapport au maximum afin de ne pas aller en butée à chaque braquage ;
- la boucle infinie "tant que condition vraie" c'est un classique en programmation ;
- pour les boutons de la classe Button je trouve que c'est assez explicite et sur la documentation de la télécommande il y a plusieurs examples ;
- pour le retour au centre de la direction tu peux en effet tester ta solution et voir si le comportement de la voiture convient davantage à ton style de conduite ;
- le passage du script qui agit sur les couleurs du hub n'est pas indispensable à la conduite du buggy mais comme l'a expliqué Celeri c'était pour tester ces fonctions ;

Bref l'outil est disponible et chacun peut améliorer/ajuster en fonction de ses préférences.

Tops
Level 3
Level 3
 
Messages: 45

Messagepar Tops » Sam Jan 29, 2022 9:40 pm

Merci Zebulon pour les réponses.
Il me tarde de tester sur ma buggy..
Désolé pour les fautes, pas facile de faire beaucoup mieux avec la dyslexie..

Zebulon
Level 6
Level 6
 
Messages: 429
Âge: 49 ans

Messagepar Zebulon » Dim Jan 30, 2022 12:56 am

De rien et désolé pour ma remarque, je suis un peu intransigeant dans le domaine, mais j'en fait aussi des fautes. :/

Tops
Level 3
Level 3
 
Messages: 45

Messagepar Tops » Dim Jan 30, 2022 1:55 am

En fait, moi aussi ça m’énerve, quand je les voient, les fautes des autres ..

Avatar de l’utilisateur
Celeri
Level 7
Level 7
 
Messages: 583
Localisation: Paris
Âge: 44 ans

Messagepar Celeri » Dim Jan 30, 2022 2:10 am

Zebulon a écrit:De rien et désolé pour ma remarque, je suis un peu intransigeant dans le domaine, mais j'en fait aussi des fautes. :/


:oo
Rien n'est plus semblable à l'identique que ce qui est pareil à la même chose. (Pierre Dac)

Zebulon
Level 6
Level 6
 
Messages: 429
Âge: 49 ans

Messagepar Zebulon » Dim Jan 30, 2022 2:28 am

Cloué !

Seb
Level 1
Level 1
 
Messages: 7

Messagepar Seb » Dim Jan 30, 2022 10:55 pm

Bonjour à tous,
je suis nouveau sur le forum, amateur de LT mais pas un pro. J'ai acquis le 42124, je confirme comme tous que le contrôle par l'appli est juste... j'ai tenté la manip pour faire le contrôle via la télécommande 88010, mais j'ai un message d'erreur lors du premier appairage. auriez vous une solution car je sèche.... Voici le message:
"Unexpected error while trying to connect: GATT Server is disconnected. Cannot retrieve services. (Re)connect first with `device.gatt.connect` "
En vous remerciant


Retourner vers Discussions sur les modèles

Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 14 invités