Aide avec le code d'évitement de collision, Let s Make Robots, RobotShop

J'espère que quelqu'un peut me aider avec est le code. Les moteurs sur le robot ne jamais tourner, peu importe la distance à laquelle un obstacle est rencontré. Le capteur à ultrasons, et servo moteurs ont été vérifiés et notre fonctionnelle. J'ai également couru plusieurs autres croquis similuar avec les mêmes résultats. La batterie est complètement chargée. Toute aide est appréciée.

// Puisque nous utilisons servos et des capteurs à ultrasons dans le robot, nous inclurons des bibliothèques écrites pour rendre leur utilisation plus facile
#comprendre
#comprendre

// Voici les constantes symboliques. Au lieu d'avoir à taper un numéro d'identification non sensical chaque fois que nous voulons faire quelque chose que nous pouvons écrire un facile de comprendre le nom qui représente la broche, le compilateur remplacera alors les noms avec les numéros
#define LeftMotorForward 8
#define LeftMotorBackward 9
#define LeftMotorSpeed ​​5
#define RightMotorForward 6
#define RightMotorBackward 7
#define RightMotorSpeed ​​10
#define USTrigger 3
#define USEcho 2
#define maxDistance 100
#define LED 13

// Ici, nous avons créé deux « objets », un pour le servo et un pour le capteur à ultrasons
servo-assistée;
sonar NewPing (USTrigger, USEcho, maxDistance);

// Ci-dessous, nous créons des variables d'entiers non signés que nous utiliserons plus tard dans le code. Ils ne sont pas signés car ils n'ont des valeurs postive
durée unsigned int;
la distance unsigned int;
unsigned int FrontDistance;
unsigned int LeftDistance;
unsigned int RightDistance;
unsigned int temps;
unsigned int CollisionCounter;

// Ici, nous fixons les modes de broches. Comme nous envoyer des signaux des broches que nous les fixons comme sorties
pinMode (LeftMotorForward, OUTPUT);
pinMode (LeftMotorBackward, OUTPUT);
pinMode (LeftMotorSpeed, OUTPUT);
pinMode (RightMotorForward, OUTPUT);
pinMode (RightMotorBackward, OUTPUT);
pinMode (RightMotorSpeed, OUTPUT);
pinMode (LED, OUTPUT);
servo.attach (11); // Le servo est fixé à la broche 4
>

void loop () // Ce bloc se répète alors que le Arduino est activé
servo.write (90); // Faire tourner le servo pour faire face à l'avant
balayage(); // Aller à la fonction de balayage
FrontDistance = distance; // Définissez la FrontDistance variable à la valeur de la distance renvoyée par la fonction de balayage
Serial.println ( "distance de face =");
Serial.print (distance);
si (FrontDistance> 40 || FrontDistance == 0) // S'il n'y a rien Infront du robot dans les 40cm ou la valeur de distance est 0 (qui, pour la libary de newping signifie pas ping a été retourné) puis.
Avance(); // Aller à la fonction moveForward
>
else // Sinon (s'il y a quelque chose Infront du robot dans les 40cm) puis.
CollisionCounter = CollisionCounter + 1;
moveStop (); // Aller à la fonction moveStop
naviguer();
>
>

vide moveForward () // Cette fonction indique au robot pour aller de l'avant
Serial.println ( "");
Serial.println ( "Aller de l'avant");
digitalWrite (LeftMotorBackward, LOW);
digitalWrite (LeftMotorForward, HIGH);
digitalWrite (RightMotorBackward, LOW);
digitalWrite (RightMotorForward, HIGH);
>

vide moveBackward () // Cette fonction indique au robot de se déplacer vers l'arrière
Serial.println ( "");
Serial.println ( "Déplacement vers l'arrière");
digitalWrite (LeftMotorForward, LOW);
digitalWrite (LeftMotorBackward, HIGH);
digitalWrite (RightMotorForward, LOW);
digitalWrite (RightMotorBackward, HIGH);
>

vide moveLeft () // Cette fonction indique au robot de tourner à gauche
Serial.println ( "");
Serial.println ( "mouvement vers la gauche");
digitalWrite (LeftMotorForward, LOW);
digitalWrite (LeftMotorBackward, HIGH);
digitalWrite (RightMotorBackward, LOW);
digitalWrite (RightMotorForward, HIGH);

vide MoveRight () // Cette fonction indique au robot de tourner à droite
Serial.println ( "");
Serial.println ( "Moving droit");
digitalWrite (LeftMotorBackward, LOW);
digitalWrite (LeftMotorForward, HIGH);
digitalWrite (RightMotorForward, LOW);
digitalWrite (RightMotorBackward, HIGH);
>

vide moveStop () // Cette fonction indique au robot pour arrêter de bouger
Serial.println ( "");
Serial.println ( "arrêt");
digitalWrite (LeftMotorBackward, LOW);
digitalWrite (LeftMotorForward, LOW);
digitalWrite (RightMotorForward, LOW);
digitalWrite (RightMotorBackward, LOW);
>
vide de balayage () // Cette fonction détermine les choses de distance sont à une distance du capteur à ultrasons
Serial.println ( "");
Serial.println ( "balayage");
Temps = sonar.ping ();
distance = Temps / US_ROUNDTRIP_CM;
retard (500);
>
naviguer void ()
Serial.println ( "Il y a un obstacle!");
servo.write (167); // Déplacer le servo vers la gauche (mon petit servos ne pas envie d'aller à 180, donc je joué avec la valeur jusqu'à ce qu'elle fonctionnait bien)
retard (1000); // Attendre une demi-seconde pour le servo pour y arriver
balayage(); // Aller à la fonction de balayage
LeftDistance = distance; // Définissez la LeftDistance variable à la distance sur la gauche
Serial.println ( "distance gauche =");
Serial.print (distance);
servo.write (0); // Déplacer le servo vers la droite
retard (1000); // Attendre une demi-seconde pour le servo pour y arriver
balayage(); // Aller à la fonction de balayage
RightDistance = distance; // Définissez la RightDistance variable la distance à droite
Serial.println ( "distance droite =");
Serial.print (distance);
si (abs (RightDistance - LeftDistance) < 5)
recule(); // Aller à la fonction moveBackward
retard (200); // Pause du programme de 200 millisecondes pour laisser l'inverse du robot
déplacer vers la droite(); // Aller à la fonction MoveRight
retard (100); 200 millisecondes // Pause du programme pour laisser le robot tourner à droite
>
else if (RightDistance < LeftDistance) //If the distance on the right is less than that on the left then.
se déplacer à gauche(); // Aller à la fonction moveLeft
retard (100); // Pause du programme pour une demi-seconde pour laisser le tour du robot
>
else if (LeftDistance < RightDistance) //Else if the distance on the left is less than that on the right then.
déplacer vers la droite(); // Aller à la fonction MoveRight
retard (100); // Pause du programme pour une demi-seconde pour laisser le tour du robot
>
>