Jump to content
Sony

Работа кнопки в ардуино

Recommended Posts

Помогите с простым скетчем в Ардуино. Требуется нажатием одной кнопки, включать светодиод,  при следующем нажатии гасить первый и включать второй и так 5 светодиодов по циклу.

Share this post


Link to post
Share on other sites

Подобные элементарные задачи (как обработать кнопку, как зажечь светодиод) обычно изучаются в качестве примеров, в книжках типа "Программирование для чайников с нуля". Или вы всю жизнь намерены попрошайничать?

Edited by Dr. West

Share this post


Link to post
Share on other sites
14 часа назад, Dr. West сказал:

Подобные элементарные задачи (как обработать кнопку, как зажечь светодиод) обычно изучаются в качестве примеров, в книжках типа "Программирование для чайников с нуля". Или вы всю жизнь намерены попрошайничать?

Если бы такие примеры были то не спрашивал бы, я искал 5 дней! и везде одна кнопка и светодиод. А я понимаю так, что нужна переменная на кнопку, с увеличением на единицу, а вот как присвоить кнопке переменную, я не нашёл нигде.

Share this post


Link to post
Share on other sites

Особенности схемотехники и трассировки печатных плат для STM32WB55

Разработка новых устройств на базе беспроводного микроконтроллера STM32WB от STMicroelectronics может быть сделана в короткий срок, если выполнять некоторые важные правила и воспользоваться готовыми конструктивными решениями и рекомендациями инженеров ST.

Читать статью

Не нужно "присваивать кнопке переменную". Заводите переменную и при каждом новом событии (нажатии кнопки) инкрементируйте её. При этом делаем проверку: если значение больше 5 - обнуляем или присваиваем 1 - как вам нужно.

Не забываем обработать дребезг кнопки.

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

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

Повторяю - всё это по отдельности есть в любом учебнике по программированию МК, нужно лишь собрать кубики в "логическую кучу".

 

Edited by Dr. West

Share this post


Link to post
Share on other sites
7 часов назад, Dr. West сказал:

Не нужно "присваивать кнопке переменную". Заводите переменную и при каждом новом событии (нажатии кнопки) инкрементируйте её. При этом делаем проверку: если значение больше 5 - обнуляем или присваиваем 1 - как вам нужно.

Не забываем обработать дребезг кнопки.

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

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

Повторяю - всё это по отдельности есть в любом учебнике по программированию МК, нужно лишь собрать кубики в "логическую кучу".

 

Спасибо большое всё получилось, но вот только в ардуино. А вот перенести всё это, как и задумывалось, в Attiny13 не удалось

Share this post


Link to post
Share on other sites
                     

Видеокурс Работаем с микроконтроллерами STM32G0. Впервые на русском языке.

В цикле видеокурсов по работе с STM32G0 от компании STMicroelectronics показаны архитектура, периферия (особенности процессорного ядра, режимов пониженного питания, векторов прерываний, DMA и мультиплексора DMA, схемы тактирования и сброса, и.т.д.) и даны практические примеры. Материал дает наглядное понимание того, как начать работу на новых микроконтроллерах STM32G0

Подробнее

Значит, нужно изучать нормальные языки программирования.
А вообще, практического смысла здесь в применении МК мало, с задачей легко справится обычный счётчик, типа 176ИЕ8 или аналог.

Share this post


Link to post
Share on other sites
В 15.07.2017 в 17:57, Dr. West сказал:

Значит, нужно изучать нормальные языки программирования.
А вообще, практического смысла здесь в применении МК мало, с задачей легко справится обычный счётчик, типа 176ИЕ8 или аналог.

