Kod:
int pinPrzycisku1 = 2;
int pinLED = 13;
float czasTrzymaniaPrzycisku = 0;
unsigned long czasPierwszegoWcisniecia = 0;
unsigned long czasDrugiegoWcisniecia = 0;
bool trybDwukrotnegoWcisniecia = false;
bool trybJednokrotnegoWcisniecia = false;
bool trybPrzytrzymania=false;
int czasNaPodwojneWcisniecie = 600;
int czasNaPrzytrzymaniePrzycisku = 500;
void setup() {
// put your setup code here, to run once:
pinMode(pinPrzycisku1, INPUT_PULLUP);
pinMode(pinLED, OUTPUT);
Serial.begin(9600);
}
void loop() {
// nacisniecie przycisku
while (digitalRead(pinPrzycisku1) == LOW)
{
delay(100);
czasTrzymaniaPrzycisku = czasTrzymaniaPrzycisku + 100;
}
if (czasTrzymaniaPrzycisku >= 100 && czasTrzymaniaPrzycisku < 500 && czasPierwszegoWcisniecia > 0)
{
czasDrugiegoWcisniecia = millis();
}
if (czasTrzymaniaPrzycisku >= 100 && czasTrzymaniaPrzycisku < 500 && czasPierwszegoWcisniecia == 0)
{
czasPierwszegoWcisniecia = millis();
}
if (czasDrugiegoWcisniecia - czasPierwszegoWcisniecia > 0 && czasDrugiegoWcisniecia - czasPierwszegoWcisniecia < czasNaPodwojneWcisniecie)
{
Serial.println("Tryb dwukrotnego wcisniecia aktywowany");
//
//
//Tudaj funkcja podwojnego klikniecia
//
//
czasPierwszegoWcisniecia = 0;
czasDrugiegoWcisniecia = 0;
}
if (millis() - czasPierwszegoWcisniecia >= czasNaPodwojneWcisniecie && czasPierwszegoWcisniecia > 0)
{
czasPierwszegoWcisniecia = 0;
czasDrugiegoWcisniecia = 0;
Serial.println("Tryb pojedynczego wcisniecia aktywowany");
//
//
//Tutaj funkcja pojedynczego klikniecia
//
//
}
if (czasTrzymaniaPrzycisku >= czasNaPrzytrzymaniePrzycisku)
{
czasPierwszegoWcisniecia = 0;
czasDrugiegoWcisniecia = 0;
Serial.println("Tryb przytrzymania przycisku aktywowany");
//
//
//Tutaj funkcja przytrzymania przycisku
//
//
}
//zerowanie po osiagnieciu max wartosci przez millis
if (millis()-czasPierwszegoWcisniecia<0)
{
czasPierwszegoWcisniecia = 0;
czasDrugiegoWcisniecia = 0;
}
czasTrzymaniaPrzycisku = 0;
}