Аппаратура Radiolink AT 9 2,4 ГГц

konstantin_sakryukin

За схему и оптимизацию кода не ругайте сильно - это первый проект.

Скетч.
// 6-и позиционный переключатель для АТ9
// Пин 3 к контакту 2-х позиционника, который идёт на контроллер АТ9
// Пины 0 и 1 к контактам 3-х позиционника которые идут на контроллер
#define button1 A0
#define button2 A1
#define button3 A2
#define button4 A3
#define button5 A4
#define button6 A5
#define led1 3
#define led2 4
#define led3 5
#define led4 6
#define led5 7
#define led6 8
#define ledardu 13

#define upr1 0
#define upr2 1
#define upr3 2

#define buzzer 9

int flag = 0; // Флаг нажатой кнопки. 0 - отпущена, 1 - нажата
// Позволяет не повторять действия если кнопку удерживают

void setup()
{
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(ledardu, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(upr1, OUTPUT);
pinMode(upr2, OUTPUT);
pinMode(upr3, OUTPUT);
// При старте или сбросе всегда будет включен 1-й режим
digitalWrite(upr1, HIGH);
digitalWrite(upr2, HIGH);
digitalWrite(upr3, HIGH);
digitalWrite(led1, HIGH);
// Проигрываем звук (до, ре, ми) при старте
digitalWrite(ledardu, HIGH);
tone (buzzer, 262);
delay (100);
tone (buzzer, 294);
delay (100);
tone (buzzer, 330);
delay (150);
noTone(buzzer);
digitalWrite(ledardu, LOW);
}

// Функция проигрывания звука нажатой кнопки (переключения режима)
void beep()
{
digitalWrite(ledardu, HIGH);
tone (buzzer, 1500);
delay (100);
tone (buzzer, 1000);
delay (200);
noTone(buzzer);
digitalWrite(ledardu, LOW);
}

void loop()
{
if (analogRead(button1) == 0 && flag == 0)
{
beep();
digitalWrite(upr1, HIGH);
digitalWrite(upr2, HIGH);
digitalWrite(upr3, HIGH);
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
flag = 1;
}
else if (analogRead(button2) == 0 && flag == 0)
{
beep();
digitalWrite(upr1, LOW);
digitalWrite(upr2, HIGH);
digitalWrite(upr3, HIGH);
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
flag = 1;
}
else if (analogRead(button3) == 0 && flag == 0)
{
beep();
digitalWrite(upr1, HIGH);
digitalWrite(upr2, LOW);
digitalWrite(upr3, HIGH);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
flag = 1;
}
else if (analogRead(button4) == 0 && flag == 0)
{
beep();
digitalWrite(upr1, HIGH);
digitalWrite(upr2, HIGH);
digitalWrite(upr3, LOW);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, HIGH);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
flag = 1;
}
else if (analogRead(button5) == 0 && flag == 0)
{
beep();
digitalWrite(upr1, LOW);
digitalWrite(upr2, HIGH);
digitalWrite(upr3, LOW);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, HIGH);
digitalWrite(led6, LOW);
flag = 1;
}
else if (analogRead(button6) == 0 && flag == 0)
{
beep();
digitalWrite(upr1, HIGH);
digitalWrite(upr2, LOW);
digitalWrite(upr3, LOW);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, HIGH);
flag = 1;
}
// Сброс флага если кнопка была нажата ранее, а сейчас отпущена
else if (analogRead(button1) != 0 && analogRead(button2) != 0 &&analogRead(button3) != 0 &&analogRead(button4) != 0 &&analogRead(button5) != 0 &&analogRead(button6) != 0 && flag !=0)
{
flag = 0;
}
delay(10);
}

Воздух

Подскажите плиз, можно ли как то перешить приемник R6D первой версии без PPM, что бы у него ppm или s-bus появился? Или там в железе отличия существенные?

SkyPlayer
Воздух:

можно ли как то перешить приемник

Радиолинковские приёмники не перешиваются

magicwinter

В продолжении истории с небиндящимися приемниками. При включении звук и вибрация, вот видео:

youtu.be/g_7hzUEtjPk

FRUKT

А ВЧ модуль(RF-MODE) на аппе включен? Судя по видео-нет.

