данные через frsky-d (имитация frsky-hub)

Musgravehill

На Турнигу уже передавали телеметрию, перепрошив ее на Er9 и подпаяв проводки к АтМега.

Я пробовал гнать данные через порт 9600, он не прозрачный. Приходится энкапсулировать данные и помечать начало посылки. Потом на мониторчик выводил.
На этом форуме был код.

Tohyich

Не, на самой турниге проблем пока не вижу, уровень сигнала и напряжение на делителе A1 выводится замечательно.
Но есть другие параметры (Alt, Gspd, Vspd, проч.), вот я и пытаюсь на Rx приемника подать нужную строку и там вроде не всё так прозрачно…

Musgravehill
Tohyich:

Но есть другие параметры (Alt, Gspd, Vspd, проч.), вот я и пытаюсь на Rx приемника подать нужную строку и там вроде не всё так прозрачно…

А, сымитировать hub, подключенный к D-приемнику. На Гитхабе находил имитацию на Ардуино.

Кстати, не так давно испытывал Frsky S-port на новых приемниках. Он работает как однопроводной rxtx serial. На rcgroups есть код для Ардуино - имитирует всякие датчики.

Tohyich

Так я инвертированный УАРТ и сымитировал (код во втором сообщении) но на Турниге ничего не отображается. То ли прошивка в приемнике обрезанная, то ли я где то косячу…

Musgravehill

В Турниге не нужно искать и включать отображение датчиков?
На Таранисе нужно через меню приемника Search telemetry data - оно думает-думает, а потом показывает, какие датчики есть в потоке телеметрии. Выбираю и размещаю.

Tohyich

В меню настроек телеметрии я могу выбрать несколько параметров, которые будут выведены на экран. Но все выводится с нулями.

Нашел еще один вариант, но тоже ноль реакции. Напряжение на пине ардуины меняется, значит передача идёт, но до турниговского экрана не доходит…

2 months later
Tohyich

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К реостат идет на землю.
Вращая реостат меняем значение высоты и скорости, наблюдаем изменения на передатчике.
Видимо в покупном прошивка не та. Надо перешивать.