ARDUINO. Лампочки и кнопочки

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

Схема подключения кнопки с плате ардуино.


Обратите внимание, что кнопка притянута через резистор 10К к земле и нормально на выводе отсутствует напряжение (которое может появиться из-за внутренних подтягивающих резисторов 100К микроконтроллера) и при нажатии кнопки на выводе 2 Ардуины появляется высокий уровень, что и регистрирует функция digitalRead(2);
Схема была бы немного проще, если бы кнопку подключить не к плюсу питания, а к земле, можно было бы отказаться от внешнего резистора, но пострадала бы наглядность программы.
Кроме того подтягивающие резисторы включаются программно (с помощью фюзов) и в разных версиях компиляторов могут выставляться разные значения — т.е. вы будете ожидать включения подтягивающих резисторов, а они будут выключены и программа будет выдавать черт знает какие результаты. И понять кто виноват в том что все работает не так как нужно будет очень и очень трудно, так что в реальных проектах лучше не экономить на копеечных резисторах и явно притягивать выводы туда куда нужно по логике работы программы.
Ниже представлена монтажная схема на беспаечной макетной плате или если проще — макетке.


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

// Button.ino
// Программа ждет нажатия на кнопку и включает светодиод, показывая что кнопка нажата
// Светодиод подключается к 13-му выходу
// Кнопка подключается ко 2-му
int buttonState = 0;         // переменная в которую будем записывать состояние кнопки
void setup() {
  pinMode(13, OUTPUT); // 13 вывод — цифровой выход
  pinMode(2, INPUT);    // вывод 2 инициализируем как вход
}
// основной цикл
void loop() {
   buttonState = digitalRead(2); // читаем состояние на цифровом входе 2
   if (buttonState == HIGH) {     // если кнопка нажата, т.е. на ней присутствует напряжение питания
      digitalWrite(13, HIGH); // подаем на 13-й вывод напряжение и светодиод зажигается
   }
   else {
      digitalWrite(13, LOW);  // а иначе тушим его, на выходе 13 устанавливаем низкий уровень напряжения
   }
}

В конце как обычно проверяем программу на наличие ошибок и очепяток и заливаем в контроллер.
Для закрепления знаний попробуйте добавить в схему еще лампочек и кнопочек и написать программу управления светофором например 😉



Комментариев нет:

Отправить комментарий