magicwinter
FRUKT:

А ВЧ модуль на аппе включен?

Так как я пока еще не во всем разобрался в этой аппе - то где его можно отключить? Потому что целенаправленно ничего не отключал.

wind7

У тебя Одна лампа гаснет ? а должно гореть обе , я у себя отключаю передатчик в настройках когда летаю в симуляторе чтобы не грелся и не сажал батарейку

FRUKT

Красная лампочка загорается если включен какой-то микс на конкретной модели, если миксы не активированы, то при включении ВЧ модуля будет гореть только зелёная лампочка.

magicwinter
FRUKT:

Меню PARAMETER->RF MODE->ON

Сработало. Непонятно, почему вдруг отключилась эта опция… (

DemB

Впервые возникла необходимость воспользоваться тренерским разъемом (подключаю хедтрекер). Сервы камеры на 7 и 8 каналах. Возникает непонятная ситуация. Смотрю на дисплей servo, и вижу, что при включении тренеского режима шкалы этих каналов подскакивают сильно вверх. Соответственно и камера отворачивается и и задирает “голову”. Отпускаю - и камера возвращается в правильное положение. Есть возможность, и как настроить аппу, что бы при включении тренера машинки начинали свою работу с положения, при котором камера смотрит прямо? Если нужно, запишу видео этой проблемы для наглядности.

Александр_Г

Калибровка хедрекера должна решить Вашу проблему, по типу - трекер в нуле на выходе 7-8 каналы 1 мсек.

gpp

Мужики. Кто ремонтировал приемник R9DS? У меня при краше оторвало антену от платы. Какую жилу куда припаивать? Спасибо!

SkyPlayer
gpp:

Какую жилу куда припаивать?

Так там же видно - “подковка” под пайку оплётки, а по центру пятачок под центральную жилку.

Sotona_RUS

Камрады, только постигаю летающую технику,всю жизнь машинами был увлечен, так вот собственно купил самик-тренер у человека, попросил с настройкой аппаратуры (Radiolink AT9S), а он в ней совершенно ничего не понял. Реально два часа элероны настраивали, а там еще и закрылки есть,которые так и не настроили. Сам он адепт Футабы,сказал что все непонятно и мороченно, короче оставив меня один на один с настройками. Во-первых какой тип летающего средства выбрать для простого самолет (Элероны + Закрылки ), подключать все в отдельные каналы ,или через Y кабель (это касается и элеронов и закрылок). У него все было в разные каналы воткнуто. Прошу сильно не пинать,тему маломальски осилил,но тут народ в основном волнует дальность и телеметрия))

SVR-Vovka

Однозначно в разные. Вам же необходимо независимое управление. Тем более, что элероны работают в «противофазе»

karmann

Да настраивается всё как и в других аппаратурах, выбираем тип модели, вставляем соответствующие разъёмы серво в приёмник, настраиваем расходы, реверсы (если нужно), экспоненту (если нужно).
Обязательно проверить работу рулей перед полётом!

konstantin_sakryukin

Доброго зоровья!
Полностью готов мой вариант переключателя полётных режимов АРМ для RadioLink AT9/AT9S.
В схеме удалил подтягивающие резисторы и включил подтяжку интегрированную в ATmega328.

Вот новая схема:

Вот новый скетч:

// 6-и позиционный переключатель полётных режимов АРМ для АТ9
// Пин 3 к контакту 2-х позиционника, который идёт на контроллер АТ9
// Пины 0 и 1 к контактам 3-х позиционника которые идут на контроллер
#define button1 A0
#define button2 A1
#define button3 A2
#define button4 A3
#define button5 A4
#define button6 A5
#define led1 3
#define led2 4
#define led3 5
#define led4 6
#define led5 7
#define led6 8
#define ledardu 13

#define upr1 0
#define upr2 1
#define upr3 2

#define buzzer 9

int flag = 0; // Флаг нажатой кнопки. 0 - отпущена, 1 - нажата
// Позволяет не повторять действия если кнопку удерживают

