Witam
Możecie mi podpowiedzieć jak w tym programie zrobić żeby np 2 kliknięcia w ciagu 5s włączyły diodę, a jeśli nie będzie 2 klików w tym czasie to ignoruje. I jaki warunek użyć żeby diody zapały się na przemian ?
Program działa tak że jak szybko kliknę 2 razy to reaguje, ale jak chciałbym kliknąć 2 razy w ciągu np 5s nie reaguje.
Kod:
#include "ClickButton.h"
const int ledPin = 12;
const int ledPin2 = 13;
int ledState = 0;
int ledState2 = 0;
const int buttonPin1 = 8;
ClickButton button1(buttonPin1, LOW, CLICKBTN_PULLUP);
int LEDfunction = 0;
void setup()
{
pinMode(ledPin,OUTPUT);
pinMode(ledPin2,OUTPUT);
button1.longClickTime = 1000 ;
}
void loop() {
button1.Update();
if (button1.clicks !=0) LEDfunction = button1.clicks;
if(button1.clicks == 1) ledState = !ledState;
digitalWrite(ledPin,ledState);
if(button1.clicks == 2) ledState2 = !ledState2;
digitalWrite(ledPin2,ledState2);
}
z ignorancją będzie źle bo trzeba bibliotekę przerabiać...
Myśle że wystarczy ta linijka
multiclickTime = 250; // Time limit for multi clicks
na
multiclickTime = 5000; // Time limit for multi clicks
A to drugie to wystarczy to
if(button1.clicks == 2) ledState2 = !ledState2;
Na to
if(button1.clicks == 2) ledState2 = !ledState;
Wcześniej tyle się z tym męczyłem. Bardzo dziękuje za podpowiedź. Działa super, czas i zapala na przemian. Ignoruje jak drugie wciśnięcie jest powyżej 5s tylko, kiedy wciskam 2 razy w ciągu tych 5s to muszę odczekać około 5s zanim dioda się zapali.
Proszę jeszcze o wskazówkę jaki warunek wpisać, żeby diody wyłączały się po określonym czasie.
Kod:
#include "ClickButton.h"
const int ledGreen = 12;
const int ledRed = 13;
int ledState = 0;
int ledState2 = 0;
const int buttonPin1 = 8; // przycisk
ClickButton button1(buttonPin1, LOW, CLICKBTN_PULLUP);
int LEDfunction = 0;
void setup()
{
pinMode(ledGreen,OUTPUT);
pinMode(ledRed,OUTPUT);
button1.multiclickTime = 5000; // Time limit for multi clicks
}
void loop()
{
button1.Update();
if (button1.clicks != 0) LEDfunction = button1.clicks;
if(button1.clicks == 2) ledState = !ledState;
if(button1.clicks == 2) ledState2 = !ledState;
digitalWrite(ledGreen,ledState);
digitalWrite(ledRed,ledState2);
}
void loop()
{
button1.Update();
Static uint32_t Tims = millis();
if (button1.clicks != 0) LEDfunction = button1.clicks;
if(button1.clicks == 2) ledState = !ledState;
if(button1.clicks == 2) ledState2 = !ledState;
Tims=millis();
digitalWrite(ledGreen,ledState);
digitalWrite(ledRed,ledState2);
if(millis()- Tims >= 5000){ // 5sekund do wyłączenia
Tims =millis();
ledState = LOW;
ledState2 = LOW;
digitalWrite(ledGreen,ledState);
digitalWrite(ledRed,ledState2);
}
}
Dziękuje za ogromną pomoc. Kombinuje od godz ale nie wiem jak na początku programu zadeklarować milisa
a po co deklarować?? przecież to funkcja wewnętrzna ona już jest.
Mi się tylko pomyliło bo powinno być static z małej litery nie z dużej...
Kod:
#include "ClickButton.h"
const int ledGreen = 12;
const int ledRed = 13;
int ledState = 0;
int ledState2 = 0;
const int buttonPin1 = 8; // przycisk
ClickButton button1(buttonPin1, LOW, CLICKBTN_PULLUP);
int LEDfunction = 0;
void setup()
{
pinMode(ledGreen,OUTPUT);
pinMode(ledRed,OUTPUT);
button1.multiclickTime = 5000; // Limit czasu w ciagu ktorego podajemy dwa impulsy.
}
void loop()
{
button1.Update();
static uint32_t Tims = millis();
if (button1.clicks != 0) LEDfunction = button1.clicks;
if(button1.clicks == 2) ledState = !ledState;
if(button1.clicks == 2) ledState2 = !ledState;
Tims=millis();
digitalWrite(ledGreen,ledState);
digitalWrite(ledRed,ledState2);
if(millis()- Tims >= 5000){ // 5sekund do wyłączenia
Tims =millis();
ledState = LOW;
ledState2 = LOW;
digitalWrite(ledGreen,ledState);
digitalWrite(ledRed,ledState2);
}
}
Poprawiłem skompilował się, ale diody nie gasną po 5 s
A może pokaż jak masz podłączone diody bo źle chyba przewidziałem że do masy lub funkcja bution się nie zeruje
Na płytce jedna nóżka diody jest na stałe podłączona do masy, a druga przez opornik do pinu Atmegi, stan wysoki z Atmegi włącza diodę.
Próbowałem za nic nie mogę zmusić ich do zgaszenia po określonym czasie
Zobacz teraz
#include "ClickButton.h"
const int ledGreen = 12;
const int ledRed = 13;
int ledState = 0;
int ledState2 = 0;
const int buttonPin1 = 8; // przycisk
ClickButton button1(buttonPin1, LOW, CLICKBTN_PULLUP);
int LEDfunction = 0;
uint32_t Tims = millis();
void setup()
{
pinMode(ledGreen,OUTPUT);
pinMode(ledRed,OUTPUT);
button1.multiclickTime = 5000; // Limit czasu w ciagu ktorego podajemy dwa impulsy.
}
void loop()
{
button1.Update();
if (button1.clicks != 0) LEDfunction = button1.clicks;
if(button1.clicks == 2) ledState = !ledState;
if(button1.clicks == 2) ledState2 = !ledState;
Tims=millis();
digitalWrite(ledGreen,ledState);
digitalWrite(ledRed,ledState2);
if(millis()- Tims >= 5000){ // 5sekund do wyłączenia
Tims =millis();
ledState = LOW;
ledState2 = LOW;
digitalWrite(ledGreen,ledState);
digitalWrite(ledRed,ledState2);
}
}