Одновременное нажатие 10 кнопок из любых 120

Schwarz78
Offline
Зарегистрирован: 19.01.2019

Да вообще-то перестраховка, чтобы оно и через 10 лет работало так же. Вообще, самая простая защита от дребезга - пореже опрашивать.

MYFRIEND
MYFRIEND аватар
Offline
Зарегистрирован: 31.01.2017

датчики Холла или герконы не имеют дребезга совсем? датчик Холла скорее всего к hc165 должен подключиться, спасибо за ответы!  

 

sadman41
Offline
Зарегистрирован: 19.10.2016

У любого механического контакта есть дребезг. Вопрос только в продолжительности. У цифрового холла внутри компаратор вроде как и он выдает сигнал нормально. Если только магнит около него не трясётся.

Schwarz78
Offline
Зарегистрирован: 19.01.2019

У цифрового Холла есть гистерезис. У аналогового - есть ОУ на выходе, соотв. время-импульсная характеристика. У герконов нет ничего, кроме их механической инерции, но и она неплоха.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Schwarz78 пишет:

Да, этот код работал 1 раз в 100мс.

Какие 100 мс? Вы о чем?

Судя по сообщению №14, ТС нужно опрпеделить время между двумя замыканиями контактов: в начале и в конце хода клавиши музыкальной клавиатуры.

Грубые оценки:

- максимальная скорость клавиши 30 м/с,

- ход клавиши 0.5 см (=0.005 м),

- погрешность не более 0.5 дБ (= 6%).

разница между срабатываниями 0.005/30 = 167 мкс,

6% от этой величины 10 мкс.

Вывод: опрашивать нужно всего в 10000 раз чаще.

Schwarz78
Offline
Зарегистрирован: 19.01.2019

andriano пишет:

Вывод: опрашивать нужно всего в 10000 раз чаще.

Да я, каюсь, уже забыл начальные условия. Я дал код, который отрабатывает любое быстрое нажатие-отжатие, при этом отрабатывает дребезг. Его можно запустить с любой скоростью, 100мс было у меня, но это был тренажёр-имитатор довольно медленных процессов. Можно 50, можно 10, можно 1.

Только понял, что вы имели в виду опрос раз в 10 мкс. Вы ведь знаете, что самое тренированное ухо не услышит задержку менее 20мс? Большинство и 100мс не услышит, конечно. Тогда я брал бы за основу опрос раз в 1мс, алгоритм вполне справится.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Schwarz78 пишет:

Вы ведь знаете, что самое тренированное ухо не услышит задержку менее 20мс? Большинство и 100мс не услышит, конечно. Тогда я брал бы за основу опрос раз в 1мс, алгоритм вполне справится.

1. Насколько мне известно, это не так (по поводу 20 мс). Честно говоря, хотелось бы пруф.

2. Но самое главное - речь идет не о задержке (которая вполне допустимо моржет быть единицы мс), а об измерении скорости нажатия на клавишу. Что к задержке - вообще никаким боком.

Оценки я привел. Если считаете, что достаточно 1 мс, аргументируйте.

Schwarz78
Offline
Зарегистрирован: 19.01.2019

andriano пишет:

1. Насколько мне известно, это не так (по поводу 20 мс). Честно говоря, хотелось бы пруф.

2. Но самое главное - речь идет не о задержке (которая вполне допустимо моржет быть единицы мс), а об измерении скорости нажатия на клавишу. Что к задержке - вообще никаким боком.

Оценки я привел. Если считаете, что достаточно 1 мс, аргументируйте.

1. Пруф не найду, давно это было, речь шла о задержке в цифровых гитарных эффектах, и может я сам даже пробовал тогда, не вспомнить. Вспоминаются драйверы AISIO в этой связи почему-то.

2. Нет, скорее вы правы, а я не прав. Я забыл о чём в теме речь. Хотя мне кажется, реакция в 1мс - достаточна. В моём синтезаторе, насколько я понял - только две скорости атаки, но он и стоил недорого. (Нет, четыре)

