Программирование кнопки

ArGoNeOn

✩✩✩✩✩✩✩
15 Апр 2020
17
3
16
Всем привет, я тут захотел сделать так, чтобы при нажатии кнопки светодиод загорался, а при другом - погасал, объясните пж, как это сделать
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
725
145
1 завести переменную типа bool
2 при нажатии кнопки проверить ее состояние
3 если false, то зажечь светодиод и выставить переменную в true
4 если true, то погасить светодио и выставить ее в false

есть еще вариант с чтением бита напрямую, но в ардуине это не очень вариант
зато быстрый и мало кода жрет
 

ArGoNeOn

✩✩✩✩✩✩✩
15 Апр 2020
17
3
16
1 завести переменную типа bool
2 при нажатии кнопки проверить ее состояние
3 если false, то зажечь светодиод и выставить переменную в true
4 если true, то погасить светодио и выставить ее в false

есть еще вариант с чтением бита напрямую, но в ардуине это не очень вариант
зато быстрый и мало кода жрет
А можешь это кодом написать, просто так не оч понятно
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
725
145
мне нравится библиотека гивера для кнопок, там на все случаи жизни кнопки

C++:
#define BTN_PIN 9        // кнопка подключена сюда (BTN_PIN --- КНОПКА --- GND)
#include "GyverButton.h"
GButton butt1(BTN_PIN);

bool state = false;
const int ledPin = 7;
void setup() {

  butt1.setDebounce(90);        // настройка антидребезга (по умолчанию 80 мс)
  butt1.setTimeout(300);        // настройка таймаута на удержание (по умолчанию 500 мс)
  pinMode(ledPin, OUTPUT);
}
void loop() {
  butt1.tick();  // НЕ НУЖНА, в этом режиме (AUTO) она входит в каждую функцию
  if (butt1.isClick())
  {
    if(state == false)
    {
      digitalWrite(ledPin, HIGH);
      state = true;
    }
     else
     {
      digitalWrite(ledPin, LOW);
      state = false;
     }
  }
}
 

ArGoNeOn

✩✩✩✩✩✩✩
15 Апр 2020
17
3
16
мне нравится библиотека гивера для кнопок, там на все случаи жизни кнопки

C++:
#define BTN_PIN 9        // кнопка подключена сюда (BTN_PIN --- КНОПКА --- GND)
#include "GyverButton.h"
GButton butt1(BTN_PIN);

bool state = false;
const int ledPin = 7;
void setup() {

  butt1.setDebounce(90);        // настройка антидребезга (по умолчанию 80 мс)
  butt1.setTimeout(300);        // настройка таймаута на удержание (по умолчанию 500 мс)
  pinMode(ledPin, OUTPUT);
}
void loop() {
  butt1.tick();  // НЕ НУЖНА, в этом режиме (AUTO) она входит в каждую функцию
  if (butt1.isClick())
  {
    if(state == false)
    {
      digitalWrite(ledPin, HIGH);
      state = true;
    }
     else
     {
      digitalWrite(ledPin, LOW);
      state = false;
     }
  }
}
Спасибо
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
725
145
можно еще упростить
C++:
#define BTN_PIN 9        // кнопка подключена сюда (BTN_PIN --- КНОПКА --- GND)
#include "GyverButton.h"
GButton butt1(BTN_PIN);

bool state = false;
const int ledPin = 7;
void setup() {

  butt1.setDebounce(90);        // настройка антидребезга (по умолчанию 80 мс)
  butt1.setTimeout(300);        // настройка таймаута на удержание (по умолчанию 500 мс)
  pinMode(ledPin, OUTPUT);
}
void loop() {
  butt1.tick();  // НЕ НУЖНА, в этом режиме (AUTO) она входит в каждую функцию
  if (butt1.isClick())
  {
    state =! state;
    digitalWrite(ledPin, state);
  }
}