Переключатель режимов по схеме Алексея Козина для Turnigy 9x

В статье будет рассказано об удобном переключателе полетных режимов для контроллера APM, разработанным Алексеем Козиным. Основой переключателя является микроконтроллер ATmega328, входящий в Arduino Pro Mini.

Алексей Козин предложил отличный вариант (ссылки на дневник и сайт) переключателя полетных режимов APM для аппаратуры радиоуправления. Подойдет, наверно, практически ко всем аппаратурам, имеющим хотя бы один аналоговый регулятор (переменный резистор) — «крутилку». Предполагается его замена на изготавливаемый переключатель. О плюсах переключателя по сравнению с другими способами организации переключения режимов  и настройке описано в дневнике. На аппаратуре надо заранее настроить «крутилку» на выход канала 5. Этот канал с аппаратуры подключить на 5й входной канал APM и проверить работу. Лучше будет установить прошивку er9x (источник на прошивку можно найти в статье «Настройка переключателя режимов на прошивке er9x для Turnigy 9x»).

Схема переключателя в первом исполнении (на момент разработки у APM было 5 режимов):

Схема переключателя на 5 режимов

Схема переключателя на 5 режимов

Исходный код переключателя (5 режимов)
/*
s1 - s5 & LEDS connected to analog pins 1-5
its numbers from 14 to 18
*/
#define AnalogOut 10 // PWM out
int SelBtn = 14; // default
int BtnLevels[19];
void setup()
{
Serial.begin(9600);
//5 of 6 modes
BtnLevels[14] = 0; // 1 кнопка
BtnLevels[15] = 84;
BtnLevels[16] = 127;
BtnLevels[17] = 169;
BtnLevels[18] = 255; // 5 кнопка
//force pwm
TCCR1B = 0x01;
delay(100); 
pinMode(SelBtn, OUTPUT);
digitalWrite(SelBtn,0);
analogWrite (AnalogOut, BtnLevels[SelBtn]);
}
void loop()
{
ScanBtns();
delay(10);
}
void ScanBtns()
{
for  (int i=14; i <= 18; i++)
     ScanBtn(i);
}
void ScanBtn(int ScanPin)
{
if (SelBtn != ScanPin) 
{
pinMode(ScanPin, INPUT);
if (digitalRead(ScanPin)==0)
  {
      SelBtn = ScanPin;
      unsetOther(ScanPin);
      while (digitalRead(ScanPin)==0); // hold scaning until relise button
      pinMode(ScanPin, OUTPUT);
      digitalWrite(ScanPin,LOW);
  }
}
}
void unsetOther(int excludePin)
{
for  (int i=14; i <= 18; i++)
    {
    if (i != excludePin)
        pinMode(i, INPUT);
        digitalWrite(i,HIGH); 
    } 
analogWrite (AnalogOut, BtnLevels[excludePin]);
Serial.println(BtnLevels[excludePin]);  
}

Добавление 6й кнопки (6 режимов):

Схема переключателя режимов

Схема переключателя режимов

