Вторник, 26.11.2024, 13:02
Радиосервис - ИЗМАИЛ

Меню сайта

Статистика
Форма входа
Друзья сайта

Форум поддержки программ "Tiny Tools" (CPLD/USB-S/USB-F/USB-SPI EJTAG Tiny Tools)

Электроника на KitPost
Поиск
Наш опрос
Оцените мой сайт
1. Отлично
2. Хорошо
3. Неплохо
4. Ужасно
5. Плохо
Всего ответов: 86
Ссылки по uCoz
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
    Модератор форума: Alexandr_  
    Инфракрасная паяльная станция своими руками на ARDUINO
    Alexandr_
    Дата: Среда, 08.02.2017, 19:55 | Сообщение # 1        
    Генералиссимус
    Группа: Администраторы
    Сообщений: 814
    Статус: Offline

    Форумчане, куплю-продажу и личные сделки выяснять в личке, либо в новом форуме, этот форум для вопросов по электронной части станции.

    Архив по станции от hominidae с проектом efimsu ->здесь
    Проект Леонида, Leonid0071 "UNO-MAX6675-PC" и его доработки на форуме Амперки -> скачать

    Люби грешников, ненавидь сам грех!
     

    snmar4enko
    Дата: Пятница, 11.05.2018, 07:01 | Сообщение # 136        
    Лейтенант
    Группа: Пользователи
    Сообщений: 68
    Статус: Offline

    Цитата mon ()
    там нет 16bit таймера?
    конечно есть, Timer1 - выложите сюда пример кода который используете для таймера (начальная настройка, задание времени пересчета, остановка и сброс таймера, связь с прерыванием). Хотя подумать - мы используем 200 значений мощности,точней с пересчетом 184, для этого 8 бит достаточно. Теперь представим что у нас мощность имеет 1000 значений - точность 0.1 процента - но эти значения задает ПИД - и ему при тех же коэффициентах необходимо время в 5 раз дольше чтобы придти к установившемуся режиму. На практике это тепмературные перелеты и недолеты. Ведь допустим наш профильный рост на 1 градус будет отрабатыватся не за наши  расчетных полсекунды а за 2.5 секунды .... додумывайте сами что за это время может произойти. А к примеру перелет на 5 градусов в конце пайки - это уже другой профиль пайки. Оно нам надо? Я долго не мог понять когда прорабатывал ветку 1.4.* почему так изменение периода ШИМ  и шкалы мощности влияют на работу ПИД.

    Я конешно понимаю что в протеусе намного быстрей все проверить - но пока не освоил этот инструмент моделирую в голове и проверяю на реальном железе. А оно немного отличается от моделирования. Взгляните на ваши осциллограммы. С отрицательным импульсом (активный ноль) можно совладать.  Но опережение управляющего импульса - при 1000 залезет в соседнюю полуволну. Это не так опасно как при задержке но все же.
    Цитата snmar4enko ()
    Уменьшил время опроса ПИД до 50 микросекунд.
    - здесь я ошибся - нужно 50 милисекунд -то есть 200Гц. И это работает несмотря на переменную 100 милисекунд в самой библиотеке ПИД. Я уже писал ранее рассуждение про эту переменную... она на интегральный и дифиринциальный коэффициенты влияет - уменшая или увеличивая в разницу с внешней переменной. Да и был этот пересчет аж 1 секунду на ветке 1.4.*
    В предыдущих версиях ветки 2.0.* он был 100 милисекунд.

    Добавлено (11.05.2018, 06:48)
    ---------------------------------------------
    Цитата mon ()
    Если правильно выбраны коэффициенты ПИД то рано или поздно наступит установившийся режим ПИД. Так вот этот установшийся режим наступает за 10, а чтобы наверняка за 100 циклов вычисления ПИД. Время через которое вычисляется ПИД совпадает с временем диффиринцирования и интегрирования составляющих ПИД регулятора. Теперь про ШИМ или фазовый регулятор: его период должен быть меньше или равен периоду опроса ПИД.
    К этому дополнение выходная шкалы ПИД как бы количество периодов - необходимых для установившегося режима.

    Добавлено (11.05.2018, 07:01)
    ---------------------------------------------
    Цитата snmar4enko ()
    Я двумя руками за PID регулирование  - но оно у нас не работает!!!!!!!!!!!!!!Медленный ШИМ с периодом 1 секунда. Значения PID регулирования в регулятор подставляются 100 раз в секунду. Теоретически к примеру если ПИД устанавливает мощность 20% то 20 раз включится и 80 раз будет выключен, причем включение - выключение  могут произвольно чередоваться. PID должен опрашивается согласно его библиотеке 10 раз в секунду, фактически 3-100 раз в секунду. Полноценная работа ШИМ регулятора когда опрос ПИД 1 раз в секунду. Тогда и будет идеальная работа программы. Но не забываем про инерционность нагревательных элементов (Утюг, инфракрасная керамика, лампы). Они медленно нагревают плюс медленная отработка ПИД (1 раз в секунду) что мы получим если на первом и третьем этапах пайки необходимо обеспечивать нагрев со скоростью 1 градус в секунду. Прошу также учесть что что если время увеличено в 10 раз от номинального то Интегральная составляющая в 10 раз больше, а Диффиринциальная в 10 раз меньше. Уменьшение - фиг с ним. А вот Диффиринциальная составляющая  может стать всемогущей. К примеру мы установили Ki чтобы увеличивало на 1% при 1 градусе разности. Увеличение времени в 10 раз меняет эту составляющую на 10% мощности при 1 градусе ошибки. Если наш термопрофиль требует увеличивать на градус в секунду то при следующем опросе PID ошибка градусов будет 1.5 или более. Соответственно добавка 15% мощности к прошлым 10%. Нижней нагреватель у меня 1.8 квт, 25% мощности это 450вт - не хилый нагрев получаем с некоторым опозданием.

    Случай когда опрос ПИД приближается к 100 разам в секунду -  ШИМ практически не работает - получается как бы разрыв цепи регулирования. Параллельно с этим Интегральная составляющая выростает в 10 раз. Ее значение немного меньше чем Диффиринциальная составляющая при 1 секундном опросе. Но все равно ощутимо.
    А разыв цепи регулирования увеличивает ошибку и соотвественно изменение выходного параметра ПИД.
    - здесь привожу мое рассуждение по поводу времени опроса ПИД и на что она влияет

    На форуме goo.gl/tuFa9D обсуждают нашу станцию и ту которую сами параллельно написали с тех же исходников что и у нас. Анализируя код - по крайней мере для LCD2004 индикатора - получаем что для управления регулятором (твердотельное реле или симмисторный аналог) используют 20 значений мощности. При этом ПИД вычисляет 100 значений - с избытком в 5 раз, без привязки ко времени опроса - молотит на максимуме (где-то 100-500 раз в секунду - теоретически).  И что из этого получается: что принципы которое я и собрал выше выполняются хоть и грубо (20 значений)  в отличии от станции KSAA в которой только 2 значения: 0 или 1 в смеси с биением частот ШИМ и Сети.


    Сообщение отредактировал snmar4enko - Пятница, 11.05.2018, 07:28
     

    mon
    Дата: Пятница, 11.05.2018, 07:11 | Сообщение # 137        
    Подполковник
    Группа: Модераторы
    Сообщений: 191
    Статус: Offline

    Цитата snmar4enko ()
    Теперь представим что у нас мощность имеет 1000 значений - точность 0.1 процента - но эти значения задает ПИД - и ему при тех же коэффициентах необходимо время в 5 раз дольше чтобы придти к установившемуся режиму
    Как раз ПИДу будет гораздо легче,так как появляется возможность привести  коэффициенты к целым числам,а значит увеличить скорость выполнения самой функции,меньше кода,реже вызывать,короче одни плюшки.
     

    snmar4enko
    Дата: Пятница, 11.05.2018, 07:37 | Сообщение # 138        
    Лейтенант
    Группа: Пользователи
    Сообщений: 68
    Статус: Offline

    Цитата mon ()
    Как раз ПИДу будет гораздо легче,так как появляется возможность привести  коэффициенты к целым числам,а значит увеличить скорость выполнения самой функции,меньше кода,реже вызывать,короче одни плюшки.
    Теоретически ПИД будет легче если все переменые переведем в байт,избавимся от библиотеки  и сведем все до Пропорцианальной и Диффиринциальной составляющих , или только до Дифииринциальной - но в этом случае замедлится быстродействие и нужно будет уменьшать период опроса ПИД чтобы выйти на нужное нам время стабилизации.

    Округление разности температур умноженное только на целый коэффициент  - уже (приближение) ошибка, а Диффиринциальная составляющая тупо прибавление к установившемуся значению мощности единицы или убавление если знак другой. Давайте не забывать что диффиринциальная составляющая  как раз и отвечает за установившийся режим. Снова допустим что у нас 1000 значений мощности - следовательно в худщем случае нужно 1000 периодом чтобы установить значение на выходе ПИД.
    Допустим мы будем использовать переменные INT и подразумевать что все значения ПИД деситикратные. Но для этого необходимо будет температуру, которая у нас 12 бит преобразовывать и умножать на 10 перед подачей  в ПИД. Далее в ячейке EEPROM может хранится значение от 0 до 255, если не использовать несколько ячеек для хранения значения. Посмотрите ранее сколько возмущений из за того что в памяти уже хранятся 2х, 12и, 10и, 100о кратные значения. Допустим температуру от 150 до 255 для верхнего нагревателя тоже необходимо будет умножать на 10 перед подачей в ПИД. Ну Бог с ней с той температурой - допустим не мы будем возится с умножением температуры - но тогда разность температур в 0.5 градуса и мение не будет никак влиять на ПИД и это равносильно разрыву цепи регулирования и приведет колебаниям на определенном уровне для мощности. Нам такое не нужно .... Даст ли это эффект быстродействия чтобы быстрее опрашивать ПИД?      

    Скажу вам следующее - в борьбе с длинными переменными где-то урезал и переменную отвечающую за градусы, теперь не могу понять какую именно и теперь время от времени возникают те колебания мощности на определенном уровне. А казалось что там те 0.1-0.5 градуса - на что могут повлиять ....


    Сообщение отредактировал snmar4enko - Пятница, 11.05.2018, 08:12
     

    Dmitrysh
    Дата: Пятница, 11.05.2018, 09:29 | Сообщение # 139        
    Рядовой
    Группа: Пользователи
    Сообщений: 3
    Статус: Offline

    Цитата snmar4enko ()
    то есть 200Гц. И это работает несмотря на переменную 100 милисекунд в самой библиотеке ПИД.
    Нет не работает. Данные моделирования показывают 10 в секунду. Данные моделировая показывают что это предел. У меня получалось максимум 11-12 раз в секунду получить на 328 меге. Слишком долго работает PID.Compute.
    Цитата snmar4enko ()
    Скажу вам следующее - в борьбе с длинными переменными где-то урезал и переменную отвечающую за градусы, теперь не могу понять какую именно и теперь время от времени возникают те колебания мощности на определенном уровне. А казалось что там те 0.1-0.5 градуса - на что могут повлиять ....
    Вот эти посмотрите
    
    Код
    int tc1;
    int tc2;
     

    snmar4enko
    Дата: Пятница, 11.05.2018, 10:47 | Сообщение # 140        
    Лейтенант
    Группа: Пользователи
    Сообщений: 68
    Статус: Offline

    версия 2.0.9

    Цитата Dmitrysh ()
    Вот эти посмотрите
    Код
    int tc1;
    int tc2;
    - исправил снова на тип с запятой, нужно тестировать, может проблема только в этих переменных
    Прикрепления: REWORK_2.0.9.zip (8.8 Kb)
     

    Cinema
    Дата: Воскресенье, 13.05.2018, 14:48 | Сообщение # 141        
    Генерал-майор
    Группа: Проверенные
    Сообщений: 618
    Статус: Offline

    Как-то здесь проскальзывала информация о станции от dmingo:
    
    Станция сочетает в себе ИК низ и фен сверху. Организовано управление почти как у mvm_ksaa, т.е. есть ардуинка и есть прикольный софт для ПК.
    Прикрепления: 1_Rework2_0_dmi.rar (280.7 Kb)

    "Опыт — это то, что получаешь, не получив того, что хотел" © интернет

    Сообщение отредактировал Cinema - Воскресенье, 13.05.2018, 14:57
     

    Cinema
    Дата: Воскресенье, 13.05.2018, 15:08 | Сообщение # 142        
    Генерал-майор
    Группа: Проверенные
    Сообщений: 618
    Статус: Offline

    еще файлы из архива по станции dmingo:
    Прикрепления: 2_Rework2_0.rar (308.2 Kb)

    "Опыт — это то, что получаешь, не получив того, что хотел" © интернет

    Сообщение отредактировал Cinema - Воскресенье, 13.05.2018, 15:11
     

    Cinema
    Дата: Воскресенье, 13.05.2018, 15:17 | Сообщение # 143        
    Генерал-майор
    Группа: Проверенные
    Сообщений: 618
    Статус: Offline

    в папку vozdelsistema нужно закинуть звуки из архивов ниже:
    Прикрепления: 3_vozdelsistema.rar (769.3 Kb) · 4_vozdelsistema.rar (611.2 Kb)

    "Опыт — это то, что получаешь, не получив того, что хотел" © интернет

    Сообщение отредактировал Cinema - Воскресенье, 13.05.2018, 15:18
     

    snmar4enko
    Дата: Понедельник, 14.05.2018, 11:28 | Сообщение # 144        
    Лейтенант
    Группа: Пользователи
    Сообщений: 68
    Статус: Offline

    Видел я этот проект. Давно. Аналогично с нами те же датчики на MAX6675 и  LCD1602. С подогревом понятно - тупо включил выключил из компьютера по измеренной температуре.
    С феном вообще непонятка, зачем ПИД в ардуине, причем с выходной шкалой от 0 до 1000 и передергиванием ручного-автоматического режимов ПИД. Такая шкала  ПИД становится понятной когда начинаем разбирать код регулирования фена. А что такой ШИМ с 1 секундным периодом вполне подойдет для ветки 1.4.* с твердотельным реле. Хотя у нас такой же, но с учетом ограничения мощности. При сравнении ШИМ с работой сети получаем 100% шкалу мощности, неплохо. Но 10 кратное повышение шкалы ПИД требует 10 кратного увеличения коэффициентов ПИД для обеспечения аналогичной скорости регулирования ПИД.
    Для чего включается ручной режим ПИД? Не понятно.
     

    Cinema
    Дата: Вторник, 29.05.2018, 23:16 | Сообщение # 145        
    Генерал-майор
    Группа: Проверенные
    Сообщений: 618
    Статус: Offline

    snmar4enko приветствую.
    Смотрел ваш 2.0.5 и обратил внимание на это:
    
    Код
    byte intefan = 20; //внутренний вентилятор на А6
    byte extefan = 21; //внешний вентилятор на А7
    Мои попытки назначить эти аналоговые пины на ВЫХОД успехом не увенчались. Порылся в Сети и нашел утверждение, что в даташите эти пины помечены как особенные:
    
    Цитата
    “2 Additional Multiplexed Single EndedInputChannels (TQFP and QFN/MLF Package only)”
    "A6 & A7 are analog input only. Youcannot digital write to them. "
    IDE пишет, что 2.0.5 занимает 81%. Прошу вас, подскажите, пожалуйста, как прикрутить аналоговые кнопки, вместо одинарных, занимающих сейчас 4 пина.
    Аналоговые кнопки и вычисление их значений:
    

    Не понимаю, т.к.у вас:
    
    Код
    //Назначаем пины кнопок управления
    byte upSwitchPin = 14;
    byte downSwitchPin = 15;
    byte cancelSwitchPin = 16;
    byte okSwitchPin = 17;

    //состояние кнопок по умолчанию
    boolean upSwitchState = false;
    boolean downSwitchState = false;
    boolean cancelSwitchState = false;
    boolean okSwitchState = false;

    //переменные для кнопок
    long ms_button = 0;
    boolean  button_state = false;
    boolean  button_long_state = false;
    boolean  button_state1 = false;
    boolean  button_long_state1 = false;
     
    Код
    void loop()
    {

      //Считываем состояние кнопок управления
      upSwitchState = !digitalRead(upSwitchPin);
      downSwitchState = !digitalRead(downSwitchPin);
      cancelSwitchState = !digitalRead(cancelSwitchPin);
      okSwitchState = !digitalRead(okSwitchPin);


    А у vector99 -
    
    Код
    //--------настройка кнопок управления------------------------------------

    //#define A_PINS_BASE 100 // номер с которого начинается нумерация наших "псевдо-кнопок".
      

    #define PIN_RIGHT 100
    #define PIN_UP 101
    #define PIN_DOWN 102
    #define PIN_LEFT 103
    #define PIN_SELECT 104

    struct A_PIN_DESC{ // определяем  структуру которой будем описывать какое значение мы ожидаем для каждого псевдо-пина
       byte pinNo; // номер пина
       int expectedValue;// ожидаемое значение
    };

    A_PIN_DESC expected_values[]={ // ожидаемые значения для псевдо-кнопок
       { PIN_RIGHT,202},
       { PIN_UP,429},
       { PIN_DOWN,298},
       { PIN_LEFT,563},
       { PIN_SELECT,758}
    };

    #define A_PINS_COUNT sizeof(expected_values)/sizeof(A_PIN_DESC) // вычисляем сколько у нас всего "псевдо-кнопок" заданно.
    #define A_POSSIBLE_ABERRATION 50 // допустимое отклонение analogRead от ожидаемого значения, при котором псевдо кнопка считается нажатой

    bool digitalReadA(byte pinNo){
       
      for(byte i=0;i<A_PINS_COUNT;i++){ // ищем описание нашего всевдо-пина
         A_PIN_DESC pinDesc=expected_values[i];// берем очередное описание
         if(pinDesc.pinNo==pinNo){ // нашли описание пина?
            int value=analogRead(A0); // производим чтетине аналогово входа
             
            return (abs(value-pinDesc.expectedValue)<A_POSSIBLE_ABERRATION); // возвращаем HIGH если отклонение от ожидаемого не больше чем на A_POSSIBLE_ABERRATION
         }
      }
       
      return LOW; // если не нашли описания - считаем что пин у нас LOW
       
    }

    //Назначаем пины кнопок управления
    int upSwitchPin = PIN_UP;
    int downSwitchPin = PIN_DOWN;
    int cancelSwitchPin = PIN_LEFT;
    int okSwitchPin = PIN_SELECT;

    //состояние кнопок по умолчанию
    int upSwitchState = 0;
    int downSwitchState = 0;
    int cancelSwitchState = 0;
    int okSwitchState = 0;

    //переменные для кнопок
    long ms_button = 0;
    boolean  button_state = false;
    boolean  button_long_state = false;
    
    Код
    void loop()
    {
      //Считываем состояние кнопок управления
      upSwitchState = digitalReadA(upSwitchPin);
      downSwitchState = digitalReadA(downSwitchPin);
      cancelSwitchState = digitalReadA(cancelSwitchPin);
      okSwitchState = digitalReadA(okSwitchPin);
      //----------------------------------------------------------------------------------
    Зачем мне это? Подпалил Pro Mini и теперь могу использовать из аналоговых только пин 20(А6) для аналоговых кнопок и пин 15(А1) для выхода на нагреватель. Буззер останется на пин 18(А4) Вентиляторы планирую использовать не прибегая к ресурсам arduino. Силовая в 2.0.5 на MOC3021 без ZCC и плата ZCC на PC814? Библиотеку CyberLib вы правили начиная с 2.0.6? - т.е. в 2.0.5 она девственна еще?
    Спасибо.
    P.S.: В принципе, меня вполне устроил бы термостат для НИ, вместо ПИД. Например, как mvm_ksaa реализовал:
    
    Для бюджетной станции не зазорно отрабатывать термопрофиль силами только ВИ, при достижении платой нужной температуры (а способ достижения её можно любой, не превышающий прирост температуры более 1*С/сек, применить)...
    Прикрепления: 9219727.jpg (35.4 Kb)

    "Опыт — это то, что получаешь, не получив того, что хотел" © интернет

    Сообщение отредактировал Cinema - Вторник, 29.05.2018, 23:48
     

    snmar4enko
    Дата: Пятница, 01.06.2018, 09:21 | Сообщение # 146        
    Лейтенант
    Группа: Пользователи
    Сообщений: 68
    Статус: Offline

    Цитата Cinema ()
    Смотрел ваш 2.0.5
    - уже 2.0.9 версия. В последующих версия интеграция библиотеки CyberLib еще сильнее и в двух последних индикатор переведен на I2C . Вентиляторы предварительно перевел на D0 и D1 (RX и TX). В плане правки библиотеки CyberLib - правил только пин звука (бузера). Так что можно смело переходить на более высокие версии.  

    В плане аналоговых кнопок - вполне все реально  - писать скетч аналогового чтения - получаешь значения от 0 до 1023. Далее нормируешь по условию - к примеру от 900 до 1023 - не нажата ни одна кнопка, от 0 до 100 RIGHT, и т д. - перед тем как писать условия нужно померять значения аналогового чтения- резисторы могут быть разными  и как то шкалу поделить приблизительно пополам между значениями кнопок. 

    Цитата Cinema ()
    плата ZCC на PC814?
    - у меня на трансформаторе от польской антенны - двумя диодами выпрямляю обе полуволны и через резистор 4.7ком на стабилитрон 4.7Вольт. Сигнал снимаю со стабилитрона на D3 вывод ардуины. Получается что еще питание 5 Вольт получаю с этого же трансформатора.
     

    Dmitrysh
    Дата: Пятница, 01.06.2018, 09:57 | Сообщение # 147        
    Рядовой
    Группа: Пользователи
    Сообщений: 3
    Статус: Offline

    
    Цитата
    В плане аналоговых кнопок - вполне все реально  - писать скетч аналогового
    чтения - получаешь значения от 0 до 1023. Далее нормируешь по условию
    Могу посоветовать вариант использования pcf8574. I2c вы все равно используете, а для аналоговых кнопок нужно подключать АЦП, соответственно существенно возрастет размер скетча и упадет быстродействие.
     

    Cinema
    Дата: Пятница, 01.06.2018, 13:37 | Сообщение # 148        
    Генерал-майор
    Группа: Проверенные
    Сообщений: 618
    Статус: Offline

    С I2C какраз проблема у меня на имеющейся плате Pro Mini 34pin. Не работают как SDA и SCL пины А4 и А5. Как аналоговые входы/выходы - работают, при этом светодиод подключенный к одному из этих пинов в blink работает. Однако если в blink назначить на А4, то светодиод также будет мигать и на А5,A0,A2,A3. Пин А7, как гласит даташит, может работать только на вход.

    В итоге у меня остались: D3 и A1 = выходы на нагреватели, D4,D5,D6,D7,D8,D9 = для LCD1602, A4 = буззер, A6 = аналоговая клавиатура, D10,D11,D12,D13 = 2шт. MAX6675.
    Т.е. простые 4шт. кнопки некуда приткнуть, и шину I2C дисплей с I2C нельзя использовать.

    "Опыт — это то, что получаешь, не получив того, что хотел" © интернет

    Сообщение отредактировал Cinema - Пятница, 01.06.2018, 13:39
     

    snmar4enko
    Дата: Суббота, 02.06.2018, 09:22 | Сообщение # 149        
    Лейтенант
    Группа: Пользователи
    Сообщений: 68
    Статус: Offline

    Цитата Cinema ()
    С I2C как раз проблема у меня на имеющейся плате Pro Mini 34pin
    если выводы хоть как то работают то ардуина цела, проблема с I2C может быть проблемой с самой библиотекой 1602_I2C или тупо неправильный адрес устройства на шине. Пересканируй свой индикатор к примеру таким скетчем:
    Код
    #include <Wire.h>
    String stringOne;
    void setup()
    {
      Wire.begin();
      Serial.begin(9600);
      while (!Serial);         
    }
     
    void loop()
    {
      byte error, address;
      int nDevices;
      Serial.println("Scanning...");
      nDevices = 0;
      for(address = 1; address < 127; address++ ) 
      {
        Wire.beginTransmission(address);
        error = Wire.endTransmission();
     
    if (error == 0)
      {
      String stringOne =  String(address, HEX);
      Serial.print("0x");     Serial.print(stringOne); Serial.println("  ");
        
       nDevices++;
      }
        else if (error==4) 
        {
          Serial.print("Unknow error at address 0x");
          if (address<16) 
            Serial.print("0");
          Serial.println(address,HEX);
        }    
      }
      if (nDevices == 0)
        Serial.println("No I2C devices found\n");
      else
        Serial.println("done\n");
     
      delay(5000);          
    }

    - в терминал напишет все что есть на шине.....

    Про аналоговые кнопки - товарищ efimsu (архив есть в нашей  шапке) уже крутил аналоговые кнопки:
           
    Код
    int read_LCD_buttons(){               // read the buttons
        adc_key_in = analogRead(0);       // read the value from the sensor 

        // my buttons when read are centered at these valies: 0, 144, 329, 504, 741
        if (adc_key_in > 1000) return btnNONE; 
        if (adc_key_in < 50)   return btnRIGHT;  
        if (adc_key_in < 250)  return btnUP; 
        if (adc_key_in < 450)  return btnDOWN; 
        if (adc_key_in < 650)  return btnLEFT; 
        if (adc_key_in < 850)  return btnSELECT;  
        return btnNONE;                // when all others fail, return this.
    }


    - как видим измерил значения аналогового входа при нажатии кнопок и тупо проусловил ......
    Кстати в аналоговых кнопках как такового дребезга нет ..... так что можно упростить код (антидребез убрать)
     

    Cinema
    Дата: Понедельник, 04.06.2018, 00:02 | Сообщение # 150        
    Генерал-майор
    Группа: Проверенные
    Сообщений: 618
    Статус: Offline

    Библиотеки менял - пофигу ... Как и стандартный I2C scanner,ваш скетч выводит в монитор только "Scanning...".При этом адрес дисплея мне известен и на другой плате (Mega2560) с дисплеем проблем нет. У меня в Pro Mini этой A4,А5,A7,A0,A2,A3 стали работать, словно их все соединили параллельно, ипри этом у A4,A5 вырезали функцию I2CA7 не научился работатьна OUTPUT - я это пытаюсьдонести своими постами sad . Только A1и A6 работают в штатномрежиме (A1 = ADC IN,OUT и A6 = ADC IN).
    Пытаюсь разобраться с аналоговыми кнопками...

    Добавлено (04.06.2018, 00:02)
    ---------------------------------------------
    В общем, пересобрал я 2.0.5 под аналоговые кнопки. Всё нормально компилируется в IDE 1.6.3. Пины переназначил свои 15(A1) - верх, 20(A6) - резистивная аналоговая клава, Буззер на прежнем месте 18(A4), кулеры закомментировал.

    Теперь о грустном:
    Какой-бы пин я не назначал для верха, при подаче питания, после заставки, начинает моргать, примерно, 2Гц светодиод, подключенный вместо силовой верха.
    При подаче питания, всегда сразу после заставки сначала на 1 секунду зажигается светодиод, включенный вместо силовой низа, затем так же делает светодиод, подключенный вместо силовой верха. А далее в IDLE уже моргает 2Гц светодиод, подключенный вместо силовой верха.
    Прикрепления: AKEY_REWORK_205.zip (10.5 Kb)

    "Опыт — это то, что получаешь, не получив того, что хотел" © интернет

    Сообщение отредактировал Cinema - Понедельник, 04.06.2018, 00:02
     

    Поиск: