HC-05 коммуникация
- Войдите на сайт для отправки комментариев
Всем привет. Ребят, извиняюсь за простой вопрос, но я что-то совсем не могу разобраться. Не получается искать информацию. Есть два hc-05, сопряжены. Один другому шлёт строки. Вот этот "другой" никак не может эту строку понять.
Ниже код, который работает с джойстиком KY-023.
#include <SoftwareSerial.h>
#define PIN_BT_RX 10
#define PIN_BT_TX 11
#define VRX A2
#define VRY A1
#define CENTER_POS 515
SoftwareSerial BTSerial(PIN_BT_RX, PIN_BT_TX);
int getPower(int pointer_x, int pointer_y) {
double power;
power = sqrt(square(pointer_y - CENTER_POS) + square(pointer_x - CENTER_POS));
power = constrain(map(power, 0, 500, 0, 10), 0, 10);
return power;
}
int getDegree(int pointer_x, int pointer_y) {
int deg;
double rad = atan2(pointer_y - CENTER_POS, pointer_x - CENTER_POS);
deg = rad * (180 / M_PI);
if (deg < 0) deg = 360 + deg;
return deg;
}
String getDirection(int degree) {
char *dirs[] = {"RIGHT", "FORWARD_R", "FORWARD", "FORWARD_L",
"LEFT", "BACKWARD_L", "BACKWARD", "BACKWARD_R"};
int idx = (int)((float)(degree + 22.5) / 45) % 8;
return dirs[idx];
}
void setup() {
BTSerial.begin(9600);
}
void loop() {
int pointer_x = analogRead(VRX);
int pointer_y = analogRead(VRY);
int power = getPower(pointer_x, pointer_y);
if (power > 0) {
int deg = getDegree(pointer_x, pointer_y);
char* dir = getDirection(deg);
BTSerial.write(dir);
BTSerial.write(">");
// Serial.print(power);
// Serial.print("\t");
// Serial.print(dir);
// Serial.print("\t");
// Serial.println(deg);
}
}
Получаем углы градусов, далее в массиве выбираем подходящий char*. Далее, полученная строка (например "RIGHT") отправляется в BT: BTSerial.write(dir);
Второй проект никак нормально не читает строку.
Пытался читать в цикле, пока BTSerial.available() > 0 получал char recieved = BTSerial.read(); и добавлял эти значения в String. Может просто не нужно отправлять туда char*?
Как правильно читать строки на втором HC-05?
скетч чтения покажите
скетч чтения покажите
Да ему б сначала с записью разобраца.
char* dir = getDirection(deg);при том, что getDirection отдает String. Поэтому, то что он шлёт - на усмотрение компилятора.
char* dir = getDirection(deg);при том, что getDirection отдает String. Поэтому, то что он шлёт - на усмотрение компилятора.
точно, не посмотрел...
а потом он это еще и во write запишивает...
Serial.print(dir) что рисует?