In acest articol vom adauga la meniu si posibilitatea de a selecta fiecare meniu cu ajutorul butonului inclus in encoder.

Butonul encoderului se va conecta la pinul digital 6 al Arduino.

Codul sursa modificat este cel de mai jos:

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <Rotary.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int pinA = 2;
int pinB = 3;
int buton = 6;
Rotary r = Rotary(pinA, pinB); 
int coloane = 16;
char* Meniu[] = {"Contrast", "Volum", "Limba", "Dificultate", "Versiune"};
int elemente = 5;
int linieCursor = 0; 
int stareButon = 1;  
int ultimaStareButon = 1;
unsigned long ultimulDebounceTime = 0;
unsigned long intarziereDebounce = 100;
int citireButon;

void setup() {
  digitalWrite (pinA, HIGH);     
  digitalWrite (pinB, HIGH);
  pinMode (buton,INPUT);
  lcd.begin();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Meniu cu encoder");
  lcd.setCursor(0, 1);
  lcd.print("rotativ...");
  delay(2000);
  MeniulMeu();
}

void loop() {
   volatile unsigned char result = r.process();
   if (result) {
    result == DIR_CCW ? linieCursor = linieCursor - 1 : linieCursor = linieCursor + 1;
    if (linieCursor < 0) { 
      linieCursor = elemente - 1; 
    } 
    if (linieCursor > elemente - 1) {
      linieCursor = 0;
    }
    MeniulMeu();
  }
stareButon = butonApasat();

  if (stareButon == 0) {
    lcd.clear();
    lcd.setCursor(0, 0); 
    lcd.print("Selectie");
    lcd.setCursor(0, 1);
    selectie();
    MeniulMeu();
  }
}

void MeniulMeu() {
  lcd.clear();
  lcd.setCursor(0, 0); 
  lcd.print("Meniu Principal");
  lcd.setCursor(0, 1);
  lcd.print("<"); 
  lcd.setCursor(coloane - 1, 1); 
  lcd.print(">");
  lcd.setCursor(1, 1);
  lcd.print(Meniu[linieCursor]);
}

int butonApasat() {
  int citireButon = digitalRead(buton);
   if (citireButon != ultimaStareButon) {
    ultimulDebounceTime = millis();
  }
  if ((millis() - ultimulDebounceTime) > intarziereDebounce) {
    if (citireButon != stareButon) {
      stareButon = citireButon;
    }
  }
 ultimaStareButon = citireButon; 
 return stareButon;
}

void selectie()
{
  switch (linieCursor) {
    case 0:
      lcd.print("Optiune 1    ");
      break;
    case 1:
      lcd.print("Optiune 2    ");
      break;
    case 2:
      lcd.print("Optiune 3    ");
      break;
    case 3:
      lcd.print("Optiune 4    ");
      break;
    case 4:
      lcd.print("Optiune 5    ");
      break;
    default:
      break;
  }
  delay(2000);
}

Nu sunt comentarii

Acest website foloseste cookie-uri pentru o experienta placuta in timpul navigarii.