Исходный код переключателя (6 режимов)
/*
s1 - s6 & LEDS connected to analog pins 1-6
its numbers from 14 to 19
*/
#include <EEPROM.h>
#define AnalogOut 10 // PWM out
#define SoundOut 7 //d7 speaker out
int SelBtn = 14; // default
//int BtnLevels[20];
void setup()
{
Serial.begin(9600);
pinMode(8, INPUT); //tune up button
pinMode(9, INPUT); //tune down button
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
if  (EEPROM.read(1)!=124 || digitalRead(9) == LOW ) // if pin 9 short to 0 start reset defaults
reset_eprom();
//force pwm
TCCR1B = 0x01;
delay(100);
pinMode(SelBtn, OUTPUT);
digitalWrite(SelBtn,0);
analogWrite (AnalogOut, BtnLevel(SelBtn));
tone(SoundOut, 2000, 150);
delay (200);
tone(SoundOut, 1000, 400);
}
void loop()
{
ScanBtns();
TuneLevel();
delay(10);
}
void ScanBtns()
{
for  (int i=14; i <= 19; i++)
ScanBtn(i);
}
void ScanBtn(int ScanPin)
{
if (SelBtn != ScanPin)
{
pinMode(ScanPin, INPUT);
digitalWrite(ScanPin,HIGH);
if (digitalRead(ScanPin)==0)
{
SelBtn = ScanPin;
unsetOther(ScanPin);
tone(SoundOut, 5500, 150);
while (digitalRead(ScanPin)==0); // hold scaning until relise button
pinMode(ScanPin, OUTPUT);
digitalWrite(ScanPin,LOW);
}
}
}
void unsetOther(int excludePin)
{
for  (int i=14; i <= 19; i++)
{
if (i != excludePin)
pinMode(i, INPUT);
digitalWrite(i,HIGH);
}
analogWrite (AnalogOut, BtnLevel(excludePin));
Serial.println(BtnLevel(excludePin));
}
void reset_eprom()
{
EEPROM.write(1, 124); //mark eeprom inited
EEPROM.write(14, 0);
EEPROM.write(15, 84);
EEPROM.write(16, 127);
EEPROM.write(17, 160);
EEPROM.write(18, 190);
EEPROM.write(19, 255);
}
byte BtnLevel(int pin)
{
return EEPROM.read(pin);
}
void TuneLevel()
{
byte newlevel = 0;
if  ( digitalRead(9) == LOW)
{
newlevel = constrain(BtnLevel(SelBtn) - 1 ,0,255);
EEPROM.write(SelBtn, newlevel);
showpin(newlevel);
}
if  ( digitalRead(8) == LOW)
{
newlevel = constrain(BtnLevel(SelBtn) + 1 ,0,255);
showpin(newlevel);
}
}
void showpin(byte newlevel)
{
EEPROM.write(SelBtn, newlevel);
analogWrite (AnalogOut, newlevel);
Serial.println(newlevel);
if (newlevel >1 && newlevel < 254 )
digitalWrite(SelBtn,HIGH);
delay(200);
digitalWrite(SelBtn,LOW);
}

Актуальная прошивка позволяет удобно подстраивать уровни каждого из каналов.

Возможности:

  • при замыкании пина D9 на GND после инициализации контролера происходит регулировка уровня выбранного канала в меньшую сторону, уменьшение индицируется миганием светодиода если светодиод перестал мигать — достигнуто максимальное или минимальное значение
  • при замыкании пина D8 на GND после инициализации контролера происходит регулировка уровня выбранного канала в большую сторону, уменьшение индицируется миганием светодиода если светодиод перестал мигать — достигнуто максимальное или минимальное значение
  • при замыкании пина D9 на GND в момент включения питания происходит сброс параметров на те что указаны в прошивке по умолчанию
  • На вывод D7 можно подключить пьезо — пищалку, при этом переключение каналов подтверждается писком. (Индуктивные пищалки следует зашунтировать защитным диодом параллельно пищалке, анодом на GND)

Это расширение возможностей позволит избежать трудоемкой процедуры калибровки аппаратуры и прошивки.

После изготовления платы с кнопками и загрузки прошивки в Arduino приступаем к сборке. Спаиваем все согласно схеме. Далее разбираем аппаратуру и снимаем понравившуюся/ненужную «крутилку». Мультиметром ищем провода земли и питания +5В. Третий провод — «сигнальный». Подпаиваем собранный переключатель к этим трем проводам. Далее монтируем переключатель на аппаратуре удобным для вас способом и собираем аппаратуру (до сборки можно предварительно включить и проверить работу). Проверяем работу переключателя и показания в Mission Planner.

Более подробную информацию можно найти в дневнике или сайте Алексея Козина (см. ссылки выше) и сказать ему «Спасибо»!

Update 04.06.2014: Имеется аналогичный девайс, сделанный за бугром.

Update 10.08.2014: Видеоматериал от Юлиана.

Юлиан доработал свою аппаратуру платой, сделанной Александром Мининым по схеме Алексея Козина (в видео оговорка). Смотрим процесс подключения на видео!

