Подключение кнопки

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем yden, 13 авг 2016.

  1. yden

    yden Гик

    Здравствуйте.
    Поправьте если я не прав, плиз.
    Проект управления светом, ардуино нано. Кнопки подключил к выводам А1 и А2, сответственно при включении кнопки подаю на А1 или А2 5 вольт. В коде выводы прописаны как input. Но они же аналоговые, а кнопки нужно цеплять к цифре. Т.е я неверно подключил кнопки?
    Проблема в том, что цифровые выводы у меня все заняты. Если я скосячил, то как можно исправить ситуацию?

    Спасибо
     
  2. ANV

    ANV Гуру

    Аналоговые входы без проблем работают как цифровые.

    И не забываем, что когда кнопка разомкнута, то пин должен подтягиваться к противоположной шине. Т.е. если кнопка замыкает вход на +5, то надо поставть резистор 10К между входом и землей.
    Если сделать наоборот, кнопкой замыкать на землю, то можно использовать встроенный подтягивающий резистор к +5В, для этого вход надо определить как INPUT_PULLUP. В этом случае ненажатая кнопка возвращает HIGH, нажатая LOW
     
  3. yden

    yden Гик

    спасибо.
    А в коде нужно сказать что выход - цифра?
     
  4. ANV

    ANV Гуру

    Делать все тоже самое, что и с цифровой кнопкой: через pinMode определить как INPUT или INPUT_PULLUP и читать ее через digitalRead
     
  5. Securbond

    Securbond Гуру

    Насколько я помню аналоговые пины, если используются как цифровые, обозначаются 14,15,16.....
    Поправьте если не так...
     
  6. ostrov

    ostrov Гуру

    Код (C++):
    digitalRead(A0);
     
  7. vvr

    vvr Инженерище

    пины с А0 по А5 могут быть сконфигурированы как цифровые.
    нумерация 14, 15, 16, 17, 18, 19
    digitalRead(14);
     
    Securbond нравится это.
  8. ostrov

    ostrov Гуру

    Код (C++):
    PORTC & (1<< N); // где N - номер пина A0=1 и тд
     
    Securbond нравится это.
  9. vvr

    vvr Инженерище

    это вы для кого написали))))))
     
  10. ostrov

    ostrov Гуру

    Ну как один из вариантов, пусть будет. )
     
  11. Onkel

    Onkel Гуру

    а точно, что это? где "="?
     
  12. yden

    yden Гик

    Спасибо всем за советы.
    Вопрос по подтягивающему резистору.
    Имеют место быть помехи. Например, при включении холодильника вдруг включается и свет - срабатывает код связанный с кнопкой. К кнопке пустил витую пару, резистор поставил в шкафу, где стоит ардуина, соединив с землей. Далее в витой паре задействовал 3 жилы: вход 5в и выход 5в на кнопку, и жила с резистора. Так же для ликвидации дребезга контактов использовал библиотеку bounce (интервал 5 мс).
    Что можно изменить в схеме для уменьшения воздействия помех?
     
    Последнее редактирование: 15 авг 2016
  13. ostrov

    ostrov Гуру

    Это что же за холодильник, что от него кнопки срабатывают? Подтягивающий 10КОм к +5В попробуйте.
     
  14. yden

    yden Гик

    Я выше написал что стоит, 10кОм.
     
  15. rff-ei

    rff-ei Гик

    Да, к стати кнопки можно подтягивать и в самом коде не используя резистора (внутрисхемно)
    void setup ()
    {
    pinMode (14,INPUT);
    digitalWrite (14,HIGH);//подтягиваем к +5v
    или
    digitalWrite (14,LOW);//подтягиваем к земле
    }
    ну очень полезная фишка !))
     
  16. ostrov

    ostrov Гуру

    По сути это:
    Код (C++):
    pinMode (14,INPUT);
    digitalWrite (14,HIGH);//подтягиваем к +5v
    И есть то же самое что:
    Код (C++):
    pinMode (14,INPUT_PULLUP);
    Но по мне так лучше подтягивать внешним резистором, внутренний для прототипирования удобен, меньше возни.
     
    rff-ei нравится это.
  17. ANV

    ANV Гуру

    Это очень полезная фишка если хочется спалить контроллер.
    Вы таким образом выход замыкаете на землю.
    http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf стр. 365, строчка DC Current per I/O Pin - 40mA

    Нет, это не тоже самое. В первом случае наверх тянет резистор (и он притягиванием на землю не сгорит), во втором - транзистор, через который пойдет сквозной ток, если посадить на землю.
     
  18. rff-ei

    rff-ei Гик

    Во первых я подтягиваю вход ,а не выход
    Во вторых применяю это каждый раз и все устройства слава богу работают
    В третьих Си наверное немного отличается от программирования на Ардуино (Наверное я это не сам придумал):)
     
  19. Onkel

    Onkel Гуру

    что-то имхо напутано. Вы объявляете пин входом, а потом устанавливаете его как выход. digitalWrite() - это не команда включения подтяжки. Пин переключается на выход?У atmega328 кстати нет подтяжки к земле.
     
  20. rff-ei

    rff-ei Гик

    Вот именно ,что он объявлен входом и когда мы прописываем следующую строку digitalWrite(14,HIGH);мы его подтягиваем к плюсу ,также можно подтянуть и к земле прописав digitalWrite(14,LOW); Я очень уважаю ваш статус !!! без таких как вы нам многого не узнать !!! Но я привык верить больше глазам чем ушам, попробуйте сами )