Музыка - это ж психофизика, тут эмпирически надо. Считаю, что измерительский подход здесь не работает.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

1. Обидно. Ведь наверняка есть какие-то биофизические исследования по этому вопросу. Но как-то кроме кустарщины мне ничего не попадалось. Пока исхожу из того, что задержка не должна превышать 7 мс.

2. Протокол MIDI подразумевает для этой величины 127 уровней. Получается, в идеале около 0.5 дБ.

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

Schwarz78
Offline
Зарегистрирован: 19.01.2019

andriano пишет:

1. Обидно. Ведь наверняка есть какие-то биофизические исследования по этому вопросу.

Я тогда читал гитарные форумы, а там, сами понимаете, врядли существует что-либо объективное, кроме что "гитары делают из дерева и струн". И помню, кто-то проверял с разной задержкой из нормальных музыкантов. Получалось, что порог чувствительности около 20мс. Т.е. человек играет струну, и слышит задержку звука, на 20мс уже не слышали.

И слух здесь совсем ни причём. А время реакции. Ну, например, у меня геймерская реакция - около 250-300мс. У профессионального геймера - 100-150мс. То есть тут не порядки и даже не разы.

Logik
Offline
Зарегистрирован: 05.08.2014

И исследования есть, и восприятие звука не совсем реакция. Например http://inform-hifi.narod.ru/3.htm или http://ru.knowledgr.com/00422135/%D0%AD%D1%84%D1%84%D0%B5%D0%BA%D1%82%D0...

Эффект предшествования появляется, если последующие фронты волны прибывают между 2 мс и приблизительно на 50 мс позже, чем первый фронт волны. Этот диапазон - иждивенец сигнала. Для речи эффект предшествования исчезает для задержек выше 50 мс, но для музыки эффект предшествования может также появиться для задержек приблизительно 100 мс.

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

  • Подведение итогов локализации: для временных задержек ниже 2 мс слушатели только чувствуют один звук; его направление между местоположениями звуков лидерства и задержки. Заявление на подведение итогов локализации является стереофонией интенсивности, где два громкоговорителя испускают тот же самый сигнал с разными уровнями, заканчивающимися в локализованном звуковом направлении между обоими громкоговорителями. Локализованное направление зависит от различия в уровне между громкоговорителями.
  • Господство локализации: для задержек между 2 и 5 мс слушатели также чувствуют один звук; его местоположение определено местоположением ведущего звука.
  • Подавление дискриминации задержки: для коротких временных задержек слушатели менее способны к различению местоположения отстающего звука.

Для временных задержек выше 50 мс (для речи) или приблизительно 100 мс (для музыки) отсроченный звук воспринят как эхо сначала прибывающего звука.

 

Кривовато переведено, но масштаб цифр очевиден.

 

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

2Logic: "Задержка так же неисчерпаема, как и атом"...

Вообще-то в предыдущем обсуждении подразумевалась задержка между нажатием на клавишу и началом звучания, а не временной интервал между двумя звуками.

2Schwarz: насчет 100-150 мс - мне эти цифры кажутся несколько подозрительными. На следующей неделе поинтересуюсь у специалиста, занимающегося как раз оценкой скорости реакции в зависимости от психоэмоционального состояния человека (не так давно писал для него программу, измеряющую как раз скорость такой реакции). Насколько я понял, 250-300 мс - это как раз нормальная величина, которая может увеличиваться в неблагоприятных обстоятельствах (утомление, наркотическое и алкогольное опьянение и т.п), но не имеющая предпосылок к уменьшению.

R3EZ
Offline
Зарегистрирован: 15.11.2018

Здравствуйте, MYFRIEND!

