Дистанционное управление по Bluetooth
- Войдите на сайт для отправки комментариев
Втр, 28/11/2017 - 13:28
Здравствуйте.
Цель - управление роботом по 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();
Подскажите пожалуйска как правильно, что почитать. Как вообще правильно принять в порт массив.
Или может и вообще бе массива обойтись...
read - считывает только один байт
букварь:
http://arduino.ru/Reference
Спасибо за помощь. Помогло....
Я не специалист в этой области, хотелось бы поточнее..
Я не специалист в стоматологии, но у меня есть "Дреммель" и дырка в зубе. Хотелось бы подробностей.
Ясно, в общем одни умники собрались. Будем искать ответ в другом месте.
Ясно, в общем одни умники собрались. Будем искать ответ в другом месте.
Меня удивляет, как люди с такой ленью вообще берутся за какие-то хобби, поделки. Справа вверху строка поиска. По запросу "serial прием массива" выдаются более 200 тем. Читайте! Ну кому интересно переписывать всё это ещё раз персонально для Вас?
Ясно, в общем одни умники собрались. Будем искать ответ в другом месте.
ну вот зря вы так, ведь просто все - вы пытаетесь прочитать командой read один байт и поместить в массив из трех байт.
а получаемые с Serial байты и так находяться в ьмассиве - буфере и пока available истино - каждая команда read читает последовательно по одному байту
и вместо того что бы просто привести текст ошибки - а там наверняка написано что нибудь несоответствие типа - вы пытаетесь вину на нас свалить что ваш кривой код не работает
Спасибо, хотя бы за такой ответ. Я же и просил в начале темы подправить, либо подсказать что почитать. А по поводу " как люди с такой ленью" оставте при себе. Никогда сюда не написал бы, просто неделю уже ищю информацию. А мои скетчи конечно "корявые" и взяты так же с выложенных примеров....
В общем Спасибо.
а почитать я уже давал - все разжевано
http://arduino.ru/Reference/Serial
и вообще управлять по BT нормально например у меня не получилось - изначально кривая затея - очень не стабильный канал, да и модули эти китайские зависают с завидной регулярностью
Ну особо выбирать не пришлось, в магазине были модули ВТ, а заказывать через Инет модуль за 200-300 р., пока смысла не вижу.
Буду мучать БТ - с андроидом связь поддерживают оба нормально.
Спасибо за инфо.
и вообще управлять по BT нормально например у меня не получилось - изначально кривая затея - очень не стабильный канал, да и модули эти китайские зависают с завидной регулярностью
не знаю почему так у вас - у меня нормально управляется))))
да и зависаний ни разу не было.
vvadim можете скинуть пример скетча приема - передачи.
Заранее благодарен.