Дистанционное управление по Bluetooth

SergeyA
Offline
Зарегистрирован: 22.10.2017

Здравствуйте.

Цель - управление роботом по Bluetooth. В роли передающего Bluetooth НС-05 (подключен к ардуино нано) в роли приёмника Bluetooth НС-06 (подключен ардуино уно). Модуль Bluetooth НС-05 настроен АТ командами как передатчик. Для начала попытка передать и принять 3 сигнала - с 2-х потенциометров (для управл.серво) ну и 1 кнопки.

Скетч передатчика -

    #include          <SoftwareSerial.h>
    #define           pinX  A1               // Ось X джойстика R= 5 kOm
    #define           pinY  A2               // Ось Y джойстика R= 5 kOm
    #define           kn1   5                  // кнопка pin 5 
  
    int               kodX;                          // переменная kodX для хранения текущего положения потенциометра  
    int               kodY;                            // переменная kodY для хранения текущего положения потенциометра  
    boolean           kodKn1;                // переменная хранения данных кнопки
    int               ugoL1;                        // переменная для преобразования данных в угол 0-180 
    int               ugoL2;                        // переменная для преобразования данных в угол 0-180
    int               mass[3];                      // массив для передачи данных
  
    SoftwareSerial    BTSerial(11, 10);      //Создаём объект BTSerial, указывая выводы (RX, TX) Arduino NANO
  
void setup() {
    pinMode(pinX, 0);                                 // Устанавливаем режим работы вывода pinX как вход.
    pinMode(pinY, 0);
    pinMode(kn1,  0);
   
    BTSerial.begin(9600);                       // скорость передачи данных между bluetooth модулями 
    Serial.begin(9600);                          // скорость передачи данных между передатчиком и комп.
    delay(500);
}                            

void loop() {

    kodX = analogRead(pinX);                      // считываем аналоговое значение оси Х 
    kodY = analogRead(pinY);                       // считываем аналоговое значение оси Y 
    kodKn1 = digitalRead(kn1);                     // считываем цифровое значение kn1
    ugoL1 = map(kodX,0,1023,5,175);          // масштабируем значение к интервалу 5-175
    ugoL2 = map(kodY,0,1023,5,175);          // масштабируем значение к интервалу 5-175
    mass[0] = ugoL1;
    mass[1] = ugoL2;
    mass[2] = kodKn1;
    
    BTSerial.write (mass);
// выводим значения для контроля в монитор порта   
    Serial.print("X = "); Serial.print(kodX);
    Serial.print("    ");
   
    Serial.print("ugoL1 = "); Serial.print(ugoL1);
    Serial.print("    ");

    Serial.print("Y = "); Serial.print(kodY);
    Serial.print("    ");
   
    Serial.print("ugoL2 = "); Serial.print(ugoL2);
    Serial.print("    ");
    Serial.println();
    delay(50);
}

работает.

Скетч приёмника -

 

 #include               <Servo.h>          
    Servo                 servo1;
    Servo                 servo2;
   char                    mass[3];
    #define               zEl 2               // зел. с/д
  
void setup() {
    Serial.begin(9600);                       
    servo1.attach(11);
    servo1.write(90);                           // выравнивание угла серво привода1 
    servo2.attach(9);
    servo2.write(90);                           // выравнивание угла серво привода2 
    pinMode(zEl, 1);                            // зел. с/д
    delay(500);                               
}
void loop() {
    if(Serial.available()) {
//       Serial.read(mass); 
       mass = Serial.read();
       servo1.write(mass[0]);
       servo2.write(mass[1]);
       digitalWrite(zEl, mass[2]);
                           }             
}                                  

Компилятор ругается на строку -   mass = Serial.read();

Подскажите пожалуйска как правильно, что почитать. Как вообще правильно принять в порт массив.

Или может и вообще бе массива обойтись...          

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

read - считывает только один байт

букварь:

http://arduino.ru/Reference

 

SergeyA
Offline
Зарегистрирован: 22.10.2017

Спасибо за помощь. Помогло....

SergeyA
Offline
Зарегистрирован: 22.10.2017

Я не специалист в этой области, хотелось бы поточнее..

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Я не специалист в стоматологии, но у меня есть "Дреммель" и дырка в зубе. Хотелось бы подробностей.

SergeyA
Offline
Зарегистрирован: 22.10.2017

Ясно, в общем одни умники собрались. Будем искать ответ в другом месте.

kalapanga
Offline
Зарегистрирован: 23.10.2016

SergeyA пишет:

Ясно, в общем одни умники собрались. Будем искать ответ в другом месте.

Меня удивляет, как люди с такой ленью вообще берутся за какие-то хобби, поделки. Справа вверху строка поиска. По запросу "serial прием массива" выдаются более 200 тем. Читайте! Ну кому интересно переписывать всё это ещё раз персонально для Вас?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

SergeyA пишет:

Ясно, в общем одни умники собрались. Будем искать ответ в другом месте.

 

ну вот зря вы так, ведь просто все - вы пытаетесь прочитать командой read один байт и поместить в массив из трех байт.

а получаемые с Serial байты и так находяться в ьмассиве - буфере и пока available истино - каждая команда read читает последовательно по одному байту

и вместо того что бы просто привести текст ошибки - а там наверняка написано что нибудь несоответствие типа - вы пытаетесь вину на нас свалить что ваш кривой код не работает

SergeyA
Offline
Зарегистрирован: 22.10.2017

Спасибо, хотя бы за такой ответ. Я же и просил в начале темы подправить, либо подсказать что почитать. А по поводу " как люди с такой ленью" оставте при себе. Никогда сюда не написал бы, просто неделю уже ищю информацию. А мои скетчи конечно "корявые" и взяты так же с выложенных примеров....

В общем Спасибо.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

а почитать я уже давал - все разжевано

http://arduino.ru/Reference/Serial

 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

и вообще управлять по BT нормально например у меня не получилось - изначально кривая затея - очень не стабильный канал, да и модули эти китайские зависают с завидной регулярностью

SergeyA
Offline
Зарегистрирован: 22.10.2017

Ну особо выбирать не пришлось, в магазине были модули ВТ, а заказывать через Инет модуль за 200-300 р., пока смысла не вижу.

Буду мучать БТ - с андроидом связь поддерживают оба нормально.

Спасибо за инфо.

vvadim
Offline
Зарегистрирован: 23.05.2012

andycat пишет:

и вообще управлять по BT нормально например у меня не получилось - изначально кривая затея - очень не стабильный канал, да и модули эти китайские зависают с завидной регулярностью

 

не знаю почему так у вас - у меня нормально управляется))))

да и зависаний ни разу не было.

SergeyA
Offline
Зарегистрирован: 22.10.2017

vvadim можете скинуть пример скетча приема - передачи.

Заранее благодарен.