данные через frsky-d (имитация frsky-hub)
На Турнигу уже передавали телеметрию, перепрошив ее на Er9 и подпаяв проводки к АтМега.
Я пробовал гнать данные через порт 9600, он не прозрачный. Приходится энкапсулировать данные и помечать начало посылки. Потом на мониторчик выводил.
На этом форуме был код.
Не, на самой турниге проблем пока не вижу, уровень сигнала и напряжение на делителе A1 выводится замечательно.
Но есть другие параметры (Alt, Gspd, Vspd, проч.), вот я и пытаюсь на Rx приемника подать нужную строку и там вроде не всё так прозрачно…
Но есть другие параметры (Alt, Gspd, Vspd, проч.), вот я и пытаюсь на Rx приемника подать нужную строку и там вроде не всё так прозрачно…
А, сымитировать hub, подключенный к D-приемнику. На Гитхабе находил имитацию на Ардуино.
Кстати, не так давно испытывал Frsky S-port на новых приемниках. Он работает как однопроводной rxtx serial. На rcgroups есть код для Ардуино - имитирует всякие датчики.
Так я инвертированный УАРТ и сымитировал (код во втором сообщении) но на Турниге ничего не отображается. То ли прошивка в приемнике обрезанная, то ли я где то косячу…
В Турниге не нужно искать и включать отображение датчиков?
На Таранисе нужно через меню приемника Search telemetry data - оно думает-думает, а потом показывает, какие датчики есть в потоке телеметрии. Выбираю и размещаю.
В меню настроек телеметрии я могу выбрать несколько параметров, которые будут выведены на экран. Но все выводится с нулями.
Нашел еще один вариант, но тоже ноль реакции. Напряжение на пине ардуины меняется, значит передача идёт, но до турниговского экрана не доходит…
C самодельным приемником работает такой код:
#include <SoftwareSerial.h> // To communicate with the FrSky RX
#define PIN_SerialTX 2 // the pin to transmit the serial data to the frsky telemetry enabled receiver
#define FRSKY_USERDATA_BARO_ALT_B 0x10 //#define FRSKY_USERDATA_GPS_ALT_B 0x01
#define FRSKY_USERDATA_GPS_SPEED_B 0x11
#define FRSKY_USERDATA_GPS_SPEED_A 0x19
int inByte = 0; // incoming serial byte
int analogPin = 3;
SoftwareSerial mySerial(0, PIN_SerialTX,true); // Software Serial is used including the Inverted Signal option ( the "true" in the line below )
void setup() {
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
mySerial.begin(9600);
pinMode(A3, INPUT_PULLUP);
}
void loop() {
inByte=analogRead(analogPin); // read the input pin
Serial.println(inByte);
SendValue(FRSKY_USERDATA_BARO_ALT_B, inByte);
SendValue(FRSKY_USERDATA_GPS_SPEED_B, inByte);
SendValue(FRSKY_USERDATA_GPS_SPEED_A, inByte);
delay(100);
}
void establishContact() {
while (Serial.available() <= 0) {
Serial.println("Ready"); // send a capital A
delay(1000);
}
}
void SendValue(uint8_t ID, uint16_t Value) {
uint8_t tmp1 = Value & 0x00ff;
uint8_t tmp2 = (Value & 0xff00)>>8;
mySerial.write(0x5E);
mySerial.write(ID);
if(tmp1 == 0x5E) {
mySerial.write(0x5D);
mySerial.write(0x3E);
}
else if(tmp1 == 0x5D) {
mySerial.write(0x5D);
mySerial.write(0x3D);
}
else {
mySerial.write(tmp1);
}
if(tmp2 == 0x5E) {
mySerial.write(0x5D);
mySerial.write(0x3E);
}
else if(tmp2 == 0x5D) {
mySerial.write(0x5D);
mySerial.write(0x3D);
}
else {
mySerial.write(tmp2);
}
mySerial.write(0x5E);
}
со второго пина ардуины идет провод на RX приемника.
пин A3 через 10К реостат идет на землю.
Вращая реостат меняем значение высоты и скорости, наблюдаем изменения на передатчике.
Видимо в покупном прошивка не та. Надо перешивать.