Поворотник для велика, на Digispark ATtiny85
- Войдите на сайт для отправки комментариев
Сб, 30/05/2020 - 14:06
Всем здарова! Хотел сделать поворотники для велика, на Digispark. У каждого светодиода есть своя кнопка. Нажимаешь на правою мигает правый светодиод, на левую кнопку левый. Но что-то не получилось(. Я нажимая на любую из 2х кнопок а моргают все 2 светодиода. Библеотека OneButtone.
Принцип работы:Нажимаешь правою кнопку и моргает правый светодиод, нажимаешь на эту же кнопку он выключается. Также и с левой.
Скетч:
#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.attachClick(ClickFunction1); button2.attachClick(ClickFunction2); } 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; nextAction1 = ACTION_FAST1; } else if (nextAction1 == ACTION_FAST1) { nextAction1 = ACTION_OFF1; } // if } // ClickFunction1 void ClickFunction2() { if (nextAction2 == ACTION_OFF2) { nextAction2 = ACTION_ON2; nextAction2 = ACTION_FAST2; } else if (nextAction2 == ACTION_FAST2) { nextAction2 = ACTION_OFF2; } // if } // ClickFunction2
не понял, как одной кнопкой выбирается аж три режима - ON, OFF и FAST ?
Просто он без ON, OFF не будет выключатся 1 нажатием кнопки
не вижу, зачем вообще нужен режим ON , он полностью дублируется с FAST
вот так можно упростить (на примере одного светодиода) - в ЛУП оставить только режим FAST, режим OFF отрабатывать только в Click
Млять - вот какой-то му..жик сказал, что % - это целочисленное деление и все суют его в свои программы как маньяк в целку. % - это в си остаток от деления! И нахера оно в этой программе я не понимаю.
Учите язык!
кстати. насчет enum с типами действий (Actions) - не нужно туда вносить отдельно действия для первого светодиода и отдельно для второго. enum - это тип данных, он должен быть общий. А различать действия для разных диодов вы будете, присваивая конкретное действие переменным nextAction1 и nextAction2
Млять - вот какой-то му..жик сказал, что % - это целочисленное деление и все суют его в свои программы как маньяк в целку. % - это в си остаток от деления! И нахера оно в этой программе я не понимаю.
Учите язык!
нормально тут все. имхо. Первую половину каждых 200мс светик горит, вторую выключен.
нормально тут все. имхо. Первую половину каждых 200мс светик горит, вторую выключен.
И точно - чето затупил. Хотя тенденция % есть.
Спасибо за упрощение! А проблему решить сможете?
Спасибо за упрощение! А проблему решить сможете?
у вас в коде я проблем не вижу. А кнопки как подключены? Подтяжка используется?
Я использовал библеотеку OneButton, там я писал куда кнопка подключена, как будет нажиматься (Один раз, зажатие, двойное нажатие). Я использываю (одно нажатие) и всё.
А проблема такова: у каждого светодиода есть своя кнопка. Я нажимаю любую из кнопок и моргают все светодиоды.
А я хочу чтобы каждый светодиод моргал со своей кнопки. Правый светодиод правой кнопкой, Левый светодиод левой.
Я использовал библеотеку OneButton, там я писал куда кнопка подключена, как будет нажиматься (Один раз, зажатие, двойное нажатие). Я использываю (одно нажатие) и всё.
А проблема такова: у каждого светодиода есть своя кнопка. Я нажимаю любую из кнопок и моргают все светодиоды.
А я хочу чтобы каждый светодиод моргал со своей кнопки. Правый светодиод правой кнопкой, Левый светодиод левой.
Это как раз понятно. Вопрос про схему подключения. Нарисуйте - контроллер это вещь программно-аппаратная. Тут все нюансы важны.
дел
Что то у нас одни поворотники в последнее время.) Люблю велосипедики.)
Что то у нас одни поворотники в последнее время.) Люблю велосипедики.)
Вот, гля, учитесь - никаких библиотек. Все ясно и понятно.
Я новичок мне простительно)
Я новичок мне простительно)
Не простительно, поскольку Вы открыли тему в ветке "программирование", а не в "песочнице". Соответствуйте.