Go Down

Topic: [problème] transmettre une variable via bluetooth à une application (Read 186 times) previous topic - next topic

robotdmx

Bonjour,

Je suis en classe de Terminale STI2D Option SIN, je programme actuellement une Arduino Uno avec module Grove et un serial Bluetooth 3.0 Grove.
Je voudrais envoyer une variable acquise grâce à un Voltage divider Grove pour l'afficher dans une application mobile créer avec App Inventor.
Le problème viens du fait que je n'arrive pas a transmettre cette variable vers l'application.
Voici le code que j'utilise ainsi que la partie bluetooth d'App Inventor.

Merci d'avance pour toute aide apportée.

Code: [Select]
#include <SoftwareSerial.h>
#define RxD 6   // RxD sur la borne 6
#define TxD 7   // TxD sur la borne 7

SoftwareSerial blueToothSerial(RxD,TxD); //pin 7

void setup() {

  Serial.begin(115200);
  blueToothSerial.begin(9600);
  pinMode(RxD, INPUT);
  pinMode(TxD, OUTPUT);

}

void loop() {
 
float  sensorValue=analogRead(A0);
   
int pourcent = map(sensorValue, 222, 284, 0 ,100);

if (sensorValue < 222)
{
pourcent = 0 ;
 Serial.println(pourcent, DEC);
  }
else if (sensorValue > 284)
{
pourcent = 100 ;
 Serial.println(pourcent, DEC);
  }
if (sensorValue > 222 && sensorValue < 284)
{
 Serial.println(pourcent, DEC);

  }
    blueToothSerial.print(pourcent);
delay(500);
}


J-M-L

SowftareSerial se charge de mettre les pins dans le bon mode pour vous
Code: [Select]
pinMode(txPin, OUTPUT);
pinMode(rxPin, INPUT_PULLUP);

mais ensuite vous leur "cassez la baraque" en les modifiant de façon erronée
Code: [Select]
  pinMode(RxD, INPUT);
  pinMode(TxD, OUTPUT);
. virez vos 2 lignes et testez à nouveau. (en supposant que vous avez connecté correctement le module BT)

sinon pour contraindre une valeur entre 2 bornes, il existe la fonction constrain() et donc votre code pourrait être
Code: [Select]
int pourcent = map(sensorValue, 222, 284, 0 ,100);
pourcent  = constrain(pourcent, 0, 100);
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

robotdmx

SowftareSerial se charge de mettre les pins dans le bon mode pour vous
Code: [Select]
pinMode(txPin, OUTPUT);
 pinMode(rxPin, INPUT_PULLUP);

mais ensuite vous leur "cassez la baraque" en les modifiant de façon erronée
Code: [Select]
 pinMode(RxD, INPUT);
  pinMode(TxD, OUTPUT);

. virez vos 2 lignes et testez à nouveau. (en supposant que vous avez connecté correctement le module BT)
Je ne suis pas sûr de saisir comment ça pourrait m'aider à envoyer une variable de l'arduino vers mon appli :/

Le problème ne viens pas du fait que la connection bluetooth ne s'effectue pas, c'est l'envoie de variable Arduino -> appli qui coince, du coté de l'envoie de variable appli -> Arduino tout fonctionne par contre :\

Merci aussi pour la fonction constrain(), ça me permet de réduire un peu mon code ^^

Et merci de m'accorder un peu de temps pour mon problème.

J-M-L

L'arduino va écrire sur son port série virtuel, si vous avez correctement configuré votre module BT et appairé votre tel/application la transmissions de fait toute seule
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

robotdmx

J'ai une bonne et une mauvaise nouvelle
La bonne c'est que j'ai réussi à envoyer une info vers l'appli (enfin!)
La mauvaise nouvelle c'est que l'info se dédouble et je ne sais pas pourquoi :(



(exemple de l'erreur dans l'appli quand j'essaye d'additionner la variable avec elle même)




(Code Arduino + code appli que j'ai changer)
Code: [Select]
#include <SoftwareSerial.h>

#define RxD 6   // RxD sur la borne 6
#define TxD 7   // TxD sur la borne 7

SoftwareSerial blueToothSerial(RxD,TxD); //pin 6

void setup(){

  Serial.begin(9600);
}


void loop() {
 
int  sensorValue=analogRead(A0);

int pourcent = map(sensorValue, 222, 284, 0 ,100);

pourcent = constrain(pourcent, 0, 100);

blueToothSerial.write(pourcent);
   

delay(500);
 
}


lesept

write envoie des octets, print envoie une valeur. tu reçois 46 53, ce qui en ASCII représente ".5"

Ajoute un Serial.print(pourcent); pour voir ce que tu envoies et un delay(1000); pour temporiser un peu.
ensuite essaye blueToothSerial.print(pourcent);
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Go Up