Update 10.04.2015: Заметка от пилота Dimon по поводу уровней сигнала.

Развернуть

Код из 6 (канального) надо поправить. Объясню почему — по умолчанию взяты данные режимов из 5 канального и в результате получаем

EEPROM.write(14, 0); — Минимальное значение 988
EEPROM.write(15, 84); — 1320
EEPROM.write(16, 127); — 1495
EEPROM.write(17, 160); — 1629
EEPROM.write(18, 190); — 1751
EEPROM.write(19, 255); — максимальное значение 2010

у меня получилось так да и у всех примерно так-же. теперь смотрим режимы в MP

  • 1 0 -1230
  • 2 1231 — 1360
  • 3 1361 — 1490
  • 4 1491 — 1620
  • 5 1621 — 1749
  • 6 1750 +

И получаем что последних 2 режима попадают на одну и туже позицию в МР так как 6 режим начинается 1750 + . и нет попадания в 3 режим Да и 5 режим на грани что тоже не очень хорошо. Можно конечно подрегулировать кнопками, но я например не собирался их делать — но пришлось.

А вот и нашел ответ в другом месте :)

EEPROM.write(14, 0);
EEPROM.write(15, 51);
EEPROM.write(16, 102);
EEPROM.write(17, 153);
EEPROM.write(18, 204);
EEPROM.write(19, 255);

Для аппаратуры Turnigy 9xr необходимо применять Arduino на 3.3В (либо колхозить из Arduino на 5В) с уровнем сигнала 3.3В, т.к. на аппаратуре на резистор поступает 3.3 вместо 5В. Хоть и 16МГц от 3.3В не документируется, но работает нормально. Проверено.

Update 06.04.2016: Модифицированная версия прошивки для переключателя на 3 режима от пользователя Kalerva

Трехкнопочный переключатель режимов (делался под naza m lite v1 прошитый во второй).

Т.к. в naza всего пять режимов полетов, два из которых промежуточный failsafe. А режим manual аналог режима камикадзе.
Было решено собрать переключатель всего лишь трех полетных режимов  (GPS, Attitude и FS).
a10 — PWM
d7 — buzzerr
d8* — tune up * — зажатая при включении сбросит настройки свитчера
d9 — tune down
a0 — led1
a1 — led2
a2 — led3

Схема переключателя на 3 режима

Схема переключателя на 3 режима

Исходный код переключателя (3 режима)

/*
***********************************************************************************************
***************************** Created by Aleksey Kozin ****************************************
***********************************************************************************************
********************************** mod by Kalerva *********************************************
***********************************************************************************************

s1 — s3 & LEDS connected to analog pins 0-2
its numbers from 14 to 16
*/
#include <EEPROM.h>
#define AnalogOut 10 // PWM out
#define SoundOut 7 //d7 speaker out
int SelBtn = 14; // default
//int BtnLevels[20];