Пришел по Вашей ссылке из ветки об "использовании аналоговых входов в качестве цифровых". Спасибо за скетч. Задача состояла в правильной последовательности включения и выключения двигателя и тормоза поворотного устройства антенны. При нажатии любой из клавиш управления вращением в одну или другую сторону сначала должен включиться электромагнит, механически разблокирующий поворотный механизм, а затем уже включиться двигатель. При отпускании клавиши все должно работать в обратной последовательности. Нажатие может иметь диапазон от кратковременного до минуты с небольшим, а задержка включения-выключения ну не более 0,5 секунды, я думаю. В пульте управления такая последовательность включения  обеспечивается конструктивным расположением микропереключателей, то есть при нажатии сначала происходит срабатывание электромагнита, а при дальнейшем нажатии срабатывает микропереключатель двигателя. То есть, опять же механическим путем. В качестве датчика азимута применен потенциометр, а в качестве устройства отображения - микроамперметр, у которого на фоне шкалы нанесена проекция земного шара с центром в Японии (поворотка японская где-то 80-х годов выпуска), а отклонение стрелки указывает текущий азимут. Естественно использовать в таком виде невозможно, поэтому мы ее сразу перевели на Ардуино. Сын написал программу расчета и отображения азимута, а также калибровки по азимуту в полевых условиях. Управление вращением через Ардуино не реализовывалось. Сейчас он и слышать не хочет про программный код, так как устает от него на работе, да еще дополнительно работает вечером, поэтому решил взяться сам. Набросал вчера алгоритм, а потом в голову пришла мысль о том, что клавиши ведь уже обеспечивают необходимую последовательность работы, поэтому, если их перенести с непосредственного управления тормозом и двигателем (я это сделал на твердотельном реле) на вход Ардуино, то тогда все сведется к простому управлению выходами.

     Для чего все это нужно? Существует проект американского радиолюбителя "Ардуино- контроллер поворотного устройства"  https://github.com/k3ng/k3ng_rotator_controller  , предоставляющий широкие возможности для управления по азимуту и углу места (элевации), подключения дополнительных устройств, шаговых двигателей, компасов, GPS, часов, связи с компьютером и т д. В данном случае меня интересовало только управление по азимуму  от встроенного потенциометра и связь по USB с программой, которая может управлять вращением или автоматически осуществлять поворот на нужного корреспондента. Все это там реализовано, но скетч очень труден для понимания. В нем свыше 14000 строк + порядка 30 закладок/библиотек (когда открываешь в Arduino IDE, даже все не вмещаются на закладках), из которых используются несколько в зависимости от железа и хотелок. Включение необходимой опции осуществляется путем снятия комментов в строке, а отключение, наоборот, закомментированием. Кстати, мне не удалось там заставить правильно осуществлять задержку. Она почему то срабатывает только при выключении и найти это место в скетче я не смог.

     Имея в наличии три поворотки, одна стационарная и две для выездов на соревнования, я их все перевел на Ардуино. Но две не имеют тормоза и с ними все проще. Однако, на случай отказа скетча американца (на возможные сбои Ардуино от сигнала передатчика) предусмотрел возможность перепрограммирования контроллера на скетч, написанный сыном и который прошел проверку в реальных условиях. Для этого пришлось "подогнать железо" под схему американца, чтобы ничего не пришлось перепаивать. А у него датчик азимута на А0, элевация на А1 (я ее не исползую, поэтому порт задействован под клавиатуру, аналогичную шилду с кнопками - используется в ПО сына для калибровки, установки требуемого азимута и сохранения данных в EEPROM), А2 и А3 для управления вращением, кнопки на землю. Поэтому пришлось включать подтягивающие резисторы digitalWrite(16, HIGH);  digitalWrite(17, HIGH);   А чтобы не определять нажата клавиша или нет по аналоговому значению и задал вопрос на форуме, так как состояние цифрового пина определяется проще. LOW или HIGH. Так что для управления электромагнитом тормоза можно будет задействовать А4. Прошу сильно не пинать за столь подробное описание. Мне уже 69 и изучать С++ не так уж легко. Из опыта, только давно чуть-чуть ассемблер PDP-11 и еще немного для ПИКов. 

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

R3EZ, зачем себя мучить.Если человек может внятно составить техническое задание и описать его в виде блок-схеиы, то перевести эту блок-схему в скетч Ардуины не сложно, как минимум с помощью цифрового автомата с лямда функцией. Но народ деградировал до того что не то-то изучить Си, но и даже составить блок-схему ему это, как выйти в космос с балкона.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

qwone пишет:

цифрового автомата с лямда функцией. 

Чего? 

Расстрелять через повешение с последующей отправкой на принудительные работы!

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

qwone пишет:

R3EZ, зачем себя мучить.Если человек может внятно составить техническое задание и описать его в виде блок-схеиы, то перевести эту блок-схему в скетч Ардуины не сложно, как минимум с помощью цифрового автомата с лямда функцией. Но народ деградировал до того что не то-то изучить Си, но и даже составить блок-схему ему это, как выйти в космос с балкона.

Пух, это не норот деградировал, это ты воспарил

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Ворота пишет:

qwone пишет:

цифрового автомата с лямда функцией. 

Чего?

Ну да определение еще то. Но на практике все просто #43 я бы сказал примитив.

R3EZ
Offline
Зарегистрирован: 15.11.2018

Ребята, не забывайте, что это только часть программы. А надо еще постоянно определять азимут и отображать изменение его на LCD. Delay() здесь не прокатит, иначе будут пропуски. Значит нужно использовать millis() чтобы не было тормозов. Можно пойти комбинированным путем: при смене ПО использовать аппаратное переключение клавиш управления вращением с аналоговых входов на входы твердотельных реле управления. Тем более, что они также замыкаются на землю. Всего то скоммутириовать три провода. Пока обдумываю наиболее приемлемый вариант.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Ну это понятно. Если "заказчик" хочет, того что не знает, но "хочет очень сильно", то дело увы безнадежно.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

R3EZ пишет:

Ребята, не забывайте, что это только часть программы. А надо еще постоянно определять азимут и отображать изменение его на LCD. Delay() здесь не прокатит, иначе будут пропуски. Значит нужно использовать millis() чтобы не было тормозов. Можно пойти комбинированным путем: при смене ПО использовать аппаратное переключение клавиш управления вращением с аналоговых входов на входы твердотельных реле управления. Тем более, что они также замыкаются на землю. Всего то скоммутириовать три провода. Пока обдумываю наиболее приемлемый вариант.

А проект VU2JIH не смотрел?

MYFRIEND
MYFRIEND аватар
Offline
Зарегистрирован: 31.01.2017

R3EZ пишет:

Здравствуйте, MYFRIEND!

Если можно продолжим в вашей теме хорошо? ! это здесь было http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/ispolzovanie-analogovykh-vkhodov-v-kachestve-tsifrovykh#comment-429278 

здесь только кнопки) а то выйдет прерывание) вашей темой. Там вам напишут обязательно. 

R3EZ
Offline
Зарегистрирован: 15.11.2018

ua6em пишет:
VU2JIH не смотрел?

Посмотрел. Подобное  есть и у DT0ITC https://www.youtube.com/watch?v=JSVVbKjGE1E,  даже скетч имеется. Но я не увидел в нем поддержку эмуляции интерфейса YAESU GS232B. А из-за этого и затевался весь этот сыр-бор. Именно нужен интерфейс YAESU GS232, который  обеспечивает софт K3NG. И работает безупречно. Для моих потребностей хватит и NANO, хотя все сделано на UNO, а в распоряжении есть все от NANO до MEGA, кроме 3,2" дисплея. Определять азимут и вращать двигатель дело нехитрое.  Куда сложнее организовать интерфейс GS232, а у K3NG это сделано и работает отлично.  Но эта тема другого форума и другого сайта.

To: MYFRIEND

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

MYFRIEND
MYFRIEND аватар
Offline
Зарегистрирован: 31.01.2017

сделал модель в Ares такой кнопки с адресным светодиодом WS2812B  из геймерских клавиатур,

кто будет делать свою клавиатуру, держите кому нужно мою модель https://yadi.sk/d/BfFLFAmjp3ioWg за ошибки не несу ответственность, если найдете исправляйте сами, модели не тестировались ещё у китайцев на заводе, дырку в модели что бы сделать дырку перенести на слой board edge  

