bool a_dr=false;
bool first=false;
uint16_t=period;
unsigned long=_time_;
void setup() {
}
void loop() {
if (allow)
{ if (!digitalRead(/* нужная ножка*/))
if(!first){first=true;
allow=false;
_time_=millis;
period=30;
a_dr=true;
}
else{
digitalWrite(/* нужная ножка*/,true);//включаем СД
_time_=millis();
period=8000;
allow=false;
}
}
else{
if(millis()-_time_>=period&&a_dr){
allow=true;
}
if(millis()-_time_>=100)digitalWrite(/* нужная ножка*/,false);//выключаем СД
if(millis()-_time_>=period)allow=true;
}
}
попробуйте так
Да? То есть два клика отслеживать не надо (и на этом останавливаться)? Умываю руки.
Немного подправить придётся
Интересно! Я ведь ещё только понедельник, будь он не ладен!
Ваш код не заработал, я поправил как посчитал правильным(но видать ошибся) срабатывает от первого нажатия…
bool a_dr = false;
bool first = false;
uint16_t period;
unsigned long _time_;
int allow;
int led = 4;
int butt = 2;
void setup() {
pinMode(led, OUTPUT);
pinMode(butt, INPUT_PULLUP);
}
void loop() {
if (allow)
{ if (!digitalRead(2))
if(!first){first=true;
allow=false;
_time_=millis;
period=30;
a_dr=true;
}
else{
digitalWrite(4,true);//включаем СД
_time_=millis();
period=8000;
allow=false;
}
}
else{
if(millis()-_time_>=period&&a_dr){
allow=true;
}
if(millis()-_time_>=100)digitalWrite(4,false);//выключаем СД
if(millis()-_time_>=period)allow=true;
}
}
а где pressingCounter++ и if(pressingCounter>42) {} ?
А вот здесь уже моих знаний не хватает к сожалению…
Попробуйте хотя-бы - вдруг получится.
очень может быть, с первого раза всегда не так
Ну как лично я понял то вот так надо было прописать. Но теперь светодиод сам моргает без кнопки… Если кто то готов написать нормальный рабочий код за адекватную сумму, напишите уже…
bool a_dr = false;
bool first = false;
uint16_t period;
unsigned long _time_;
int allow;
int led = 4;
int butt = 2;
int pressingCounter;
void setup() {
pinMode(led, OUTPUT);
pinMode(butt, INPUT_PULLUP);
}
void loop() {
if (allow)
{ if (!digitalRead(2))
if(pressingCounter>42) {}
if(!first){first=true;
pressingCounter++;
allow=false;
_time_=millis;
period=30;
a_dr=true;
}
else{
digitalWrite(4,true);//включаем СД
_time_=millis();
period=8000;
allow=false;
}
}
else{
if(millis()-_time_>=period&&a_dr){
allow=true;
}
if(millis()-_time_>=100)digitalWrite(4,false);//выключаем СД
if(millis()-_time_>=period)allow=true;
}
}
это нужно там, где поджигается светодиод.
Ну, и не забывайте, что когда-то счётчик следует обнулять.
Откуда взято 42, я правильно понимаю?
Тему можно закрывать. решил вопрос благодаря библиотеке kakmyc_btn
#include <kakmyc_btn.h>
kakmyc_btn Btn2 (2, INPUT_PULLUP, 2);
int led = 4;
void setup(){
pinMode(led, OUTPUT);
}
void loop() {
int BTN2=Btn2.read();
if((BTN2) == 2) {
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(10000);
}
}
Пришлось поковыряться в CPP файле и поправить мультиклик под мой интервал. И все заработало. Огромное спасибо тебе BOOM за наводку)))
Так же спасибо всем кто пытался помочь: [Alexey_Rem] , а не строил умника!)
Мне интересно, а как не показывать ум, если человек реально умнее?
Нельзя “строить умника” чтобы не оскорблять чувства тупых, так правильно?
Для чего создан форум? Чтобы обсуждать и помогать я правильно понимаю? Ну так если видно что я делаю что то не так, неужели нельзя все сделать правильно как понимающий человек? Мое время деньги. Ваше тоже. Надо заплатить, заплатил бы…
Кто-нибудь знает, слово “псец” - это слово “пёс” “с суффиксом -ец в роли субъективной оценки”? Или это другое?
Этот - для общения по интересам. Не для помощи страждущим ![]()
Нет, неправильно. Отсюда (от неправильного понимания) и Ваши проблемы в общении на форуме.
Форум создан для общение по интересам. С Вами не общаются потому, что Вы неинтересны присутствующим. Станьте интересным, и Вас будут боготворить.
Я тут поспешил немного, начал проверять, код ждет пока я завершу щелкать кнопку… Есть мысли? Прописать может типа остановки после 2х нажатий?.. а так все хорошо было…
kakmyc_btn Btn2 (2, INPUT_PULLUP, 2);
int led = 4;
void setup(){
pinMode(led, OUTPUT);
}
void loop() {
int BTN2=Btn2.read();
if((BTN2) == 2) {
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(10000);
}
}```
Кажется, я сам дошёл до ответа на своё вопрос: