Arduino vers appinventor problème

J'ai un projet en fin d'année de faire un robot foot qui soit contrôlé via une application mobile, sauf que je n'arrive pas a envoyer d'information de l'application a la carte, j'ai eu beau modifier les codes et le système d'envoi via appinventor rien n'y fait ça ne marche pas.. j'utilise le module bluetooth HC05 avec une arduino UNO R3 et appinventor pour l'application

voici le code

#include <Servo.h>
#include <SoftwareSerial.h>

SoftwareSerial moduleBLTOOTH(4,2); // (Tx BT, Rx BT)


Servo servos;

const int LMP = 8;
const int RMP = 9;
const int servo = 7 ;

word valeurlu = 0 ;

const int trigPin = 12;
const int echoPin = 11;
long duration;
float distance; 



void setup() {
  pinMode(trigPin, OUTPUT); 
  pinMode(echoPin, INPUT); 
  Serial.begin(9600);
  
  pinMode(LMP, OUTPUT);
  pinMode(RMP, OUTPUT);
  Serial.print("On"); 
  servos.attach(servo);
}


float getDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = duration * 0.034 / 2;
  return distance;
}

void loop() {
   //capteur U-S
  //Capteur U-S
 float currentDistance = getDistance();

  if (distance < 6) {
   // Serial.println("⚠trop proche⚠");
    //Serial.print(currentDistance, 2); 
   //Serial.println(" cm");
    delay(50);
    
  }

   //Controle
  //Controle
  
  if (moduleBLTOOTH.available())
  {
    valeurlu=moduleBLTOOTH.read();
    Serial.println(valeurlu);

    //test serialbyte
    char Direction = Serial.read();
    if (Direction == 'R' && Direction == 'F' )
    {
      Serial.println("RF");
      digitalWrite(LMP, HIGH );
      digitalWrite(RMP, HIGH);
    }

     else if (Direction == 'R')
    {
      Serial.println("R");
      digitalWrite(LMP, LOW);
      digitalWrite(RMP, HIGH);
    }

       else if (Direction == 'F')
    {
      Serial.println("F");
      digitalWrite(LMP, HIGH);
      digitalWrite(RMP, LOW);
    }
    
     //servos
    //servos
    
    else if (Direction == 'S' )
    {
       for (int position = 0; position <= 90; position++) {
      servos.write(position);
      delay(10);
    }

      for (int position = 90; position >= 0; position--) {
      servos.write(position);
      delay(10);
 }

    }

 
  }
}

Voici le code de l'application

Bonjour diablooo

C'est mieux si tu sauves ton programme MAI:
image
tu zippes le fichier AIA téléchargé et tu le copies sur le forum.

A+
Cordialement
jpbbricole

Si tu ne reçoit rien de MAI, c'est parce que tu as oublié, dans Setup(), d'initialiser le port :wink:

moduleBLTOOTH.begin(9600);

Cordialement
jpbbricole

Désolé de la réponse tardive, ça ne marche toujours pas, rien ne s'affiche coté arduino...

mets ton code dans le forun, entre les balises :wink:

Le code arduino donc?

#include <Servo.h>
#include <SoftwareSerial.h>

SoftwareSerial moduleBLTOOTH(4,2); // (Tx BT, Rx BT)



Servo servos;

const int LMP = 8;
const int RMP = 9;
const int servo = 7 ;

word valeurlu = 0 ;

const int trigPin = 12;
const int echoPin = 11;
long duration;
float distance; 



void setup() {
  pinMode(trigPin, OUTPUT); 
  pinMode(echoPin, INPUT); 
  Serial.begin(9600);
  moduleBLTOOTH.begin(9600);
  
  pinMode(LMP, OUTPUT);
  pinMode(RMP, OUTPUT);
  Serial.print("On"); 
  servos.attach(servo);
}


float getDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = duration * 0.034 / 2;
  return distance;
}

void loop() {
   //capteur U-S
  //Capteur U-S
 float currentDistance = getDistance();

  if (distance < 6) {
   // Serial.println("⚠trop proche⚠");
    //Serial.print(currentDistance, 2); 
   //Serial.println(" cm");
    delay(50);
    
  }

   //Controle
  //Controle
  
  if (moduleBLTOOTH.available())
  {
    valeurlu=moduleBLTOOTH.read();
    Serial.println(valeurlu);

    //test serialbyte
    char Direction = Serial.read();
    if (Direction == 'R' && Direction == 'F' )
    {
      Serial.println("RF");
      digitalWrite(LMP, HIGH );
      digitalWrite(RMP, HIGH);
    }

     else if (Direction == 'R')
    {
      Serial.println("R");
      digitalWrite(LMP, LOW);
      digitalWrite(RMP, HIGH);
    }

       else if (Direction == 'F')
    {
      Serial.println("F");
      digitalWrite(LMP, HIGH);
      digitalWrite(RMP, LOW);
    }
    
     //servos
    //servos
    
    else if (Direction == 'S' )
    {
       for (int position = 0; position <= 90; position++) {
      servos.write(position);
      delay(10);
    }

      for (int position = 90; position >= 0; position--) {
      servos.write(position);
      delay(10);
 }

    }

 
  }
}

