Zasada działania:
1. Ilość kliknięć wybiera nam numer programu który ma się uruchomić i mamy tu 3 programy:
a) 1 kliknięcie - zaświeca się dioda czerwona a na ekranie widnieje napis "Wybrana funkcja nr 1"
b) 2 kliknięcia - zaświeca się dioda żółta a na ekranie widnieje napis "Wybrana funkcja nr 2"
c) 3 kliknięcia - zaświeca się dioda zielona a na ekranie widnieje napis "Wybrana funkcja nr 3"
2. W układzie zamontowano 4 diodę (zieloną a opcjonalnie może to być brzęczek) która informuje nam mrugnięciem o wciśnięciu przycisku co daje nam możliwość policzenia ile razy nacisnęliśmy przycisk.
3. Po wciśnięciu przycisku (np 2 razy), program odczekuje 3 sekundy a następnie włącza program 2 opisany powyżej.
Wady:
1. nie dopisałem jeszcze funkcji odpowiedzialnej za przekroczenie ilości wciśnięć przycisku dlatego kiedy przekroczy się liczbę 3 klinknięć to arduino się zapętla i konieczny jest reset.
Kod programu:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int licznik;
int klikacz = 1;
int red = 10;
int yellow = 9;
int green = 8;
int info = 7;
int funkcja;
long czas;
void setup()
{
Serial.begin(9600);
pinMode(klikacz, INPUT_PULLUP);
pinMode(red, OUTPUT);
pinMode(yellow, OUTPUT);
pinMode(green, OUTPUT);
pinMode(info, OUTPUT);
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("Wybrana funkcja");
}
void loop()
{
if(digitalRead(klikacz) == LOW)
{
delay(20);
licznik = licznik++;
Serial.println(licznik);
digitalWrite(info, HIGH);
while(digitalRead(klikacz) == LOW);
delay(20);
digitalWrite(info, LOW);
czas = millis()/1000;
}
if(millis()/1000-czas > 3 && funkcja < 4)
{
funkcja = licznik;
licznik = 0;
}
switch(funkcja)
{
case 1:
{
digitalWrite(red, HIGH);
digitalWrite(yellow, LOW);
digitalWrite(green, LOW);
lcd.setCursor(0,1);
lcd.print("Nr 1");
break;
}
case 2:
{
digitalWrite(red, LOW);
digitalWrite(yellow, HIGH);
digitalWrite(green, LOW);
lcd.setCursor(0,1);
lcd.print("Nr 2");
break;
}
case 3:
{
digitalWrite(red, LOW);
digitalWrite(yellow, LOW);
digitalWrite(green, HIGH);
lcd.setCursor(0,1);
lcd.print("Nr 3");
break;
}
}
}