0

두 개의 블루투스 모듈 (HC05)이 서로 다른 arduinos에 연결되어 있습니다. 하나는 마스터로 작동하고 다른 하나는 슬레이브로 작동합니다. 하나의 LDR은 슬레이브 파트에 연결되어 있습니다. 그러면 슬레이브 파트는 블루투스를 통해 연속적인 판독 값을 마스터에 전송합니다.블루투스를 통한 센서 읽기 통신

모듈이 성공적으로 페어링되었습니다. 슬레이브에 연결된 푸시 버튼을 사용하여 마스터에 연결된 LED를 제어 할 수도 있습니다.

4 일이 지난 후 마스터의 직렬 모니터에서 LDR 판독 값을 얻으려고 애 쓰고 있습니다.

프로젝트합니다 (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); 
} 

reaings을 받고 시리얼 모니터에 표시됩니다 프로젝트의 마스터 부분 :

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

하지만 문제는 직렬 모니터에서 가장 높은 숫자 (392에서 3)만이 직렬 모니터에 표시된다는 것입니다. 판독 값은 정확하지만 완전한 판독 값은 표시되지 않습니다.

<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 

내가 언급 한 : 나는 다음과 같이 인쇄하고, 문자열을 "안녕하세요"보내고 경우

<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 

대신 LDR 판독의 슬레이브 부분 Ifin : 시리얼 모니터는 다음과 같이 나타났다 시리얼 통신을위한이 링크 Serial input basics

나는 arduino를 처음 접하기 때문에 누군가 나를 도울 수 있습니까? 대신

BTSerial.readString() 

:

BTSerial.read() 

을 같이하는 대신 BTSerial.read의 공식 documentation

+0

에() BTSerial를 시도 –

+0

감사합니다! 잘 했어! –

+0

위대한! 공식 답변으로 게시 해 드리겠습니다. –

답변

0

당신이 사용할 수있는 변수에 직접 문자열을 읽으려면 .readString()은 [docs] (https://www.arduino.cc/en/Serial/ReadString)와 매우 비슷합니다. @ vishruth-kumar