Мы назначаем выход D3 для кнопки, второй контакт кнопки подключаем к GND — это земля, после подключаем резистор 220 ом и светодиод.

Код программы:

void setup() {
Serial.begin(9600);
pinMode(3, INPUT_PULLUP); // Мы назначаем выход D3
}
bool flag=false;      // объявляем переменные 
uint32_t btnTimer = 0;
void loop(){
                 // читаем входящее значение для удобства
bool btnState = !digitalRead(3); // bool btnState  не равно !digitalRead(3)
if (btnState && !flag && millis() - btnTimer > 100)// btnState и не !flag или millis() – btnTimer больше 100 
{
flag = true;   // flag равно истина
btnTimer=millis(); 
Serial.println("press"); // вывод данных в порт нажатие кнопки
}
if (!btnState && flag && millis() - btnTimer>100) {  //не !btnState и flag и millis() – btnTimer больше 100 
flag=false;   // flag равно лож 
btnTimer = millis();
//Serial.println("release");
}
}

В нашем примере мы используем функцию millis()  для подавления дребезга контактов кнопки, делаем задержку, что б не было ложного срабатывания кнопки.

Есть еще второй вариант подавления дребезга контактов с помощью: резистора 1-10 килом, конденсатора 0,1 микрофарад.

Резистор подключаем на плюс кнопки, а конденсатор в параллель питания и называется — RC цепи.

Вот как выглядит это на практике:

RC цепи.

Принципиальная схема:

Я рекомендую всегда использовать программный способ если это возможно   

Функция millis() является одной из самых важных и полезных функций в Arduino.

Она используется для измерения времени, прошедшего с момента запуска вашего микроконтроллера.

Как это работает?

Функция millis() возвращает количество миллисекунд, прошедших с момента старта программы на Arduino.

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

Преимущества использования функции millis() включают в себя возможность создания множества несколько задержек и таймеров одновременно, не привязываясь к определенным временным интервалам.

Это особенно полезно в проектах, где нужно взаимодействовать с различными устройствами или обработать несколько событий одновременно.

Кроме того, функция millis() может быть использована для создания секундомеров, таймеров, а также для определения промежутков времени между различными событиями в вашем проекте.

Например, если вы хотите, чтобы ваша LED лампочка мигала каждые 500 миллисекунд, вы можете использовать функцию millis() для создания этой задержки, таким образом ваш код будет выглядеть примерно так:

unsigned long previousMillis=0;
const long interval=500;
void loop(){
  unsigned long currentMillis=millis();
  if (currentMillis-previousMillis>=interval) {
    previousMillis=currentMillis;
    // Код для мигания LED
    digitalWrite(LED_PIN, !digitalRead(LED_PIN));
  }
}

Таким образом, функция millis() представляет собой мощный инструмент для работы с временем в проектах Arduino, обеспечивая гибкость и удобство при создании временных задержек и таймеров. Благодаря этой функции, ваш код может стать более эффективным и удобным для использования.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *