HC-05 коммуникация

ki.korneev
Offline
Зарегистрирован: 20.06.2022

Всем привет. Ребят, извиняюсь за простой вопрос, но я что-то совсем не могу разобраться. Не получается искать информацию. Есть два 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? 

b707
Offline
Зарегистрирован: 26.05.2017

скетч чтения покажите

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

b707 пишет:

скетч чтения покажите

Да ему б сначала с записью разобраца. 

char* dir = getDirection(deg);

при том, что getDirection отдает String.  Поэтому, то что он шлёт - на усмотрение компилятора. 

 

b707
Offline
Зарегистрирован: 26.05.2017

DetSimen пишет:

char* dir = getDirection(deg);

при том, что getDirection отдает String.  Поэтому, то что он шлёт - на усмотрение компилятора. 

точно, не посмотрел...

а потом он это еще и во write запишивает...

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Serial.print(dir) что рисует?