Всем здарова! Хотел сделать поворотники для велика, на Digispark. У каждого светодиода есть своя кнопка. Нажимаешь на правою мигает правый светодиод, на левую кнопку левый. Но что-то не получилось(. Я нажимая на любую из 2х кнопок а моргают все 2 светодиода. Библеотека OneButtone.
Принцип работы. Нажимаешь кнопку 1 раз ждёшь когда включится светодиод, и нажимаешь быстро 2 раза, и он моргает.
Скетч:
Принцип работы. Нажимаешь кнопку 1 раз ждёшь когда включится светодиод, и нажимаешь быстро 2 раза, и он моргает.
Скетч:
C++:
#include "OneButton.h"
typedef enum {
ACTION_OFF1, // Выключить сведотдиод1
ACTION_ON1, // Включить светодиод1
ACTION_FAST1, // Быстро моргать1
ACTION_ON2, // Включить светодиод2
ACTION_OFF2, // Выключить сведотдиод2
ACTION_FAST2, // Быстро моргать2
}
MyActions;
OneButton button1(3, true); //Кнопка1 подключена к 3 пину
OneButton button2(4, true); //Кнопка2 подключена к 4 пину
MyActions nextAction1 = ACTION_OFF1; //Выключенный светодиод
MyActions nextAction2 = ACTION_OFF2; //Выключенный светодиод
void setup() {
pinMode(2, OUTPUT); // Светодиод подключен к 2 пину
pinMode(1, OUTPUT); // Светодиод подключен к 1 пуну
button1.attachDoubleClick(DoubleClickFunction1);
button1.attachClick(ClickFunction1);
button2.attachClick(ClickFunction2);
button2.attachDoubleClick(DoubleClickFunction2);
}
void loop() {
unsigned long now1 = millis();
unsigned long now2 = millis();
button1.tick();
button2.tick();
delay(10);
if (nextAction1 == ACTION_OFF1) {
// ничего не делать
digitalWrite(1, LOW);
} else if (nextAction1 == ACTION_ON1) {
// Включить светодиод
digitalWrite(1, HIGH);
}
else if (nextAction1 == ACTION_FAST1) {
// Быстро моргать
if (now1 % 200 < 100) { // Частота моргания
digitalWrite(1, LOW);
} else {
digitalWrite(1, HIGH);
} // if
} // if
if (nextAction2 == ACTION_OFF2) {
// // Ничего неделать
digitalWrite(2, LOW);
} else if (nextAction2 == ACTION_ON2) {
// Включить светодиод
digitalWrite(2, HIGH);
} else if (nextAction2 == ACTION_FAST2) {
// Быстро моргать
if (now2 % 200 < 100){ // Частота моргания
digitalWrite(2, LOW);
} else {
digitalWrite(2, HIGH);
} // if
} // if
} //loop
void ClickFunction1() {
if (nextAction1 == ACTION_OFF1)
nextAction1 = ACTION_ON1;
else
nextAction1 = ACTION_OFF1;
} // myClickFunction
void DoubleClickFunction1() {
if (nextAction1 == ACTION_ON1) {
nextAction1 = ACTION_FAST1;
} else if (nextAction1 == ACTION_FAST1) {
nextAction1 = ACTION_ON1;
} // if
} // DoubleClickFunction
void ClickFunction2() {
if (nextAction2 == ACTION_OFF2)
nextAction2 = ACTION_ON2;
else
nextAction2 = ACTION_OFF2;
} // ClickFunction
void DoubleClickFunction2() {
if (nextAction2 == ACTION_ON2) {
nextAction2 = ACTION_FAST2;
} else if (nextAction2 == ACTION_FAST2) {
} // if
} // DoubleClickFunction
Изменено: