2017-02-11 3 views
0

Я хочу выполнить связь Bluetooth между 2 Arduino с HC05 (ведущим) и HC06 (ведомый). Я добился успеха при спаривании двух модулей, но когда я отправляю байт, который я читаю с потенциометра, ведомое устройство получает другое значение, которое может быть 128, -1, 248. Ниже приведены коды ArduinoСвязь между двумя модулями Arduino с модулями HC05 и HC06

Arduino мастер HC05

#include <SoftwareSerial.h> 
SoftwareSerial BTserial(2, 3); // RX | TX 
// Connect the HC-05 TX to Arduino pin 2 RX. 
// Connect the HC-05 RX to Arduino pin 3 TX through a voltage divider. 
int potpin = 0; // analog pin used to connect the potentiometer 

void setup() 
{ 
    // start the serial communication with the host computer 
    Serial.begin(9600); 
    Serial.println("Arduino with HC-05 is ready"); 

    // start communication with the HC-05 using 9600 
    BTserial.begin(9600); 
    Serial.println("BTserial started at 9600"); 
} 

void loop() 
{ 
    BTserial.println(analogRead(potpin)); 
    delay(100); 
    Serial.println(analogRead(potpin)); 
} 

Arduino раб HC06

#include <SoftwareSerial.h> 
#include <Servo.h> 
Servo myservo; 
SoftwareSerial slave(2, 3); // RX | TX 
// Connect the HC-05 TX to Arduino pin 2 RX. 
// Connect the HC-05 RX to Arduino pin 3 TX through a voltage divider. 
int c = 0; 
int val; 
void setup() 
{ 
    // start the serial communication with the host computer 
    Serial.begin(9600); 
    Serial.println("Arduino with HC-06 is ready"); 

    // start communication with the HC-05 using 9600 
    slave.begin(9600); 
    Serial.println("BTserial started at 9600"); 

    myservo.attach(9); 
} 

void loop() 
{ 

    if (slave.available()) 
    { 
     val= slave.read(); 
     Serial.println(val); 
     val = map(val, 0, 1023, 0, 180); 
     myservo.write(val); 
     delay(15);  
    } 
} 

Спасибо за каждый ответ

ответ

1

В ведомом эскизе вы должны заменить slave.read() с parseInt().

Функция read() будет читать один байт. Когда master отправляет целочисленное значение potpin = 130, функция println(potpin) преобразует его в 3 байта (кодируется как символ ascii) и отправит их. На подчиненной стороне вы должны прочитать все входящие байты, сохраненные в строке, и преобразовать строку в интегральную переменную. parseInt() сделает это в одной строке.

+0

с функцией slave.parseInt() заставляет меня ничего не видеть на серийном –

+0

Вы должны сохранить входящий символ в строке и распечатать его для отладки. Справочный пример для [StringToInt] (https://www.arduino.cc/en/Tutorial/StringToIntExample) соответствует тому, что вы хотите. –

+0

, так что, если я это понимаю .... Я должен поместить parseInt() вместо read() для чтения информации в подчиненной программе и установить переменные в двух эскизах, например StringtoInt val; таким образом мы преобразуем информацию, посланную с println из строки в правильное значение int –

Смежные вопросы