Je me suis lancé recement dans un projet qui consiste ( entre autres ) à pouvoir contrôler mon robot depuis une interface graphique sur un écran tactile de ma raspberry pi. Ayant déjà fais l'interface graphique, je me suis lancé hier dans la rédaction du code arduino de mon robot.
Le robot est muni d'un module bluetooth et recevra à terme les commande via la raspberry Pi.
En gros le robot reçoit des valeurs en bluetooth de 1 à 5 ( chaque numero correspondant à un mouvement ) et la valeur 6 correspond au passage du robot en mode "autonome" ( il est muni d'un petit capteur ulrasonique à l'avant ).
Mais voila mon problème : Quand j'envoi une valeur de 1 à 5, tout marche bien, le robot execute ce qui est écrit dans le code. En revanche quand j'envois l'ordre de passer en mode "autonome", le robot bouge n'importe comment...
C'est assez difficile à expliqué mais j'ai en fait l'impression que le robot exécute la fonction "auto_mode" pendant une fraction de seconde quand il en reçoit l'ordre puis le robot reste " bloqué" dans le mouvement qu'il a commencé durant cette fraction de seconde.
Merci d'avance

#include <DistanceSRF04.h> DistanceSRF04 Dist; int distance; int VAL; int motorD1 = 6; // H-bridge leg 1 int motorD2 = 7; // H-bridge leg 2 int motorG1 = 4; int motorG2 = 5; int speedG = 2; int speedD = 3; // H-bridge enable pin int vitesse = 130; void setup() { Dist.begin(13,12); pinMode(motorD1, OUTPUT); pinMode(motorD2, OUTPUT); pinMode(speedD, OUTPUT); pinMode(motorG1, OUTPUT); pinMode(motorG2, OUTPUT); pinMode(speedG, OUTPUT); pinMode(9, INPUT); pinMode(10, INPUT); Serial.begin(9600); } void loop() { while (Serial.available() == 0); // wait for character to arrive char c = Serial.read(); if(c =='1') { digitalWrite(motorD1, HIGH); digitalWrite(motorD2, LOW); digitalWrite(motorG1, HIGH); digitalWrite(motorG2, LOW); analogWrite(speedD, vitesse); analogWrite(speedG, vitesse); } if(c == '2'){ digitalWrite(motorD1, LOW); digitalWrite(motorD2, HIGH); digitalWrite(motorG1, LOW); digitalWrite(motorG2, HIGH); analogWrite(speedD, vitesse); analogWrite(speedG, vitesse); } if(c == '3'){ digitalWrite(motorD1, LOW); digitalWrite(motorD2, HIGH); digitalWrite(motorG1, HIGH); digitalWrite(motorG2, LOW); analogWrite(speedD, vitesse); analogWrite(speedG, vitesse); } if(c == '4'){ digitalWrite(motorD1, HIGH); digitalWrite(motorD2, LOW); digitalWrite(motorG1, LOW); digitalWrite(motorG2, HIGH); analogWrite(speedD, vitesse); analogWrite(speedG, vitesse); } if(c == '5'){ digitalWrite(motorD1, LOW); digitalWrite(motorD2, LOW); digitalWrite(motorG1, LOW); digitalWrite(motorG2, LOW); analogWrite(speedD, vitesse); analogWrite(speedG, vitesse); } if(c == '6'){ auto_mode(); } delay(500); } void auto_mode(){ int distance = Dist.getDistanceCentimeter(); Serial.print("\nDistance in centimers: "); Serial.print(distance); delay(100); //make it readable // check the average distance and move accordingly if (distance <= 10){ digitalWrite(motorD1, LOW); digitalWrite(motorD2, HIGH); digitalWrite(motorG1, LOW); digitalWrite(motorG2, HIGH); analogWrite(speedD, vitesse); analogWrite(speedG, vitesse); } if (distance < 25 && distance > 10) { digitalWrite(motorD1, HIGH); digitalWrite(motorD2, LOW); digitalWrite(motorG1, LOW); digitalWrite(motorG2, HIGH); analogWrite(speedD, vitesse); analogWrite(speedG, vitesse); } if (distance > 25) { digitalWrite(motorD1, HIGH); digitalWrite(motorD2, LOW); digitalWrite(motorG1, HIGH); digitalWrite(motorG2, LOW); analogWrite(speedD, vitesse); analogWrite(speedG, vitesse); } }