0

J'ai deux modules bluetooth (HC05) connectés à des arduinos distincts. L'un agissant en tant que maître et l'autre en tant qu'esclave. Un LDR est connecté à la partie esclave qui prendra des lectures continues et l'enverra au maître via bluetooth.Communication de lecture du capteur via bluetooth

Les modules sont couplés avec succès. Je pourrais même contrôler une led connectée au maître en utilisant un bouton poussoir connecté à l'esclave.

Depuis 4 jours, j'ai du mal à obtenir les lectures de LDR sur le moniteur série du maître.

La partie esclave du projet (ayant la LDR):

#include <SoftwareSerial.h> 
SoftwareSerial BTSerial(10, 11); // RX | TX 
#define ldrPin A0 
int ldrValue = 0; 
void setup() { 
    pinMode(9, OUTPUT); // this pin will pull the HC-05 pin 34 (key pin) HIGH to switch module to AT mode 
    digitalWrite(9, HIGH); 
    pinMode(ldrPin, INPUT); 
    BTSerial.begin(9600); 
    Serial.begin(9600); 

} 
void loop() 
{ 
    ldrValue = analogRead(ldrPin); 
    BTSerial.println(ldrValue); 
    Serial.println(ldrValue); 
    delay(1000); 
} 

La pièce maîtresse du projet qui va recevoir les reaings et l'affichage sur le moniteur série:

#include <SoftwareSerial.h> 
SoftwareSerial BTSerial(10, 11); // RX | TX 
const byte numChars = 1024; 
char receivedChars[numChars]; // an array to store the received data 

boolean newData = false; 

void setup() { 
    pinMode(9, OUTPUT); // this pin will pull the HC-05 pin 34 (key pin) HIGH to switch module to AT mode 
    digitalWrite(9, HIGH); 
    BTSerial.begin(9600); 
    Serial.begin(9600); 
    Serial.println("<Arduino is ready>"); 
} 

void loop() { 
    recvWithEndMarker(); 
    showNewData(); 
} 

void recvWithEndMarker() { 
    static byte ndx = 0; 
    char endMarker = '\n'; 
    char rc; 

    while (BTSerial.available() > 0 && newData == false) { 
     rc = BTSerial.read(); 

     if (rc != endMarker) { 
      receivedChars[ndx] = rc; 
      ndx++; 
      if (ndx >= numChars) { 
       ndx = numChars - 1; 
      } 
     } 
     else { 
      receivedChars[ndx] = '\0'; // terminate the string 
      ndx = 0; 
      newData = true; 
     } 
    } 
} 

void showNewData() { 
    if (newData == true) { 
     Serial.print("This just in ... "); 
     Serial.println(receivedChars); 
     newData = false; 
    } 
} 

Mais la Le problème est que dans le moniteur série, seul le chiffre le plus élevé (3 sur 392) est affiché sur le moniteur série. Les lectures sont correctes mais les lectures complètes ne sont pas affichées. Le moniteur série a montré quelque chose comme ceci:

<Arduino is ready> 
This just in ... 1 
This just in ... 1 
This just in ... 1 
This just in ... 1 
This just in ... 1 
This just in ... 3 
This just in ... 3 
This just in ... 3 
This just in ... 3 
This just in ... 3 

IFIN la partie esclave au lieu de lectures LDR si je vous envoie une chaîne « bonjour », il est l'impression que:

<Arduino is ready> 
This just in ... h 
This just in ... h 
This just in ... h 
This just in ... h 
This just in ... h 
This just in ... h 

J'ai parlé ce lien pour les communications série Serial input basics

Quelqu'un peut-il m'aider s'il vous plaît comme je suis nouveau à arduino.

+0

Au lieu de BTSerial.read() essayer BtSerial .readString() comme dans le [docs] (https://www.arduino.cc/en/Serial/ReadString), et ce sera beaucoup plus facile @ vishruth-kumar –

+0

merci !! ça marche! –

+0

génial! Je l'afficherai comme réponse officielle –

Répondre

0

Pour lire une chaîne directement dans une variable que vous pouvez utiliser:

BTSerial.readString() 

au lieu de:

BTSerial.read() 

comme dans le documentation officiel