Изчитане на Бутон с Arduino Nano: Два Примера и Подробно Обяснение

Изчитане на Бутон с Arduino Nano Два Примера и Подробно Обяснение

Въведение

Изучаването на работата с бутони е една от основните стъпки при работа с микроконтролери като Arduino Nano. В тази статия ще разгледаме два различни примера за работа с бутон и светодиод. Първият пример ще обясни как да включваме и изключваме светодиод, когато бутонът е натиснат. Вторият пример ще покаже как да използваме бутона за управление на светодиода чрез брояч – при първо натискане светодиодът ще се включва, а при второ натискане ще се изключва.

Преди за започнем да “кодим”, първо ще трябва да опроводим схемата за този пример. За тази цел ще ни трябва един бутон, един лед диод и два резистора 220om, и 10К.

За да окабелим правилно схемата ще трябва да се запознаем с конфигурацията на пиновете (pinout), на Arduino NANO. За да разберете това посетете нашето ревю за тази платформа, като кликнете на този линк: Arduino Nano.

Също така ще използваме част от предишна наша статия като база за тази, а именно първата ни програма с Arduino: Arduino IDE и Arduino UNO първaта ни програма.

Схема за Изчитане на Бутон с Arduino Nano

Изчитане на Бутон с Arduino Nano Схема

Част 1: Основно Изчитане на Състоянието на Бутон с Arduino NANO

В първата част ще разгледаме как да включим светодиода на Arduino Nano, когато бутонът е натиснат, и как да го изключим, когато бутонът не е натиснат.

Примерен код

#define BUTTON_PIN 2  // Дефинираме пин 2 като пин за бутона
#define LED_PIN 13    // Вграденият светодиод на пин 13

void setup() {
  // Задаваме пин 2 като вход
  pinMode(BUTTON_PIN, INPUT);
  
  // Задаваме пин 13 като изход за светодиода
  pinMode(LED_PIN, OUTPUT);
  
  // Инициализация на серийната комуникация за тестване
  Serial.begin(9600);
}

void loop() {
  // Прочитаме състоянието на бутона
  int buttonState = digitalRead(BUTTON_PIN);

  // Ако бутонът е натиснат
  if (buttonState == HIGH) {
    digitalWrite(LED_PIN, HIGH);  // Включваме светодиода
    Serial.println("Бутонът е натиснат!");
  } else {
    digitalWrite(LED_PIN, LOW);   // Изключваме светодиода
    Serial.println("Бутонът НЕ е натиснат.");
  }

  // Малко закъснение за по-стабилно четене
  delay(100);
}

Обяснение на кода

  • Деклариране на пиновете
    • #define BUTTON_PIN 2 и #define LED_PIN 13: Дефинираме BUTTON_PIN за бутона, който ще бъде свързан към пин 2, и LED_PIN за вградения светодиод на пин 13.
  • Функцията setup()
    • pinMode(BUTTON_PIN, INPUT): Пинът за бутона се задава като вход, което означава, че ще четем състоянието му (високо или ниско).
    • pinMode(LED_PIN, OUTPUT): Задаваме LED_PIN като изход за светодиода.
    • Serial.begin(9600): Инициализираме серийната комуникация за тестване със скорост от 9600 baud.
  • Функцията loop()
    • int buttonState = digitalRead(BUTTON_PIN): Прочитаме състоянието на бутона и го запаметяваме в променливата buttonState.
    • if проверка: Ако бутонът е натиснат (buttonState == HIGH), светодиодът се включва (digitalWrite(LED_PIN, HIGH)), а съобщение се изпраща към Serial Monitor (Serial.println("Бутонът е натиснат!")). Ако бутонът не е натиснат, светодиодът се изключва.
    • Закъснение: delay(100) добавя малко закъснение, за да предотвратим “трептене” на сигнала.

Този код е много подходящ за основно изследване на работа с цифрови входове и изходи. С него можем да разберем как да включваме или изключваме устройства в зависимост от състоянието на бутон.

Част 2: Управление на Светодиода чрез Превключване

Във втората част ще разгледаме как да използваме един бутон за включване и изключване на светодиода последователно. Това е по-сложен подход, който изисква използване на брояч, за да запомним колко пъти бутонът е натиснат.

Примерен код

#define BUTTON_PIN 2  // Дефинираме пин 2 като пин за бутона
#define LED_PIN 13    // Вграденият светодиод на пин 13

int button_count = 0;

void setup() {
  // Задаваме пин 2 като вход
  pinMode(BUTTON_PIN, INPUT);
  
  // Задаваме пин 13 като изход за светодиода
  pinMode(LED_PIN, OUTPUT);
  
  // Инициализация на серийната комуникация за тестване
  Serial.begin(9600);
}

void loop() {
  // Прочитаме състоянието на бутона
  int buttonState = digitalRead(BUTTON_PIN);

  // Ако бутонът е натиснат
  if (buttonState == HIGH) {
    button_count++;
    
    if (button_count == 1) {
      digitalWrite(LED_PIN, HIGH);  // Включваме светодиода
      Serial.println("LED is ON");
      delay(250);
    }

    if (button_count == 2) {
      digitalWrite(LED_PIN, LOW);  // Изключваме светодиода
      Serial.println("LED is OFF");
      button_count = 0;  // Нулираме брояча
      delay(250);
    }
  }
}

Обяснение на кода

  • Деклариране на пиновете и променливите
    • #define BUTTON_PIN 2 и #define LED_PIN 13: Както и в предишния пример, дефинираме пиновете за бутона и светодиода.
    • int button_count = 0: Създаваме променлива button_count, която ще преброява колко пъти е натиснат бутонът.
  • Функцията setup()
    • Настройките в setup() са същите както в предишния пример – настройваме пиновете и инициализираме серийната комуникация.
  • Функцията loop()
    • int buttonState = digitalRead(BUTTON_PIN): Прочитаме състоянието на бутона.
    • if (buttonState == HIGH): Ако бутонът е натиснат, увеличаваме стойността на button_count с 1: (button_count++).
      • При първо натискане (button_count == 1):
        • Светодиодът се включва с digitalWrite(LED_PIN, HIGH).
        • Изпращаме съобщение в Serial Monitor (Serial.println("LED is ON")).
        • Добавяме малко закъснение (delay(250)), за да избегнем нежелано двойно отчитане.
      • При второ натискане (button_count == 2):
        • Светодиодът се изключва (digitalWrite(LED_PIN, LOW)).
        • Изпращаме съобщение, че светодиодът е изключен (Serial.println("LED is OFF")).
        • button_count се нулира, за да може при следващото натискане да започнем отначало.

Този код демонстрира как с един бутон може да се управлява едно устройство, като го включваме и изключваме последователно. Това е полезен подход, когато нямаме много бутони или искаме да създадем по-удобен интерфейс.

Повече за командите които сме използвали в тази стаия може да прочетете в офицялния сайт на Ардуино: линк.

Заключение

В тази статия разгледахме два подхода за изчитане на бутон с Arduino Nano. Първият пример е основен и показва как да включваме и изключваме светодиод в зависимост от състоянието на бутона. Вторият пример демонстрира как може да използваме бутон за последователно включване и изключване на светодиода с помощта на брояч. И двата подхода са отлични начини да започнете работа с Arduino и са основа за създаване на по-сложни и интерактивни проекти. Надяваме се, че тази статия ще ви помогне да се ориентирате по-добре в света на микроконтролерите и цифровите входове!

Translate »