Go Down

Topic: Voiture bluetooth (Read 1 time) previous topic - next topic

maximej

Jun 22, 2015, 02:30 pm Last Edit: Jun 22, 2015, 02:30 pm by maximej
Bonjour, je suis sur un projet de voiture télécommandé avec mon téléphone via l'application Arduino BT joystick, le probleme c'est que j'ai quelques problemes a chaque fois que je veux tourner, la voiture ralenti beaucoup voir s'arrete, le probleme vient de la reception des donées, en efet je recois a chaque nouvelle boucle loop un valeur d'une chaine de donée, en gros, le téléphone envoi #a=0# et l'arduino traite que 1 valeur a chaque fois (1ere boucle #, 2eme boucle a, .... )et moi je veux me servir que du 0 donc mon code supprime le reste mais apres ya tj des problemes, si quelqun pouvait m'aider

Code: [Select]

int motor1Pin1 = 3;    // pin 1 on L298D
int motor1Pin2 = 4;    // pin 2 on L298D
int motor2Pin1 = 6;    // pin 3 on L298D
int motor2Pin2 = 7;    // pin 4 on L298D
char a;
char b;

void setup()
{
pinMode(motor1Pin1, OUTPUT);
  pinMode(motor1Pin2, OUTPUT);
  pinMode(motor2Pin1, OUTPUT);
  pinMode(motor2Pin2, OUTPUT);   
  Serial.begin(9600);

}

void loop() // run over and over
{
if (Serial.available()) {
  char c = Serial.read();
   
    if(c == '0'){
    a = '0';
    }
    else if(c == '1'){
    a = '1';
    }
     else if(c == '2'){
     a = '2';
    }
     else if(c == '3'){
    a = '3';
    }
     else if(c == '4'){
    a = '4';
    }
   
    Serial.write(a);
   
   
  if(a == '0' || b == '0'){ // avancer
      digitalWrite(motor1Pin2, LOW);   // set pin 2 on L293D low
      digitalWrite(motor1Pin1, HIGH);
              }   
else   if(a == '2' || b == '2'){ // reculer
      digitalWrite(motor1Pin2, HIGH);   // set pin 2 on L293D low
      digitalWrite(motor1Pin1, LOW);
              }
   else {   digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, LOW);}

 
             
  if(a == '3' || b == '3'){ // gauche
      digitalWrite(motor2Pin2, LOW);   // set pin 2 on L293D low
      digitalWrite(motor2Pin1, HIGH);
              }
  else if(a == '4' || b == '4'){ //droite
      digitalWrite(motor2Pin2, HIGH);   // set pin 2 on L293D low
      digitalWrite(motor2Pin1, LOW);
              }
  else {   digitalWrite(motor2Pin1, LOW); digitalWrite(motor2Pin2, LOW);}           
   
          if(a!=b){
           b = a;
           }
           
Serial.write(b);
}}
[code/]

B@tto

Salut,

déjà je vois pas trop l'intérêt de ça :

 
Code: [Select]
  if(c == '0'){
    a = '0';
    }
    else if(c == '1'){
    a = '1';
    }
     else if(c == '2'){
     a = '2';
    }
     else if(c == '3'){
    a = '3';
    }
     else if(c == '4'){
    a = '4';
    }


Autant écrire

Code: [Select]
a=c;

Dans la suite du code ensuite y'a une variable b et on se demande aussi à quoi elle sert.

Enfin pour résoudre ton souci de lecture :

Code: [Select]
if(Serial.available()) {

delay(20);

char c=Serial.read();

if(c=='a') {

Serial.read(); // élimination du "="

c=Serial.read(); // ayé, c contient '0' ou '1'

} else {

while(Serial.available()) Serial.read();
}
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

maximej

  je met tout ca car je veux que a soit seulement 1 2 3 ou 4
ensuite b sert a utiliser la valeur reu dans la boucle précédente, si on a tourné a gauche : 2 et quon va tout droit 3, alors la premiere fois a=2 et dans la boucle d'apres a=3 et b=2
ce soir je vais essayer avec ton code, merci

B@tto

je met tout ca car je veux que a soit seulement 1 2 3 ou 4
Bin ouais mais ça sert à rien

ensuite b sert a utiliser la valeur reu dans la boucle précédente, si on a tourné a gauche : 2 et quon va tout droit 3, alors la premiere fois a=2 et dans la boucle d'apres a=3 et b=2
ce soir je vais essayer avec ton code, merci
Je suis vraiment pas ta logique, pourquoi t'as besoin de l'état précédent ?
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

maximej

#4
Jun 22, 2015, 04:13 pm Last Edit: Jun 22, 2015, 04:15 pm by maximej
si tu ve, quand j'appui sur le bouton gauche de l'application, cela envoi 2 a ma voiture et quand j'appui sur avancer cela envoi 3 donc quand j'appui sur avancer et gauche, cela envoi 2323232323232...... donc je récupere l'etat precedent pour faire avancer la voiture et la faire tourner en meme temps, le probleme c'est que ya un truc qui ne va pas dans le code de reception ce qui fer que au lieu de recevoir 23232323232 je recois plutot 222232222322223 ou 33332333323332 .....

B@tto

Ouais mais tu te tortures et en plus ça marchera pas bien.

Faut coller deux variables et ajuster en fonction : une pour la direction et une pour avancer/reculer.
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

maximej

cela fait 3 moi que je me suis lancé la dessus et je pose la question ici pasque je désespere , j'ai essayé plein de truc different mais seul le dernier code fontionnait a peu pres, si tu pouvais me montrer le code que tu pense qu'il faut stp

Go Up