Всё, облегчились? Ну, будем считать тему исчерпанной.
Arhat109-2 пишет:
буду препятствовать и далее.
Хорошо, только советую делать это как сейчас - просто "не верю", "ты не программист", "ты учишь плохому" - вот так и продолжайте. Главное, избегать любой конкретики, т.к. при любом появлении конкретики (кодов, примеров и т.п.) Вы опять будете сидеть в луже и нести ахинею про косяки в компиляторе и языке, как было уже не раз.
yul-i-an, хорошо, только давайте вечером или завтра. Сейчас у меня и работы много и ардуины нет, а вечером дома не знаю, если гости не придут - сделаю, а если придут, то завтра. Извините.
DigIn button_1(2,1);//кнопка на 2 пине, включена подтяжка
04
DigOut led(13,0);//светодиод на 13 пине по умолчаниюпогашен
05
06
voidsetup(){}
07
08
voidloop()
09
{
10
if(button_1.valid())//если действительно нажата кнопка
11
{
12
led.HI();//зажигаем светодиод
13
}
14
else//иначе
15
{
16
led.LO();//гасим светодиод
17
}
18
}
Варианты объявления экземпляра класса
DigIn x; - с параметрами по умолчанию (имя экземпляра x, 2 пин по умолчанию, pullup-отк, время антидребезга-50мс)
DigIn x(myPin); - (имя экземпляра x, myPin назначенный пин, pullup-отк по умолчанию, время антидребезга-50мс по умолчанию)
DigIn x(myPin, 1); - (имя экземпляра x, myPin назначенный пин, pullup-вкл, время антидребезга-50мс по умолчанию)
DigIn x(myPin, 1, 30); - (имя экземпляра x, myPin назначенный пин, pullup-вкл, время антидребезга-30мс
(127мс максимум))
т.к. в качестве источников дискретного сигнала могут выступать не только кнопки, но и реле, герконы, биметаллические контакты и т.п.
класс титановый велосипед для тактовой кнопки. не позволяет в качестве источников дискретного сигнала использовать не только кнопки, но и реле, герконы, биметаллические контакты и т.п. ?
Ваш класс Клапацуй 232 без сомнения также позволяет в качестве источников дискретного сигнала использовать не только кнопки, но и реле, герконы, биметаллические контакты и т.п.
В своем нашел ошибку, при создании более одного экземпляра класса защита от дребезга не производится, в данный момент ищу причину.
Да надоел он.
и, ты его решил заболтать вусмерть?
очевидно же, что каждый из вас прав по своему - ты со своей неадекватной оценкой реальности и он с пидагогической точки искривления сознания.
Всё, облегчились? Ну, будем считать тему исчерпанной.
буду препятствовать и далее.
Хорошо, только советую делать это как сейчас - просто "не верю", "ты не программист", "ты учишь плохому" - вот так и продолжайте. Главное, избегать любой конкретики, т.к. при любом появлении конкретики (кодов, примеров и т.п.) Вы опять будете сидеть в луже и нести ахинею про косяки в компиляторе и языке, как было уже не раз.
До свидания.
До свидания. Пост #138 из этой темы станет вашей постоянной лужей как только продолжите нести ахинею.
ЕвгенийП, не получается разобратся со статическими классами. Покажите пример.
yul-i-an, хорошо, только давайте вечером или завтра. Сейчас у меня и работы много и ардуины нет, а вечером дома не знаю, если гости не придут - сделаю, а если придут, то завтра. Извините.
похоже гости пришли и засиделись... С нетерпением жду продолжения темы (про классы, не про срач.)
п.с. я вот не пойму, если кому то не нравится что кто-то чего-то пишет, почему нельзя это просто игнорировать...
Mr.Privet, а что именно интересует? Делайте вброс, постараюсь ответить ;)
Ребят, простите, обязательно вернусь к теме как только так сразу, но тут так всё навалилось. Сеёчас чуток расхлебаюсь.
По мотивам титанового велосипеда для тактовой кнопки написал класс для цифрового входа с защитой от дребезга контактов (т.к. в качестве источников дискретного сигнала могут выступать не только кнопки, но и реле, герконы, биметаллические контакты и т.п.)
Текст класса
01
#ifndef DigIn_h
02
#define DigIn_h
03
04
#include <arduino.h>
05
06
class
DigIn {
07
public
:
08
// Конструктор
09
//DigIn NameDigIn(pin,pullup,debounce);
10
DigIn (
const
int8_t pin=2,
const
bool
state=0,
const
int8_t debounce=50) {
11
_pin = pin;
12
_debounce=debounce;
13
st=digitalRead(_pin);
14
(state) ? digitalWrite(_pin,INPUT_PULLUP) :pinMode(_pin, INPUT);
15
}
16
17
//получение состояния цифрового входа с защитой от дребезга
18
bool
valid()
19
{
20
unsigned
long
currentMillis=millis();
//засекаем время
21
bool
nst=digitalRead(_pin);
//считываем состояние
22
if
(nst==st)
23
{
24
if
(currentMillis-previousMillis>=_debounce)
25
{
26
return
1;
27
}
28
}
29
else
30
{
31
previousMillis=currentMillis;
32
nst=st;
33
return
0;
34
}
35
}
36
37
//вместо простого digitalRead() - не обязательно
38
bool
state()
39
{
40
return
digitalRead(_pin);
41
}
42
43
private
:
44
int8_t _pin;
//выходной пин
45
int8_t _debounce;
//выдержка антидребезга
46
bool
st;
//состояние
47
unsigned
long
previousMillis;
48
};
49
50
#endif
Пример использования
01
#include <DigIn.h>//yadi.sk/d/7tGp_zlVsBt7s
02
#include <DigOut.h>//yadi.sk/d/NM4S6HmFrTRu6
03
DigIn button_1(2,1);
//кнопка на 2 пине, включена подтяжка
04
DigOut led(13,0);
//светодиод на 13 пине по умолчаниюпогашен
05
06
void
setup
(){}
07
08
void
loop
()
09
{
10
if
(button_1.valid())
//если действительно нажата кнопка
11
{
12
led.HI();
//зажигаем светодиод
13
}
14
else
//иначе
15
{
16
led.LO();
//гасим светодиод
17
}
18
}
Варианты объявления экземпляра класса
DigIn x; - с параметрами по умолчанию (имя экземпляра x, 2 пин по умолчанию, pullup-отк, время антидребезга-50мс)
DigIn x(myPin); - (имя экземпляра x, myPin назначенный пин, pullup-отк по умолчанию, время антидребезга-50мс по умолчанию)
DigIn x(myPin, 1); - (имя экземпляра x, myPin назначенный пин, pullup-вкл, время антидребезга-50мс по умолчанию)
DigIn x(myPin, 1, 30); - (имя экземпляра x, myPin назначенный пин, pullup-вкл, время антидребезга-30мс
(127мс максимум))
Включение кнопки
По мотивам титанового велосипеда для тактовой кнопки написал класс для цифрового входа с защитой от дребезга контактов
надеюсь, что по мотивам класс для цифрового входа кто-то напишет велосипед велосипеда велосипеда.
т.к. в качестве источников дискретного сигнала могут выступать не только кнопки, но и реле, герконы, биметаллические контакты и т.п.
класс титановый велосипед для тактовой кнопки. не позволяет в качестве источников дискретного сигнала использовать не только кнопки, но и реле, герконы, биметаллические контакты и т.п. ?
Ваш класс Клапацуй 232 без сомнения также позволяет в качестве источников дискретного сигнала использовать не только кнопки, но и реле, герконы, биметаллические контакты и т.п.
В своем нашел ошибку, при создании более одного экземпляра класса защита от дребезга не производится, в данный момент ищу причину.
Устранил ошибку, теперь всё работает как надо.
Код на котором проверял
01
#include <DigIn.h>//yadi.sk/d/7tGp_zlVsBt7s
02
#include <DigOut.h>//yadi.sk/d/NM4S6HmFrTRu6
03
04
DigIn button_ON(2,1);
//кнопка ON на 2 пине, встроенная подтяжка вкл
05
DigIn button_OFF(3,1);
//кнопка OFF на 3 пине,встроенная подтяжка вкл
06
DigOut led(13,0);
//светодиод led на 13 пине, отключен
07
08
unsigned
long
currentMillis=millis();
//для хранения текущего времени
09
10
void
setup
()
11
{
12
//прерывание от таймера 0 для опроса millis() не чаще 1 раза/мс
13
OCR0A = 0xAF;
//robotosha.ru/arduino/multitasking-and-interrupts-arduino.html
14
TIMSK0 |= _BV(OCIE0A);
15
}
16
17
void
loop
()
18
{
19
if
(button_ON.valid(currentMillis))
//если ON действительно нажата
20
{
21
led.HI();
//включаем светодиод
22
}
23
if
(button_OFF.valid(currentMillis))
//если OFF действительно нажата
24
{
25
led.LO();
//выключаем светодиод
26
}
27
}
28
29
//по прерыванию таймера получаем текущий millis
30
SIGNAL(TIMER0_COMPA_vect)
31
{
32
currentMillis = millis();
33
}
Пришлось применить костыль в виде передачи текущего millis в функцию опроса цифрового входа, как найду выход исправлю.
как бы да, но:
причинно-следственная связь нарушена: согласно твоему коду - событие нажатия у тебя происходит после события дребезга.
как так, если дребезг есть есть следствие нажания?
подробней здесь #236