[problème] transmettre une variable via bluetooth à une application

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.

#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);
}

SowftareSerial se charge de mettre les pins dans le bon mode pour vous

    pinMode(txPin, OUTPUT);
    pinMode(rxPin, INPUT_PULLUP);

mais ensuite vous leur "cassez la baraque" en les modifiant de façon erronée

  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

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

J-M-L: SowftareSerial se charge de mettre les pins dans le bon mode pour vous

 pinMode(txPin, OUTPUT);
 pinMode(rxPin, INPUT_PULLUP);

mais ensuite vous leur "cassez la baraque" en les modifiant de façon erronée

  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.

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

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 :frowning:

(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)
```
*#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);

}
_
```_
_

*_

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);