как добавить писал тут, проще простого в отличие от других способов,  http://arduino.ru/forum/apparatnye-voprosy/pomekhi-v-upravlenii-svetodiodnoi-lentoi-ws2812b#comment-429554   и там есть модель светодиода WS2812B сделал сам кому нужно выше есть плакат WS2812B все делал сам нигде ничего нет точно, ничего не нашол, сделал сам все что не нашол, держите, сэкономите много человекосасов, даже если потом пригодится, берите пока дают 

такие кнопки дешевле выйдут не на развес, а в сборе с клавиатурой ZERO, выйдет дешевле чем кнопки отдельно, там стоят не RGB светодиоды, а китайцы пишут RGB клавиатура, а разноцветные одноцветные светодиоды, по китайским меркам RGB, но нет. На развес такие кнопки дороже, используют в механических клавиатурах. Почитайте кому нужно в гугл механические клавиатуры для геймеров. Там диоды стоят на всех кнопках в ZERO и одновременные нажатия таких клавиатур возможно неограничены ничем. Кто хочет RGB клавиатуру проще сделать самому, а не из одноцветных китайских светодиодов ZERO например, брал на запчасти вытащить кнопки, вышло дешевле чем кнопки отдельно. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

R3EZ пишет:

ua6em пишет:
VU2JIH не смотрел?

Куда сложнее организовать интерфейс GS232, а у K3NG это сделано и работает отлично.  Но эта тема другого форума и другого сайта.

Открывайте новую тему, GS232 на ардуино nano, может помогут...

R3EZ
Offline
Зарегистрирован: 15.11.2018

ua6em пишет:

Открывайте новую тему, GS232 на ардуино nano, может помогут...

Зачем? У меня из трех повороток только одна имеет электромагнитный тормоз. Остальные уже перевел на софт K3NG. Только вот с управлением тормозом у него что-то не то. 

Извините, что ответил в этой теме.

psv1962
Offline
Зарегистрирован: 19.06.2019
Добрый День! Уважаемые знатоки помогите старому электронщику в обработке событий кнопок.
Задача состоит в следуещем:
Есть 256 регитрируемых защит (кнопок,контактов).Необходимо при срабатывании контакта выводить в сериал 
шлейф включен 1 раз с названием номера контакта,а при отключении контакта шлейф выключен 1раз с 
названием номера контакта . Схема собрана на Mege256 по принцыпу опроса матричной клавиатуры - 16 строк и 
16 столбцов. Скетч предоставлен на 16 кнопок 4х4.В даном скетче на сериал выходит номер контакта при 
включении постоянно, а надо с обработкой события . Может у меня проблема с алгоритмом .Помогите 
int PinOut[4] {5, 4, 3, 2}; // пины выходы
 
int PinIn[4] {9, 8, 7, 6}; // пины входа


unsigned int value[4][4]

{ { 1, 5, 9, 13},
  { 2, 6, 10, 14},
  { 3, 7, 11, 15},
  { 4, 8, 12, 16}
};

  
void setup()
{
  pinMode (2, OUTPUT); // инициализируем порты на выход (подают нули на столбцы)
  pinMode (3, OUTPUT);
  pinMode (4, OUTPUT);
  pinMode (5, OUTPUT);
 
  pinMode (6, INPUT); // инициализируем порты на вход с подтяжкой к плюсу (принимают нули на строках)
  digitalWrite(6, HIGH);
  pinMode (7, INPUT);
  digitalWrite(7, HIGH);
  pinMode (8, INPUT);
  digitalWrite(8, HIGH);
  pinMode (9, INPUT);
  digitalWrite(9, HIGH);
 
  Serial.begin(9600); // открываем Serial порт
}
 
