Envoyer du texte par bluetooth à une application android

Bonjour/Bonsoir à tous,

Nous sommes des élèves de terminale S SI et nous avons choisi comme projet de réaliser une canne pour aveugle à base de capteurs ultrason HC-sr04. L'enjeu de ce projet est de transmettre la distance mesurée par les capteurs à l'utilisateur pour le prévenir d'un obstacle à travers d'une application android. Pour cela, nous utilisons un module bluetooth HC-06 et nous essayons depuis quelques jours de trouver un simple code pour tester une transmission de données (ici une valeur pour le moment). Malheureusement après des heures de recherche, nous ne comprenons pas très bien les codes proposés car la plupart du temps cela est mal expliqué ou pas ce que l'on recherche. Pour le moment, nous avons simplement réussi à nous connecter au module.

Ainsi nous décidons de nous tourner vers vous, amateurs d'arduino. Est-ce que quelqu'un pourrait nous proposer un code nous permettant d'envoyer une distance ?

Nous mettons à disposition notre code appinventor :

hello
ceci envoi 1,2 ou 3 toutes les 5 secondes

 if (millis()-temps >5000)
  {
  //Serial.print("Test liaison HC-06 bluetooth ");
  Serial.println(counter);
  Serial3.print(counter++);
  if(counter==4){counter=1;}//Serial.println("");
  //Serial.print(" " );
  temps=millis();  //Un envoi de données par seconde
  }

Hey,

Merci de ta réponse ! J'ai simplement une question : à quoi sert la fonction millis() ?

millis() est un chronomètre (en millisecondes) lancé d'office à la mise sous tension

En mémorisant des 'temps intermédiaires' on gère facilement les intervalles de temps sans bloquer le programme comme le ferait delay()

la première ligne du code de dfgh correspond à la question 'est-ce que le chrono a progressé de plus de 5000 ms ?'

Pour que ça fonctionne bien, il faut que la variable temps ait été définie de type 'long' et initialisée auparavant avec 'temps = millis();' (ce dernier point n'étant pas nécessaire)

Merci pour vos réponses :slight_smile:

J'aurai d'autres questions :

  • counter représente 1,2 ou 3 ? Et à quoi sert "counter++"?
  • Serial représente-t-il la liaison arduino avec l'ordinateur ? Et Serial3 le bluetooth ?

J'avais aussi essayé au tout début de configurer mon module bluetooth HC-06 mais voilà ce qu'il me répond lorsque je tape "AT" (je précise que ce n'est pas mon code) :

Du coup, je ne comprends pas.. :confused:

Pour les opérateurs en C (comme ++), voir ici
Le reste est bon :slight_smile:

Pour la configuration du module BT as-tu configuré en 9600 bauds ? Ta photo vient d'un sketch de discussion série avec le module ou c'est juste une commande envoyée dans la console ?

Oui je l'avais bien configuré en 9600 bauds et ma photo vient d'une commanda envoyée dans la console.
Mais juste, dans le code arduino ci-dessus, Serial3 représente le bluetooth ?

C'est le code de dfgh, donc c'est à lui de l'affirmer, mais moi je pense que oui.
Il doit y avoir plus haut dans le code (avant le setup) :

#include <SoftwareSerial.h>
SoftwareSerial Serial3(10, 11); // RX, TX

Les numéros 10 et 11 sont à adapter selon ton branchement du module BT.

Pense aussi au fait que le module BT doit avoir du 3.3V sur la patte RX (l'autre supporte bien le 5V), voir ici : il faut mettre un pont diviseur si ton Arduino fournit du 5V.

Tu declares une ligne SoftwareSerial sur les broches 0 et 1.
Or ces broches sont celles utilisées par Serial (liaison avec l'IDE)
Utilise d'autres broches pour ta ligne série supplémentaire.

hello
oui, le code est bien pour une DUE qui possèdes 3 lignes sérial. la méga également.
pour UNO, il reste softwareserial...

Je pense que niveau branchement nous n'avons pas de problème :

  • Le GND est branché au GND
  • Le VCC directement au 3,3 V de notre nano
  • Rx branché à RX0 et TX à TX1

Il y a aussi quelque chose que je ne comprends pas très bien et je me demande si cela est utile pour nous qui souhaitons simplement envoyer des données :
À quoi sert cet extrait :
if (HC06.available()){
Serial.println(HC06.read()); //par exemple
{

J'ai fait quelques recherches et HC06.available() signifierait que le module reçoit quelque chose mais est-ce obligatoire dans notre cas ?

Merci de vos réponses et de votre soutien !

f (HC06.available()){
Serial.println(HC06.read()); //par exemple
{
à traduire par :
si le Bluetooth à reçu quelque chose, on le lis.
sinon, on continue le prg

donc à chaque tour de boucle le prg vérifie si le bluetooth à reçu une data

j'ai un gros doute sur votre branchement.
qu'y a t'il d'indiqué sur l’arrière de votre platine bluetooth?

Oui, le module HC06 est alimenté en 5V. Seule la pin RX doit recevoir du 3.3V (voir mon message #9)

Très bien donc, dans notre cas, nous n'avons pas besoin du if (HC06.available()){. Merci de vos réponses et du coup concernant le réglage du bluetooth des idées pourquoi cela me renvoie cela ?

:frowning:
c'est bizarre, pourquoi j'ai l'impression de voir deux monologues en parallèle ?

Deux monologues ? x)
Tu veux parler du fait que parfois j'utilise "je" et d'autre fois "nous" ?

Voilà le programme que j'ai réalisé pour envoyer 10 à mon application. Est-il juste ?

Capture.PNG

Je pense qu'il dit que tu ne lis pas bien ce qui est écrit.
Ta conclusion "je n'ai pas besoin de HC06.available()" est fausse.
Tu as un programme qui tourne sans arrêt, qui exécute sans cesse des instructions.
Or il n'y a pas sans cesse des données qui arrivent par le bluetooth.
Quand des données sont arrivées, il faut faire quelque chose,
sinon il faut faire autre chose, ou ne rien faire.
Tu as donc strictement besoin de la fonction available() pour savoir quoi faire dans ton programme.