класс титановый велосипед StopWatch.

Клапауций 322
Offline
Зарегистрирован: 31.12.2015
класс титановый велосипед StopWatch.
класс считает количество миллисекунд между двумя последними событиями.
Клапауций 322
Offline
Зарегистрирован: 31.12.2015
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// класс титановый велосипед 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;}
}

};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

Клапауций 322
Offline
Зарегистрирован: 31.12.2015
подключение класса как библиотеки:
- скопировать код класса в файл class_StopWatch.h
- скопировать файл class_StopWatch.h в папку class_StopWatch
- скопировать папку class_StopWatch в *\Мои документы\Arduino\libraries\
Клапауций 322
Offline
Зарегистрирован: 31.12.2015
класс является продолжением сериала "класс титановый велосипед ..." (см. "Поиск" по форуму)
 
класс можно использовать отдельно или как дополнение для "класс титановый велосипед для delay без delay()" - т.е. теперь мы можем устанавливать период генерации регулярных событий как производную от периода нерегулярных событий.
 
примеры:
- нажатием кнопки с неким интервалом можно задать интервал блинка светодиода равный двум последним нажатиям кнопки.
- что-то происходит чаще чем 1 секунда, то делаем одно. что-то происходит реже или равно 1 секунде, то делаем другое.
- что-то не успевает произойти, автоматически подкручиваем нужные переменные, что бы успевало.
- ведём статистику, записывая длительность периодов нерегулярных событий куда-то.
- отладка скетча: смотрим, на какое время превращаем контроллер в кирпич гениальным и быстрым кодом.
 
Клапауций 322
Offline
Зарегистрирован: 31.12.2015
пример ползания класс титановый велосипед 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.
GarryC
Offline
Зарегистрирован: 08.08.2016

О, Господи !

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

GarryC пишет:

О, Господи !

я тебя слушаю, раб мой.

кто тебя обидел?

DrProg
Offline
Зарегистрирован: 07.08.2015

Почему титановый?

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

DrProg пишет:

Почему титановый?

потому, что титановый велосипед классный.

карбон - гавно.

DrProg
Offline
Зарегистрирован: 07.08.2015

Почему тогда "ползания"?

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

DrProg пишет:

Почему тогда "ползания"?

потому, что "ползатели".

RoN
Offline
Зарегистрирован: 28.12.2017

Клапауций 232, хотел спросить. У вас очень крутой код:)

Можно ли подключить тактовую кнопку на аналоговый вывод?

Вопрос по вашему коду. Подскажите пожалуйста, на какие строки мне необходимо обратить внимаение чтобы выполнение/завершение программного кода выполнялось по нажатию тактовой кнопки?

Заранее спасибо!

Клапауций 089
Клапауций 089 аватар
Offline
Зарегистрирован: 14.01.2018

RoN пишет:

Клапауций 232, хотел спросить. У вас очень крутой код:)

Можно ли подключить тактовую кнопку на аналоговый вывод?

Вопрос по вашему коду. Подскажите пожалуйста, на какие строки мне необходимо обратить внимаение чтобы выполнение/завершение программного кода выполнялось по нажатию тактовой кнопки?

Заранее спасибо!

ответил здесь #594