Всё, облегчились? Ну, будем считать тему исчерпанной.
Arhat109-2 пишет:
буду препятствовать и далее.
Хорошо, только советую делать это как сейчас - просто "не верю", "ты не программист", "ты учишь плохому" - вот так и продолжайте. Главное, избегать любой конкретики, т.к. при любом появлении конкретики (кодов, примеров и т.п.) Вы опять будете сидеть в луже и нести ахинею про косяки в компиляторе и языке, как было уже не раз.
yul-i-an, хорошо, только давайте вечером или завтра. Сейчас у меня и работы много и ардуины нет, а вечером дома не знаю, если гости не придут - сделаю, а если придут, то завтра. Извините.
#ifndef DigIn_h
#define DigIn_h
#include <arduino.h>
class DigIn {
public:
// Конструктор
//DigIn NameDigIn(pin,pullup,debounce);
DigIn (const int8_t pin=2, const bool state=0, const int8_t debounce=50) {
_pin = pin;
_debounce=debounce;
st=digitalRead(_pin);
(state) ? digitalWrite(_pin,INPUT_PULLUP) :pinMode(_pin, INPUT);
}
//получение состояния цифрового входа с защитой от дребезга
bool valid()
{
unsigned long currentMillis=millis();//засекаем время
bool nst=digitalRead(_pin);//считываем состояние
if(nst==st)
{
if(currentMillis-previousMillis>=_debounce)
{
return 1;
}
}
else
{
previousMillis=currentMillis;
nst=st;
return 0;
}
}
//вместо простого digitalRead() - не обязательно
bool state()
{
return digitalRead(_pin);
}
private:
int8_t _pin; //выходной пин
int8_t _debounce; //выдержка антидребезга
bool st;//состояние
unsigned long previousMillis;
};
#endif
Пример использования
#include <DigIn.h>//yadi.sk/d/7tGp_zlVsBt7s
#include <DigOut.h>//yadi.sk/d/NM4S6HmFrTRu6
DigIn button_1(2,1);//кнопка на 2 пине, включена подтяжка
DigOut led(13,0);//светодиод на 13 пине по умолчаниюпогашен
void setup(){}
void loop()
{
if(button_1.valid())//если действительно нажата кнопка
{
led.HI();//зажигаем светодиод
}
else//иначе
{
led.LO();//гасим светодиод
}
}
Варианты объявления экземпляра класса
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 без сомнения также позволяет в качестве источников дискретного сигнала использовать не только кнопки, но и реле, герконы, биметаллические контакты и т.п.
В своем нашел ошибку, при создании более одного экземпляра класса защита от дребезга не производится, в данный момент ищу причину.
#include <DigIn.h>//yadi.sk/d/7tGp_zlVsBt7s
#include <DigOut.h>//yadi.sk/d/NM4S6HmFrTRu6
DigIn button_ON(2,1);//кнопка ON на 2 пине, встроенная подтяжка вкл
DigIn button_OFF(3,1);//кнопка OFF на 3 пине,встроенная подтяжка вкл
DigOut led(13,0);//светодиод led на 13 пине, отключен
unsigned long currentMillis=millis();//для хранения текущего времени
void setup()
{
//прерывание от таймера 0 для опроса millis() не чаще 1 раза/мс
OCR0A = 0xAF;//robotosha.ru/arduino/multitasking-and-interrupts-arduino.html
TIMSK0 |= _BV(OCIE0A);
}
void loop()
{
if(button_ON.valid(currentMillis))//если ON действительно нажата
{
led.HI();//включаем светодиод
}
if(button_OFF.valid(currentMillis))//если OFF действительно нажата
{
led.LO();//выключаем светодиод
}
}
//по прерыванию таймера получаем текущий millis
SIGNAL(TIMER0_COMPA_vect)
{
currentMillis = millis();
}
Пришлось применить костыль в виде передачи текущего millis в функцию опроса цифрового входа, как найду выход исправлю.
Да надоел он.
и, ты его решил заболтать вусмерть?
очевидно же, что каждый из вас прав по своему - ты со своей неадекватной оценкой реальности и он с пидагогической точки искривления сознания.
Всё, облегчились? Ну, будем считать тему исчерпанной.
буду препятствовать и далее.
Хорошо, только советую делать это как сейчас - просто "не верю", "ты не программист", "ты учишь плохому" - вот так и продолжайте. Главное, избегать любой конкретики, т.к. при любом появлении конкретики (кодов, примеров и т.п.) Вы опять будете сидеть в луже и нести ахинею про косяки в компиляторе и языке, как было уже не раз.
До свидания.
До свидания. Пост #138 из этой темы станет вашей постоянной лужей как только продолжите нести ахинею.
ЕвгенийП, не получается разобратся со статическими классами. Покажите пример.
yul-i-an, хорошо, только давайте вечером или завтра. Сейчас у меня и работы много и ардуины нет, а вечером дома не знаю, если гости не придут - сделаю, а если придут, то завтра. Извините.
похоже гости пришли и засиделись... С нетерпением жду продолжения темы (про классы, не про срач.)
п.с. я вот не пойму, если кому то не нравится что кто-то чего-то пишет, почему нельзя это просто игнорировать...
Mr.Privet, а что именно интересует? Делайте вброс, постараюсь ответить ;)
Ребят, простите, обязательно вернусь к теме как только так сразу, но тут так всё навалилось. Сеёчас чуток расхлебаюсь.
По мотивам титанового велосипеда для тактовой кнопки написал класс для цифрового входа с защитой от дребезга контактов (т.к. в качестве источников дискретного сигнала могут выступать не только кнопки, но и реле, герконы, биметаллические контакты и т.п.)
Текст класса
Пример использования
Варианты объявления экземпляра класса
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 без сомнения также позволяет в качестве источников дискретного сигнала использовать не только кнопки, но и реле, герконы, биметаллические контакты и т.п.
В своем нашел ошибку, при создании более одного экземпляра класса защита от дребезга не производится, в данный момент ищу причину.
Устранил ошибку, теперь всё работает как надо.
Код на котором проверял
Пришлось применить костыль в виде передачи текущего millis в функцию опроса цифрового входа, как найду выход исправлю.
как бы да, но:
причинно-следственная связь нарушена: согласно твоему коду - событие нажатия у тебя происходит после события дребезга.
как так, если дребезг есть есть следствие нажания?
подробней здесь #236