void setup()
{
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(ledardu, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(upr1, OUTPUT);
pinMode(upr2, OUTPUT);
pinMode(upr3, OUTPUT);
// При старте или сбросе всегда будет включен 3-й режим
// В моём случае - это Stab.
digitalWrite(upr1, HIGH);
digitalWrite(upr2, LOW);
digitalWrite(upr3, HIGH);
digitalWrite(led3, HIGH);
// Подключаем интегрированные в ATmega328 резисторы подтяжки
digitalWrite(button1, HIGH);
digitalWrite(button2, HIGH);
digitalWrite(button3, HIGH);
digitalWrite(button4, HIGH);
digitalWrite(button5, HIGH);
digitalWrite(button6, HIGH);
// Задержка на 1 секунду перед стартовым звуком
// чтобы со звуком аппаратуры не совпадал
delay (1000);
// Проигрываем звук (до, ре, ми) при старте
digitalWrite(ledardu, HIGH);
tone (buzzer, 262);
delay (100);
tone (buzzer, 294);
delay (100);
tone (buzzer, 330);
delay (150);
noTone(buzzer);
digitalWrite(ledardu, LOW);
}

// Функция проигрывания звука нажатой кнопки (переключения режима)
void beep()
{
digitalWrite(ledardu, HIGH);
tone (buzzer, 1500);
delay (100);
tone (buzzer, 1000);
delay (200);
noTone(buzzer);
digitalWrite(ledardu, LOW);
}

void loop()
{
if (digitalRead(button1) == 0 && flag == 0)
{
beep();
digitalWrite(upr1, HIGH);
digitalWrite(upr2, HIGH);
digitalWrite(upr3, HIGH);
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
flag = 1;
}
else if (digitalRead(button2) == 0 && flag == 0)
{
beep();
digitalWrite(upr1, LOW);
digitalWrite(upr2, HIGH);
digitalWrite(upr3, HIGH);
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
flag = 1;
}
else if (digitalRead(button3) == 0 && flag == 0)
{
beep();
digitalWrite(upr1, HIGH);
digitalWrite(upr2, LOW);
digitalWrite(upr3, HIGH);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
flag = 1;
}
else if (digitalRead(button4) == 0 && flag == 0)
{
beep();
digitalWrite(upr1, HIGH);
digitalWrite(upr2, HIGH);
digitalWrite(upr3, LOW);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, HIGH);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
flag = 1;
}
else if (digitalRead(button5) == 0 && flag == 0)
{
beep();
digitalWrite(upr1, LOW);
digitalWrite(upr2, HIGH);
digitalWrite(upr3, LOW);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, HIGH);
digitalWrite(led6, LOW);
flag = 1;
}
else if (digitalRead(button6) == 0 && flag == 0)
{
beep();
digitalWrite(upr1, HIGH);
digitalWrite(upr2, LOW);
digitalWrite(upr3, LOW);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, HIGH);
flag = 1;
}
// Сброс флага если кнопка была нажата ранее, а сейчас отпущена
else if (digitalRead(button1) != 0 && digitalRead(button2) != 0 && digitalRead(button3) != 0 && digitalRead(button4) != 0 && digitalRead(button5) != 0 && digitalRead(button6) != 0 && flag !=0)
{
flag = 0;
}
delay(10);
}

Вот внешний вид получившегося переключателя:


По умолчанию при старте включается режим привязанный к кнопке 3.
Она в моём варианте слева вверху.

Dautov

Круто. Тут все видно. А то приходилось путаться в двух тумблера (двух позиционный и трех) для шести режимов, хотя на мониторе OSD и показывает режимы (не все) теряться можно.
А тут все на виду и легко доступно. Спасибо.

konstantin_sakryukin
Dautov:

А тут все на виду и легко доступно.

Да, но минус не большой имеется!
Если Вы решите изменить режимы в самой аппаратуре, то придётся переделать и лицевую панель выносного модуля перепечатав наклейки с названиями тех режимов. На фотографиях видно, что первый и второй вариант лицевых панелей отличаются.
У меня лицевая панель напечатана лазерным принтером на плёнке.
Как идея на будущее, можно основную часть панели напечатать без названий режимов, а ещё на куске плёнки напечатать режимы и просто делать сменную вставку подсовывая плёнку с ними под плёнку лицевой панели. Или даже имена режимов можно просто на бумаге распечатать.