środa, 12 lutego 2014

Arduino przycisk wielofunkcyjny

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;
    }
}
}