класс является продолжением сериала "класс титановый велосипед ..." (см. "Поиск" по форуму)
класс можно использовать отдельно или как дополнение для "класс титановый велосипед для delay без delay()" - т.е. теперь мы можем устанавливать период генерации регулярных событий как производную от периода нерегулярных событий.
примеры:
- нажатием кнопки с неким интервалом можно задать интервал блинка светодиода равный двум последним нажатиям кнопки.
- что-то происходит чаще чем 1 секунда, то делаем одно. что-то происходит реже или равно 1 секунде, то делаем другое.
- что-то не успевает произойти, автоматически подкручиваем нужные переменные, что бы успевало.
- ведём статистику, записывая длительность периодов нерегулярных событий куда-то.
- отладка скетча: смотрим, на какое время превращаем контроллер в кирпич гениальным и быстрым кодом.
пример ползания класс титановый велосипед StopWatch.
#include <class_BUTTON.h>
#include <class_noDELAY.h>
#include <class_StopWatch.h>
BUTTON BUTTON_01(3);
StopWatch StopWatch_01;
noDELAY noDELAY_01;
void setup () {
pinMode(14, OUTPUT); // LED_01
digitalWrite(14, 1);
pinMode(15, OUTPUT); // LED_02
digitalWrite(15, 1);
noDELAY_01.start();
}
void loop() {
BUTTON_01.read();
noDELAY_01.read(StopWatch_01.interval); // событие генерится с периодом подсчитанным StopWatch.
StopWatch_01.read(BUTTON_01.click_down); // подсчёт количества миллисекунд между двумя последними нажатиями кнопки.
if (noDELAY_01.tick) {digitalWrite(14, !digitalRead(14));} // блинк с периодом двух последних нажатий кнопки.
if (StopWatch_01.interval <= 1000) {digitalWrite(15, 0);} // кнопка была нажата чаще или равно 1 раз в секунду.
if (StopWatch_01.interval > 1000) {digitalWrite(15, 1);} // кнопка была нажата реже, чем 1 раз в секунду.
}
в конструкции StopWatch_01.read(BUTTON_01.click_down); может присутствовать не одна булева переменная (BUTTON_01.click_down), но и логическая сумма переменных и(или) условий.
например: нажата кнопка и пин светодиода в логической единице или напряжение на аналоговом пине больше 506.
т.е. StopWatch_01.read((BUTTON_01.click_down && digitalRead(14)) || (analogRead(0) > 506)); будет считать миллисекунды между возможными комбинациями нескольких событий: нажатие кнопки, при потушенном светодиоде или когда на аналоговом пине напряжение больше 506.
Клапауций 232, хотел спросить. У вас очень крутой код:)
Можно ли подключить тактовую кнопку на аналоговый вывод?
Вопрос по вашему коду. Подскажите пожалуйста, на какие строки мне необходимо обратить внимаение чтобы выполнение/завершение программного кода выполнялось по нажатию тактовой кнопки?
Клапауций 232, хотел спросить. У вас очень крутой код:)
Можно ли подключить тактовую кнопку на аналоговый вывод?
Вопрос по вашему коду. Подскажите пожалуйста, на какие строки мне необходимо обратить внимаение чтобы выполнение/завершение программного кода выполнялось по нажатию тактовой кнопки?
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // класс титановый велосипед StopWatch. // класс считает количество миллисекунд между двумя последними событиями. #include <Arduino.h> class StopWatch { public: unsigned long previous; unsigned long interval; boolean event; StopWatch() { previous = millis(); interval = 0; event = 0; } void read(boolean _event) { event = _event; unsigned long current = millis(); if (event == 1) {interval = current - previous; previous = current;} } }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#include <class_BUTTON.h> #include <class_noDELAY.h> #include <class_StopWatch.h> BUTTON BUTTON_01(3); StopWatch StopWatch_01; noDELAY noDELAY_01; void setup () { pinMode(14, OUTPUT); // LED_01 digitalWrite(14, 1); pinMode(15, OUTPUT); // LED_02 digitalWrite(15, 1); noDELAY_01.start(); } void loop() { BUTTON_01.read(); noDELAY_01.read(StopWatch_01.interval); // событие генерится с периодом подсчитанным StopWatch. StopWatch_01.read(BUTTON_01.click_down); // подсчёт количества миллисекунд между двумя последними нажатиями кнопки. if (noDELAY_01.tick) {digitalWrite(14, !digitalRead(14));} // блинк с периодом двух последних нажатий кнопки. if (StopWatch_01.interval <= 1000) {digitalWrite(15, 0);} // кнопка была нажата чаще или равно 1 раз в секунду. if (StopWatch_01.interval > 1000) {digitalWrite(15, 1);} // кнопка была нажата реже, чем 1 раз в секунду. }класс титановый велосипед для тактовой кнопки.
класс титановый велосипед для delay без delay().
О, Господи !
О, Господи !
я тебя слушаю, раб мой.
кто тебя обидел?
Почему титановый?
Почему титановый?
потому, что титановый велосипед классный.
карбон - гавно.
Почему тогда "ползания"?
Почему тогда "ползания"?
потому, что "ползатели".
Клапауций 232, хотел спросить. У вас очень крутой код:)
Можно ли подключить тактовую кнопку на аналоговый вывод?
Вопрос по вашему коду. Подскажите пожалуйста, на какие строки мне необходимо обратить внимаение чтобы выполнение/завершение программного кода выполнялось по нажатию тактовой кнопки?
Заранее спасибо!
Клапауций 232, хотел спросить. У вас очень крутой код:)
Можно ли подключить тактовую кнопку на аналоговый вывод?
Вопрос по вашему коду. Подскажите пожалуйста, на какие строки мне необходимо обратить внимаение чтобы выполнение/завершение программного кода выполнялось по нажатию тактовой кнопки?
Заранее спасибо!
ответил здесь #594