ça marche
(fin presque maintenant y'a du chipotage à faire du aux pièces notamment pour la direction...c'est pas très précis :s....)
son but trouver le meilleur chemin pour la suite gràce à un capteur à ultrason pouvant tourner
les photos ne seront pas de sitôt....faut que j trouve quelque chose pour améliorer la déco....il est immense...mon chassis est un truc normal mais le NXT est studless....les moteurs sont immenses (un pour l'avant et la direction, un pour les roues arrières pour faire avancer....donc 32 en longueur + le capteur à ultrason et le capteur tactile qui dépassent
si ça interesse quelqu'un voila le code (commenté
) :
pour le comprendre : Il y a trois moteurs : un pour le capteur à ultrason (sur le port A), un pour la direction (sur le port B), un pour avancer (port C)
Code:
#include "NXTDefs.h"
dseg segment // pour définir les variables
/* variables pour le capteur à ultrason */
Distance_Droite sword 0
Distance_Gauche sword 0
Distance_Devant sword 0
/* variables pour le capteur tactile */
Touche sword 0
dseg ends
thread main // le "truc" qui accomplit les tàches
Depart:
SetSensorUltrasonic(IN_4)
SetSensorTouch(IN_1) // définit les ports, mode et type de capteur
OnFwd(OUT_C,75) // donne l'ordre d'avancer (moteur connecté au port C) à 75% de la puissance max
Verifier_Capteur:
/* rajouter compteur pour éviter blocage sur 1 obstacle non visible par ultrason */
ReadSensorUS(IN_4,Distance_Devant) // inscrit la valeur lu par le capteur à ultrason et l'inscrit dans la variable "Distance_Devant"
brcmp LT, Obstacle_Present, Distance_Devant, 20 // si 1 obstacle va à Obstacle_Present
ReadSensor(IN_1,Touche) //inscrit la valeur lu par le senseyr tactile dans la variable "Touche" (1 si enfoncé 0 sinon)
brtst EQ, Verifier_Capteur, Touche // si pas d'obstacle retourne à Verifier_Capteur, sinon continu
Obstacle_Present:
Off(OUT_C) //arrete le moteur C en freinant
/* compare les distance à droite et à gauche, choisi la meilleur direction*/
RotateMotor(OUT_A,75,-90)
ReadSensorUS(IN_4,Distance_Droite)
RotateMotor(OUT_A,75,180)
ReadSensorUS(IN_4,Distance_Gauche)
RotateMotor(OUT_A,75,-90) // remet le capteur à ultrason à sa place initiale
brcmp GT, Tourne_Droit, Distance_Droite, Distance_Gauche //pour choisir la direction
Tourne_Gauche:
RotateMotor(OUT_C,75,-720)
RotateMotor(OUT_B,20,-70)
wait 500
OnFwd(OUT_C,75)
wait 1000
RotateMotor(OUT_B,20,+70)
RotateMotor(OUT_C,75,-720)
RotateMotor(OUT_B,20,-70)
wait 500
OnFwd(OUT_C,75)
wait 1000
RotateMotor(OUT_B,20,+70)
jmp Depart //retourne au début, permet de ne pas tourner à droite.
Tourne_Droit:
RotateMotor(OUT_C,75,-720)
RotateMotor(OUT_B,20,70)
wait 500
OnFwd(OUT_C,75)
wait 1000
RotateMotor(OUT_B,20,-70)
RotateMotor(OUT_C,75,-720)
RotateMotor(OUT_B,20,70)
wait 500
OnFwd(OUT_C,75)
wait 1000
RotateMotor(OUT_B,20,-70)
jmp Depart
/*retourne au départ*/
endt