void matrix () // создаем функцию для чтения кнопок
{
  for (int i = 1; i <= 4; i++) // цикл, передающий 0 по всем столбцам
  {
    digitalWrite(PinOut[i - 1], LOW); // если i меньше 4 , то отправляем 0 на ножку
    for (int j = 1; j <= 4; j++) // цикл, принимающих 0 по строкам
    {
      if (digitalRead(PinIn[j - 1]) == LOW) // если один из указанных портов входа равен 0, то..
      {
    
       Serial.print( value[i - 1][j - 1] );Serial.println( " shleif on  ");
       
       delay(175);

      
    }     
    
   } 
 digitalWrite(PinOut[i - 1], HIGH); // подаём обратно высокий уровень 
}
} 
void loop()
{
  matrix(); // используем функцию опроса матричной клавиатуры
 
}
 

 

пожалуйста.
Гриша
Offline
Зарегистрирован: 27.04.2014

так и есть, вы просто смотрите матрицу кнопок и выводите состояние после прочтения.

как вариант (ИМХО самый понятный и простой для понимания) создать матрицу значений переменных строка 06 и после строки 57 проверять чего туда записано и выводить в порт только нужное. У вас простой опросник, думаю даже не вы его писали, иначе этого вопроса бы небыло. 

psv1962
Offline
Зарегистрирован: 19.06.2019

Спасибо за ответ.Извените не силен в програмировании если не трудно дабавте пожалуйста в скетч. Спасибо.

Гриша
Offline
Зарегистрирован: 27.04.2014

psv1962 пишет:

Спасибо за ответ.Извените не силен в програмировании если не трудно дабавте пожалуйста в скетч. Спасибо.

мне не  трудно, но это не решит ваших проблем, а нянькаться у меня нет интереса. Было дело делал железку вместе с другим коллегой - помогали друг-другу. 

В вашем случае получится не помошь а сделать вместо вас - это долго т.к. вы потом зададите новый вопрос, а потом еще и еще... но может кому и интересно будет.

Green
Offline
Зарегистрирован: 01.10.2015

psv1962 пишет:

Есть 256 регитрируемых защит (кнопок,контактов).Необходимо при срабатывании контакта выводить в сериал 
шлейф включен 1 раз с названием номера контакта,а при отключении контакта шлейф выключен 1раз с 
названием номера контакта . Схема собрана на Mege256 по принцыпу опроса матричной клавиатуры - 16 строк и 16 столбцов.

Лень читать весь топик.) Да можно любое кол-во одновременно нажатых кнопок регистрировать, если изгалиться. Вопрос только в понятии "одновременно".)

Гриша
Offline
Зарегистрирован: 27.04.2014

Green, начало топика в посте 176.  тут вопрос в другом, ТС не в состоянии сам написать и просит помощи написать - вот и вся суть... ну и ТЗ вообще не озвучено, кроме кл-ва кнопок и способа организации матрицы кнопок.

Может кто  имеет время помочь, я могу только направить (банально нет времени).

Green
Offline
Зарегистрирован: 01.10.2015

Да, со временем и у меня проблема, ибо время - деньги. Тут есть нюансики при куче сработанных шлейфов, ну и дребезг, но всё реально. psv1962, пишите htpicc@gmail.com, решим.

Гриша
Offline
Зарегистрирован: 27.04.2014

Green пишет:

Да, со временем и у меня проблема, ибо время - деньги. Тут есть нюансики при куче сработанных шлейфов, ну и дребезг, но всё реально. psv1962, пишите htpicc@gmail.com, решим.

Green, нюансики с дребезгом решаются кроссплатой с драйверами линий т.е. подачей "значительного" тока для защиты от наводок и нашим любимым RC  фильтром + программно. По большому счету задача реально выполнима и не слишком сложная. При условии, что ТС ничего не утаивает.. а то сколько раз уже выяснялись в оконцове, что хотелка из области фантастики.  

Green
Offline
Зарегистрирован: 01.10.2015

Да, Григорий, зачастую желания расходятся с действительностью.( Естественно всё зависит от ситуации на месте, расстояний и пр. Но главное - желание, ибо нет ничего невозможного.)