Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. /*
  2. www.santy.cz
  3. Dil 4 - LCD modul - část 2
  4. */
  5. //Test využívá knihovnu LiquidCrystal
  6. #include <LiquidCrystal.h>
  7.  
  8. /*******************************************************
  9. Tento program testuje LCD modul 1602 a jeho tlačítka
  10. úprava © Aleš Müller, Březen 2014,
  11. Verze 2
  12. ********************************************************/
  13.  
  14. // využité piny na desce Arduino
  15. LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
  16.  
  17. // definice hodnot pro použití s panelem a tlačítky
  18. static int btnPUSHED = 0;  // počítadlo stisknutí všech tlačítek
  19. boolean btnPUSH = false;   // signalizace právě/stále stisknutého tlačítka
  20. int lcd_key     = 0;
  21. int adc_key_in  = 0;
  22. #define btnRIGHT  0
  23. #define btnUP     1
  24. #define btnDOWN   2
  25. #define btnLEFT   3
  26. #define btnSELECT 4
  27. #define btnNONE   5
  28.  
  29. // tato funkce čte hodnotu tlačítek
  30. int read_LCD_buttons()
  31. {
  32.  adc_key_in = analogRead(0);      // čteme hodnotu ze senzoru
  33.  // střední hodnota tlačítek je zhruba tato: 0, 144, 329, 504, 741
  34.  // přidáme cca 50 k těmto hodnotám a zkontrolujeme zda jsme blízko
  35.  if (adc_key_in > 1000) return btnNONE; // kontrolujeme nejprve tuto možnost, protože to je nejčastější stav
  36.  if (adc_key_in < 50)   return btnRIGHT;  
  37.  if (adc_key_in < 195)  return btnUP;
  38.  if (adc_key_in < 380)  return btnDOWN;
  39.  if (adc_key_in < 555)  return btnLEFT;
  40.  if (adc_key_in < 790)  return btnSELECT;  
  41.  return btnNONE;  // pokus nic z toho neodpovídá, vracíme tuto hodnotu
  42. }
  43.  
  44. void setup()
  45. {
  46.  lcd.begin(16, 2);              // start knihovny pro LCD
  47.  lcd.setCursor(0,0);            // sloupec 0 , řádek 0
  48.  lcd.print("  www.santy.cz  "); // jednoduchý výpis na LCD
  49.  lcd.setCursor(0,1);            // sloupec 0 , řádek 1
  50.  lcd.print("1602 LCD  Keypad");
  51.  delay(5000);                   // pauza 5 sec
  52.  lcd.clear();                   // vymažeme displej
  53.  lcd.setCursor(0,0);
  54.  lcd.print("Stiskni tlacitko");
  55.  
  56. }
  57.  
  58. void loop()
  59. {
  60.  lcd.setCursor(12,1);           // přesuneme kurzor na druhý řádek a znak č.13 (vše číslováno od nuly!)
  61.  lcd.print(millis()/1000);      // vypíšeme počet sekund od spuštění zařízení
  62.  
  63.  
  64.  lcd.setCursor(0,1);            // vrátíme zpět na začátek druhého řádku
  65.  lcd_key = read_LCD_buttons();  // přečteme stav tlačítek
  66.  
  67.  switch (lcd_key)               // dle toho, které je stisknuto vypíšeme akci
  68.  {
  69.    case btnRIGHT:                 // ošetříme stav při stisku tlačítka DOPRAVA
  70.      {
  71.      if(btnPUSH) break;           // pokud už je tlačítko stisknuto, neprovádíme
  72.      lcd.print("Doprava  ");      // vypíšeme které tlačítko bylo stisknuto
  73.      btnPUSH = true;              // nastavíme, že je stisknuto některé tlačítko
  74.      btnPUSHED++;                 // přičteme jedničku k počtu stisknutí tlačítek
  75.      lcd.print(btnPUSHED, DEC);   // vypíšeme počet stiknutí na LCD displej
  76.      break;
  77.      }
  78.    case btnLEFT:
  79.      {
  80.      if(btnPUSH) break;
  81.      lcd.print("Doleva   ");
  82.      btnPUSHED++;
  83.      lcd.print(btnPUSHED, DEC);
  84.      btnPUSH = true;
  85.      break;
  86.      }
  87.    case btnUP:
  88.      {
  89.      if(btnPUSH) break;
  90.      lcd.print("Nahoru   ");
  91.      btnPUSHED++;
  92.      lcd.print(btnPUSHED, DEC);
  93.      btnPUSH = true;
  94.      break;
  95.      }
  96.    case btnDOWN:
  97.      {
  98.      if(btnPUSH) break;
  99.      lcd.print("Dolu     ");
  100.      btnPUSHED++;
  101.      lcd.print(btnPUSHED, DEC);
  102.      btnPUSH = true;
  103.      break;
  104.      }
  105.    case btnSELECT:
  106.      {
  107.      if(btnPUSH) break;
  108.      lcd.print("Volba    ");
  109.      btnPUSHED++;
  110.      lcd.print(btnPUSHED, DEC);
  111.      btnPUSH = true;
  112.      break;
  113.      }
  114.      case btnNONE:
  115.      {
  116.      lcd.print("- nic -  ");
  117.      lcd.print(btnPUSHED, DEC);
  118.      btnPUSH = false;
  119.      break;
  120.      }
  121.  }
  122. }