Подключение тактовой кнопки. Фонарик.

В данной статье мы сделаем простой фонарик, используя тактовую кнопку.

 

Для этого нам потребуется:

  • Макетная плата

  • Arduino UNO или любой другой аналог

  • Тактовая кнопка

  • Светодиод

  • Резистор 220 Ом

В используемой кнопке сразу встроен подтягивающий резистор.

То есть, если есть нажатие, то Vout = 0, а если нет нажатия, то Vout = Vcc.

 

Первым шагом является подключение тактовой кнопки к Ардуино.

Светодиод подключаем к цифровому пину 3 arduino. Разъемы VCC и GND тактовой кнопки подключаем к рельсе питания и земли на макетной плате соответственно. Разъем D0 подключаем к A0. Ниже представлена схема.

 

 

 

Следующим шагом открываем Arduino IDE и копируем данный скетч.

 

 

#define BUTTON 5
#define LED 3

void setup() {
  pinMode(LED, OUTPUT); //настройка пина в режим выхода
  pinMode(BUTTON, INPUT); //настройка пина в режим входа
}

void loop() {
  if(digitalRead(5) == LOW) { //если кнопка нажата
   digitalWrite(3, HIGH); //то включаем светодиод
  }
  if(digitalRead(5) == HIGH) { //если кнопка не нажата
   digitalWrite(3, LOW); //то выключаем светодиод
  }
}

Теперь для интереса напишем тот же код, но на языке СИ и в другой среде программирования. Это среда IDE AtmelStudio 7. Ведь для микроконтроллера не важно в какой программе написан код и на каком языке. Главное чтоб он был написан правильно. Итак наш написанный аналогичный код на СИ может выглядеть таким образом.

 

#include <avr/io.h>
 
#define PORT_BUTTON PINC
#define BUTTON PC0
 
#define PORT_LED PORTD
#define LED PD3
 
 
int main(void)
{
        DDRC = 0<<BUTTON;  //настройка пина в режим входа
        PORTC= 1<<BUTTON;  //настройка пина в режим входа
         
        DDRD = 1<<LED;  //настройка пина в режим выхода
        PORTD= 0<<LED;  //настройка пина в режим выхода
 
    while (1) 
    {
 
        if ((PORT_BUTTON & (1<<(BUTTON))) == 0)//в зависимости от состояния кнопки делаем вкл/выкл LED
        {
            PORT_LED |= (1<<LED);//включим светодиод
        }
        else
        {
            PORT_LED &= (~(1<<LED));//выключим светодиод
        }
    }
}

 

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

 

#include <avr/io.h>
 
#define PORT_BUTTON PINC
#define BUTTON PC0
 
#define PORT_LED PORTD
#define LED PD3
 
#define ClearBit(reg, bit)       reg &= (~(1<<(bit)))
#define SetBit(reg, bit)          reg |= (1<<(bit))
#define BitIsClear(reg, bit)    ((reg & (1<<(bit))) == 0)
 
int main(void)
{
    DDRC = 0<<BUTTON;  //настройка пина в режим входа
    PORTC= 1<<BUTTON;  //настройка пина в режим входа
     
    DDRD = 1<<LED;  //настройка пина в режим выхода
    PORTD= 0<<LED;  //настройка пина в режим выхода
 
    while (1)
    {
 
        if (BitIsClear(PORT_BUTTON,BUTTON))//в зависимости от состояния кнопки делаем вкл/выкл LED
        {
            SetBit(PORT_LED,LED);//включим светодиод
        }
        else
        {
            ClearBit(PORT_LED,LED);//выключим светодиод
        }
    }
}