Cчётчики рассматривались в самую первую очередь, но это очень громоздко, 176ИЕ8 да ещё 176ла7 для подавления дребезга кнопки. А тинька маленькая (SMD) вот и хотел на  ней

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By Merlok Life
      Хочу сделать монстр-машинку с двигателем rs550 с металлическим корпусом на ардуино.
      Подскажите как управлять мотором через ардуино нано? 
       
    • By Геннадий Быков
      Уважаемые электронщики и им сочувствующие!
      Хочу на даче собрать макет морского маяка в человеческий рост. Но для этого необходима схема управляющая светодиодами. Основное, схема должна иметь независимое питание(Солнечная панель) и быть слаботочной (5-9 вольт). Как вижу я. Маяк ориентировочно высотой 1,50-1,80 м. В маяке, с низу до верха 6 окошек (по одному 5мм светодиоду). И на верху сам маяк из 8-ми 0,5 ваттных светодиодов установленных по кругу. С наступлением темноты, включаются диоды на "1 этаже" и раз в 5-10 минут происходит действие. Диоды поэтажно (снизу вверх) начинают загораться (как будто кто-то поднимается вверх по ступеням) и после загорания самого верхнего окна, через пару секунд, включается маяк. Поочередно по кругу (эффект метеора), со скоростью 2-3 сек на круг, делает оборотов 10 и выключается. Потом в обратной последовательности гасятся окошки (светодиоды) сверху в низ и остаются два нижних, периодически и независимо включающиеся и выключающиеся (эффект присутствия). И вновь через 5-10 минут вышеописанное действие. Буду очень признателен любым советам, ссылкам, помощью. Немного умею паять, немного знаю Ардуино. Готов в разумных пределах спонсировать, разработку и сборку.
    • Guest ренат
      By Guest ренат
      Всем здрасти))))
      прошу помощи в написании программы
      мои знания программирования на ардуино основаны на примерах и школьного курса )))
      так вот есть программы 
      int LedPin = 8;             // Подключаем светодиод к порту 13
      int ButPin = 2;             // Подключаем кнопку к выходу 10
      int flag = 0;                // флаг состояния
      int LedPinTime = 100;
      void setup()
      {
        pinMode(LedPin, OUTPUT);   // Инициализируем порт "ledPin" как выходной
      }  
      void loop()
      {
        if(digitalRead(ButPin) == HIGH && flag == 0)      
          {                                              
            digitalWrite(LedPin, !digitalRead(LedPin));
            flag = 1;
          }
        
        if(digitalRead(ButPin) == LOW && flag == 1)
          {
            flag = 0;
          }  
      }
      собрал из кусков, работает )))))
      но не то что мне нужно 
      Мне нужно чтобы при нажатие одной кнопки(без фиксации) светодиод загорался на три секунды ( и не важно держишь ты кнопку или кратковременно нажал, он через три секунды потухнет) 
      помогите кто может))) я в благодарность могу и на телефон денег кинуть )))) спасибо
    • By pingyini
      Всем доброго времени суток. Решил я сделать "умную" электронную сигарету на arduino. Концепция заключается в кнопочном управлении мощностью посредством ШИМ, наличии экрана, и некоторыми защитами в виде ограничения максимального времени нажатия и уход камня в сон (режим пониженного энергопотребления) после N секунд простоя.
      Вводные: по нажатию кнопки запускается ШИМ и управляет полевиком, но в целях защиты я хочу ограничить время выполнения кода до 7 секунд(что бы при случайном зажатии кнопки в кармане не получить травматическую ампутацию конечностей)

      Проблема пришла откуда не ждали - обработка нажатой основной кнопки срабатывает как попало. Нажимая кнопку обработчик может сработать сразу и отработает как по маслу, а может и через 5 нажатий не сработать вовсе.  Проверял в живую на Arduino UNO, Pro Mini (328е Меги) и в Proteus'е. Симптомы одни и те же.  Проблема очевидно в коде но я в упор не вижу в чем может быть загвоздка. Уровень у меня "штота умею" поэтому не судите строго. 
       
      #define pwmPin 5 #define buttonStart 3 #define maxOnTime 7000 //максимальное время выполнения условия нажатой кнопки #define RED_LED 7 #define GREEN_LED 8 int power = 150; //boolean StartState; boolean StartStateFlag; //Флаг кнопки Старт unsigned long pressTime; void setup() { pinMode(pwmPin, OUTPUT); pinMode(buttonStart, INPUT); pinMode(RED_LED, OUTPUT); pinMode(GREEN_LED, OUTPUT); Serial.begin(9600); //чисто для отладки } void loop() { if (digitalRead(buttonStart) && StartStateFlag && ((millis() - pressTime) <= maxOnTime)) { // (1) если кнопка старт нажата И была отпущена И нажата менее 7 секунд выполняем: analogWrite(pwmPin, power); //запуск ШИМ Serial.println("PWM_ON"); digitalWrite(GREEN_LED, HIGH); digitalWrite(RED_LED, LOW); } else { // (2) иначе StartStateFlag = false; // кнопка небыла отпущена analogWrite(pwmPin, 0); digitalWrite(GREEN_LED, LOW); Serial.println("PWM_OFF"); pressTime = millis(); } if (!digitalRead(buttonStart)) { //(3) если кнопка не нажата analogWrite(pwmPin, 0); //остановка ШИМ Serial.println("PWM_OFF"); digitalWrite(RED_LED, HIGH); StartStateFlag = true; //была отпущена и можно входить в условие с нажатой кнопкой (1) } } И файлы: сам скетч, .elf и .hex для шПротеуса и проект Протеус.
      P. S. ШИМ в Протеусе не работает в принципе, в железе все ОК 
      BUTTON_TEST.ino
      BUTTON_TEST.ino.eightanaloginputs.hex
      BUTTON_TEST.ino.elf
      BUTTON_TEST.ino.with_bootloader.eightanaloginputs.hex
      ButtonTest.pdsprj
    • By dimmer
      Необходимо собрать устройство на ардуино: 
      Управление одним сервоприводом (плавная регулировка 180 градусов) по блютуз с телефона.
      Задача
      Питание для привода-аккумулятор (пока не знаю какой именно, нужно подсказать)
      Минимизировать электропотребление, сделать так что б в спящем режиме не было расхода энергии, или почти не было.  Может убрать светодиоды из платы, или ещё каким то образом.
      Устройством буду пользоваться время от времени и не хотелось бы аккумулятор часто заряжать.
      Основные комплектующие в наличии, думал сам разберусь но нет ни времени, не особого желания это изучать. 
      Территориально Москва. Привезу комплектующие куда скажете, но желательно ЗАО

×
×
  • Create New...