void setup()
{
Serial.begin(9600);
pinMode(8, INPUT); //tune up button
pinMode(9, INPUT); //tune down button
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
if (EEPROM.read(1)!=124 || digitalRead(9) == LOW ) // if pin 9 short to 0 start reset defaults
reset_eeprom();
//force pwm
TCCR1B = 0x01;
delay(100);
pinMode(SelBtn, OUTPUT);
digitalWrite(SelBtn,0);
analogWrite (AnalogOut, BtnLevel(SelBtn));
tone(SoundOut, 4000, 150);
delay (200);
tone(SoundOut, 1000, 400);
}
void loop()
{
ScanBtns();
TuneLevel();
delay(10);
}
void ScanBtns()
{
for (int i=14; i <= 16; i++)
ScanBtn(i);
}
void ScanBtn(int ScanPin)
{
if (SelBtn != ScanPin)
{
pinMode(ScanPin, INPUT);
if (digitalRead(ScanPin)==0)
{
SelBtn = ScanPin;
unsetOther(ScanPin);
tone(SoundOut, 5500, 150);
while (digitalRead(ScanPin)==0); // hold scaning until relise button
pinMode(ScanPin, OUTPUT);
digitalWrite(ScanPin,LOW);
}
}
}
void unsetOther(int excludePin)
{
for (int i=14; i <= 16; i++)
{
if (i != excludePin)
pinMode(i, INPUT);
digitalWrite(i,HIGH);
}
analogWrite (AnalogOut, BtnLevel(excludePin));
Serial.println(BtnLevel(excludePin));
}
void reset_eeprom()
{
EEPROM.write(1, 124); //mark eeprom inited
EEPROM.write(14, 0);                                                //значения выставленные по-умолчанию при сбросе первого,
EEPROM.write(15, 127);                                            //второго и
EEPROM.write(16, 255);                                            //третьего полетных режимов
}
byte BtnLevel(int pin)
{
return EEPROM.read(pin);
}
void TuneLevel()
{
byte newlevel = 0;
if ( digitalRead(9) == LOW)
{
newlevel = constrain(BtnLevel(SelBtn) — 1 ,0,255);
EEPROM.write(SelBtn, newlevel);
showpin(newlevel);
}
if ( digitalRead(8) == LOW)
{
newlevel = constrain(BtnLevel(SelBtn) + 1 ,0,255);
showpin(newlevel);
}
}
void showpin(byte newlevel)
{
EEPROM.write(SelBtn, newlevel);
analogWrite (AnalogOut, newlevel);
Serial.println(newlevel);
if (newlevel >1 && newlevel < 254 )
digitalWrite(SelBtn,HIGH);
delay(200);
digitalWrite(SelBtn,LOW);
}


Если вы нашли ошибку на странице, то нажмите Shift + Enter или нажмите здесь, чтобы уведомить нас.

60 комментариев (я)

    1. Фото аватараraefa Автор Ответить

      Не сомневаюсь!
      Андрей, видать в этот раз вы не очень внимательно читали этот момент: «Подойдет наверно практически ко всем аппаратурам, имеющим хотя бы один аналоговый регулятор (переменный резистор) — «крутилку».» 🙂

  1. Сергей Ответить

    Отличное дело делаете, парни! Мегауважуха вам!
    Номиналы резюков и кондеров не увидел только.

  2. Митя Ответить

    Тоже заказал у Александра Минина переключатель, он сейчас присылает с доп. комплектацией:
    — две наклейки на корпус уже с высечкой под надписи
    — сами наклейки с надписями режимов
    — пластиковые упоры и панельку подсветки (ту что Юлиан вырезал со старого экрана Нокии)

  3. Сергей Ответить

    Приветствую!
    Можно ли проверить работоспособность схемы не подключая к аппе? Собрал шестикнопочную схему. Судя по переключению СИДов робит, но не хочу рисковать.

    1. Фото аватараraefa Автор Ответить

      По светодиодам смотреть не совсем правильно. Они показывают, что программа работает. А вот что на выходе ШИМ — это надо смотреть. Вариантов не много: смотреть осциллографом, либо подключить в канал APM и смотреть значение импульса канала в MP.
      Рисковать там особо нечем. Главное в разных положениях посмотрите мультиметром, чтобы не было превышения напряжения 5В, чего и не должно быть.

      1. Сергей Ответить

        Я к сожалению далек от электроники такого уровня, но в проге «Блинк» и производных от нее яркость светодиода регулится как раз за счет ШИМа. Мож имеет смысл попробовать или там другой алгоритм модуляции?

          1. Сергей Ответить

            проверил так: на Д10 прилепил светодиод. на первой кнопке не светит, потом яркость понемногу увеличивается.

  4. Сергей Ответить

    Подключил, работает, но только в первой половине диапазона. Т.е. первая кнопка 990, шестая 1470. Аппа 9XR, прошивка стоковая. Пробую настроить аппу, но т.к. я ее только недавно получил особыми познаниями не обладаю. Если подскажете куда копать, буду весьма признателен.

    забыл добавить: при нажатой шестой кнопке после фильтра, на выходе 4.2 В

    откалибровал стики, крутилки и переключатель на аппе, все встало на свои места.

  5. Дмитрий Ответить

    Добрый день посмотрел видео очень понравилось.
    Можно получить ссылку Александра Минина, чтобы связаться и приобрести эту плату для установки в аппу.

    1. Фото аватараraefa Автор Ответить

      Добрый день. У меня есть только ссылки на сайт Алексея (в начале статьи). Разработчик он. А Александр видимо повторил его идею. А как связаться с Александром, наверно знает Юлиан, но мы с ним давно не связывались.

    1. Фото аватараraefa Автор Ответить

      Подключается так же. Процессор STM, прошивки… Не понятно зачем. То, что готовое устройство — это хорошо. А если надо дешевле, то собирать переключатель Алексея.

      1. Сергей (macrokernel) Ответить

        Я, например, сам не соберу, проще купить. Только не понятно, как его встраивать в аппаратуру, к нему бы корпус.

        1. Фото аватараraefa Автор Ответить

          В магазинах моего региона я нашел подходящий корпус. На фото в других статьях есть аппаратура с установленным переключателем. Корпус имеет размеры около 70х50, либо пробовал запихнуть самоделку на ардуине еще в 50х30. Если не перепаивать кнопки на этой плате, то можно использовать толкатели. Так же продаются в магазинах радиодеталей.

    2. Сергей (macrokernel) Ответить

      Нашел описание сего китайского чуда. Смотреть через гугл транслейт: http://item.taobao.com/item.htm?spm=a230r.1.14.1.v5osMv&id=39039177598 Там есть и точные размеры, и видео с демонстрацией работы, и описание настройки.

      Видео: http://v.youku.com/v_show/id_XNzEzMTM2MzQ4.html
      Программы для настройки: http://pan.baidu.com/s/1o6nzsh0

  6. Артём Ответить

    Жаль в программировании пока не силён, а то было бы неплохо прикрутить к этому устройству ардуиновский OLED дисплейчик и выводить на него названия режимов. У кого-нибудь есть идеи на этот счёт?

    1. Фото аватараraefa Автор Ответить

      А зачем оно надо? Светодиодов и их подписей думаю достаточно, а если хочется вообще круто, то можно на турнигу подключить телеметрию и поставить прошивку, где все это будет.

      1. Артём Ответить

        Т.е. получается в моём Таранисе это уже где то есть в недрах настроек и можно как то выводить названия режимов на штатный дисплей?

        1. Фото аватараraefa Автор Ответить

          Про таранис ничего не подскажу. А на турнигу возможна доработка. Данные берутся с Mavlink телеметрии.

  7. Arkady Ответить

    Учтите, что этим переключаетелем невозможно пользоваться вслепую, т.е в ФТП очках! Думаю проще все таки настроить тумблеры!

    1. Фото аватараraefa Автор Ответить

      А часто приходится пользоваться всеми режимами в FPV? Обычно это стаб/альтхолд, лоитер и ртл.
      Меня устраивает моя конструкция.

      1. Vladimir Ответить

        Был бы признателен за инструкцию и скорректированную схему, как подключить всё на Pro Mini, она у нас тоже продается и даже чуть дешевле nano.

        1. Фото аватараraefa Автор Ответить

          А в чем затруднения? Берете вторую схему, подставляете номиналы компонентов из первой схемы. Собираете. Заливаете через FTDI прошивку и наслаждаетесь.

  8. Dimon Ответить

    Код из 6 (канального) надо поправить. Обьясню почему — по умолчанию взяты данные режимов из 5 канального и в результате получаем

    EEPROM.write(14, 0); — Минимальное значение 988
    EEPROM.write(15, 84); — 1320
    EEPROM.write(16, 127); — 1495
    EEPROM.write(17, 160); — 1629
    EEPROM.write(18, 190); — 1751
    EEPROM.write(19, 255); — максимальное значение 2010

    у меня получилось так да и у всех примерно так-же.

    теперь смотрим режимы в MP
    1 0 -1230
    2 1231 — 1360
    3 1361 — 1490
    4 1491 — 1620
    5 1621 — 1749
    6 1750 +
    И получаем что последних 2 режима попадают на одну и туже позицию в МР так как 6 режим начинается 1750 + .
    и нет попадания в 3 режим
    Да и 5 режим на грани что тоже не очень хорошо.
    Можно конечно подрегулировать кнопками, но я например не собирался их делать — но пришлось

    Я с Arduino имею дело в первые поэтому не знаю как вычитать данные с памяти и посмотреть как они расположились. Если кто подскажет как это сделать, то выложу более правильные данные для прошивки.
    Ну или ждать пока руки дойдут чтоб с этим разобраться.

    1. Dimon Ответить

      А вот и нашел ответ в другом месте 🙂

      EEPROM.write(14, 0);
      EEPROM.write(15, 51);
      EEPROM.write(16, 102);
      EEPROM.write(17, 153);
      EEPROM.write(18, 204);
      EEPROM.write(19, 255);

      Может просто поправите код в основном сообщении.

      1. Фото аватараraefa Автор Ответить

        Dimon, спасибо за замечания! Добавлю ваш комментарий в статью, что на это необходимо обратить внимание. А вот править код или нет — пусть пользователи сами решают. Этот код взят из дневника Алексея и я учел все, что предлагали в комментариях. С этим кодом у меня получилось, что значения попали примерно в середину диапазонов режимов. Если не ошибаюсь, то как раз выходные резисторы и конденсаторы за это отвечают.

        1. Dimon Ответить

          Еще тогда добавляйте след информацию информацию:
          Для владельцев turnigy 9xr pro в этих аппах идет не 5в на переменные резисторы а 3.3в. Я использовал обычную китайскую pro mini на 5в. она с успехом завелась и работает, но не факт, что другие будут работать. Просто прежде чем делать надо проверить заведется ли ваша Arduino на 3.3 вольта. Или брать те которые сходу на 3.3в.

  9. стас Ответить

    Извините за вопрос не в тему, хотел написать и показать фото про то как я установил переключатель шести полетных режимов от Александра Минина, очень нужная вещь а Как фото выложить? Не пойму, установил его на радиолинк ат9

    1. Фото аватараraefa Автор Ответить

      Станислав, пришлите на почту фото и описание, как делали. Добавлю в статью для наглядности. Так будет полезней, чем в комментариях. А в комментариях изображения можно вставлять HTML тегами с других ресурсов, например с хостингов картинок.

  10. Артём_vrn Ответить

    Всем привет! После продолжительных исследований программирования наконец-то готов и мой вариант переключателя. Программа написана на баскоме, т.е. с нуля. В устройстве используется графический дисплей OLED 128*64.
    Немного внутренностей:
    http://s020.radikal.ru/i720/1603/2f/ca219015cd61.jpg
    http://s013.radikal.ru/i324/1603/17/aca75101e9fa.jpg
    http://s020.radikal.ru/i713/1603/dd/f4b135cd19cd.jpg
    http://s017.radikal.ru/i440/1603/c5/7be771f0dfd0.jpg
    Отверстие в корпусе пульта и панелька из оргстекла делались на самопальном чпу-станке.
    http://www.youtube.com/watch?v=NDB7Al5Z3i0
    А тут как это работает:
    http://www.youtube.com/watch?v=1XTRASQYw40
    Менюшку с выбором типа летательного аппарата сделал просто так, может пригодится, когда начну осваивать самолёты и полётные режимы будут другими. Пока у меня только коптер, поэтому после выбора того или другого программа попадает в коптерный список режимов. Это опционально и всегда можно удалить.
    Также есть вариант программы под символьный дисплей 16*2, но встроенного решения с ним уж точно не получится))

    1. Фото аватараraefa Автор Ответить

      Артем, спасибо за информацию. Можете создать тему на форуме и поделиться схемой и прошивкой. Может кому пригодится.

        1. Артём_vrn Ответить

          Можете пойти и по такому пути, просто не цеплять 2 кнопки. А можете и перечертить печатную плату, чтоб всё было в соответствии с вашими требованиями.

          1. Kalerva Ответить

            Ткните носом, пожалуйста, что убрать на плате. А с софтом разберусь.
            Требования: три кнопки, не четыре. (плюс две кнопки настройки и пищалка)

            1. Артём_vrn Ответить

              В шапке указан сайт А. Козина, где доступны чертежи печатной платы на 6 кнопок, если же будете использовать Ардуино Нано, там ещё проще — просто навешиваете нужное кол-во кнопок, прошиваете и пользуетесь.

                1. Артём_vrn Ответить

                  Да, но по сути это получается тот же 3-хпозиционный тумблер, но со светодиодами 🙂

                  1. Kalerva Ответить

                    Так-то да, но на моей Turnigy 9x трех-позиционный тумблер имеет статическое значение.
                    Короче, по-русски он уже занят и менять ничего не хочется.

  11. Kalerva Ответить

    Вот такой скетч. Дубль 3.

    /*
    ***********************************************************************************************
    ***************************** Created by Aleksey Kozin ****************************************
    ***********************************************************************************************
    ********************************** mod by Kalerva *********************************************
    ***********************************************************************************************
    ********************************** flymodeswitcher v.3********************************************
    ***********************************************************************************************
    s1 — s3 & LEDS connected to analog pins 0-2
    its numbers from 14 to 16
    */
    #include
    #define AnalogOut 10 // PWM out
    #define SoundOut 7 //d7 speaker out
    int SelBtn = 14; // default
    //int BtnLevels[20];

    void setup()
    {
    Serial.begin(9600);
    pinMode(8, INPUT); //tune up button
    pinMode(9, INPUT); //tune down button
    digitalWrite(8,HIGH);
    digitalWrite(9,HIGH);
    if (EEPROM.read(1)!=124 || digitalRead(9) == LOW ) // if pin 9 short to 0 start reset defaults
    reset_eeprom();
    //force pwm
    TCCR1B = 0x01;
    delay(100);
    pinMode(SelBtn, OUTPUT);
    digitalWrite(SelBtn,0);
    analogWrite (AnalogOut, BtnLevel(SelBtn));
    tone(SoundOut, 4000, 150);
    delay (200);
    tone(SoundOut, 1000, 400);
    }
    void loop()
    {
    ScanBtns();
    TuneLevel();
    delay(10);
    }
    void ScanBtns()
    {
    for (int i=14; i <= 16; i++)
    ScanBtn(i);
    }
    void ScanBtn(int ScanPin)
    {
    if (SelBtn != ScanPin)
    {
    pinMode(ScanPin, INPUT);
    if (digitalRead(ScanPin)==0)
    {
    SelBtn = ScanPin;
    unsetOther(ScanPin);
    tone(SoundOut, 5500, 150);
    while (digitalRead(ScanPin)==0); // hold scaning until relise button
    pinMode(ScanPin, OUTPUT);
    digitalWrite(ScanPin,LOW);
    }
    }
    }
    void unsetOther(int excludePin)
    {
    for (int i=14; i 1 && newlevel < 254 )
    digitalWrite(SelBtn,HIGH);
    delay(200);
    digitalWrite(SelBtn,LOW);
    }

  12. Илья Ответить

    Подскажите пожалуйста как подключить переключатель режимов полёта на аппаратуру fs-6i. На крутилке 3,22 в. Вроде пробовал подключить как тут написано, через крутилку, но при подключении аппаратура тухнет, а при отключении переключателя аппаратура включается. Переключатель покупал на сайте микрохобби.

    1. Фото аватараraefa Автор Ответить

      Переключатель расчитан на 5В питания. От 3.3В может не запуститься микроконтроллер, но если запустится, то работать должно. Но если аппаратура отключается, то может происходит перегрузка по питанию? Быть такого не должно, т.к. МК потребляет мало (до 40мА) + светодиод пусть 30мА.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *