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) что рисует?