je viens d'essayer avec un code pour allumer une led et ça ne marche pas non plus, ce serait donc un problème côté carde Bluetooth ou côté application??

Oui :wink:
Plusieurs choses:
if (Direction == 'R' && Direction == 'F' )
cette variable ne peut pas être à la fois R et (&&) F

Tu lis le port BT:
valeurlu=moduleBLTOOTH.read();
puis tu fais:
char Direction = Serial.read();
Tu na fais rien avec valeurlu
et tu va chercher Direction sur Serial!

Ce ne serai pas plutôt :
char Direction = moduleBLTOOTH.read();
en supprimanr la ligne:
valeurlu=moduleBLTOOTH.read();

A+
Cordialement
jpbbrticole

pour le "if (Direction == 'R' && Direction == 'F' )" c'est normal car le but était que si l'utilisateur appuie sur les 2 boutons alors le robot avance tout droit,
je viens aussi de modifier le script comme dit sauf que je n'ai toujours rien d'affiché dans le moniteur série quand j'appuie sur un des boutons, la carte Bluetooth est bien connecté au téléphone mais elle ne reçoit a priori aucune information..

#include <Servo.h>
#include <SoftwareSerial.h>

SoftwareSerial moduleBLTOOTH(4,2); // (Tx BT, Rx BT)



Servo servos;

const int LMP = 8;
const int RMP = 9;
const int servo = 7;

const int trigPin = 12;
const int echoPin = 11;
long duration;
float distance; 



void setup() {
  pinMode(trigPin, OUTPUT); 
  pinMode(echoPin, INPUT); 
  Serial.begin(9600);
  moduleBLTOOTH.begin(9600);
  
  pinMode(LMP, OUTPUT);
  pinMode(RMP, OUTPUT);
  Serial.print("On"); 
  servos.attach(servo);
}


float getDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = duration * 0.034 / 2;
  return distance;
}

void loop() {
   //capteur U-S
  //Capteur U-S
 float currentDistance = getDistance();

  if (distance < 6) {
   // Serial.println("⚠trop proche⚠");
    //Serial.print(currentDistance, 2); 
   //Serial.println(" cm");
    delay(50);
    
  }

   //Controle
  //Controle
  
  if (moduleBLTOOTH.available())
  {
    //test serialbyte
    char Direction = moduleBLTOOTH.read();
    if (Direction == 'R' && Direction == 'F' )
    {
      Serial.println("RF");
      digitalWrite(LMP, HIGH );
      digitalWrite(RMP, HIGH);
    }

     else if (Direction == 'R')
    {
      Serial.println("R");
      digitalWrite(LMP, LOW);
      digitalWrite(RMP, HIGH);
    }

       else if (Direction == 'F')
    {
      Serial.println("F");
      digitalWrite(LMP, HIGH);
      digitalWrite(RMP, LOW);
    }
    
     //servos
    //servos
    
    else if (Direction == 'S' )
    {
       for (int position = 0; position <= 90; position++) {
      servos.write(position);
      delay(10);
    }

      for (int position = 90; position >= 0; position--) {
      servos.write(position);
      delay(10);
 }

    }

 
  }
}

Bonjour diablooo

Ah! OK, mais ce n'est pas possible ainsi, une variable ne peut pas avoir 2 valeurs simultanément et tu ne peut pas avoir une variable comme RF puisque tu ne lis qu'un caractère à la fois:
char Direction = moduleBLTOOTH.read();
donc Direction vaudra R ou F ou S mais jamais RF.
Pour ça il faut modifier ton programme MAI.
Pourrais tu me passer ton fichier AIA comme indiqué ai post#4?

Cordialement
jpbbricole

Le forum me dit que le format aia n'est pas pris en compte et je ne peux donc pas l'exporter sur le forum..

C'était indiqué dans le post#4 :wink:

A+

re bonjour, désolé encore une fois du délai de ma réponse, le forum me dit que les nouveaux utilisateurs ne peuvent pas envoyer de ficher, je l'ai zip comme dit mais le problème persiste donc je ne sais pas trop comment faire..

quel est le message?

"Nous sommes désolés, les nouveaux utilisateurs ne peuvent pas envoyer de fichiers."

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.