Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. #include <LiquidCrystal.h>      //Test využívá knihovnu LiquidCrystal
  2. #include <dht11.h>             // importuje knihovnu DHT11
  3.  
  4. /*******************************************************
  5. Tento program testuje LCD modul 1602 a jeho tlačítka
  6. úprava © Aleš Müller, Březen 2014,
  7. Verze 1
  8. ********************************************************/
  9.  
  10. // využité piny na desce Arduino
  11. LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
  12.  
  13. //stupen "o"
  14. byte stupen[8] = {
  15.   0b00110,
  16.   0b01001,
  17.   0b00110,
  18.   0b00000,
  19.   0b00000,
  20.   0b00000,
  21.   0b00000,
  22.   0b00000
  23. };
  24.  
  25.  
  26. // definice hodnot pro použití s panelem a tlačítky
  27. static int btnPUSHED = 0;  // počítadlo stisknutí všech tlačítek
  28. boolean btnPUSH = false;   // signalizace právě/stále stisknutého tlačítka
  29. int lcd_key     = 0;
  30. int adc_key_in  = 0;
  31. #define btnRIGHT  0
  32. #define btnUP     1
  33. #define btnDOWN   2
  34. #define btnLEFT   3
  35. #define btnSELECT 4
  36. #define btnNONE   5
  37.  
  38. // tato funkce čte hodnotu tlačítek
  39. int read_LCD_buttons()
  40. {
  41.  adc_key_in = analogRead(0);      // čteme hodnotu ze senzoru
  42.  // střední hodnota tlačítek je zhruba tato: 0, 144, 329, 504, 741
  43.  // přidáme cca 50 k těmto hodnotám a zkontrolujeme zda jsme blízko
  44.  if (adc_key_in > 1000) return btnNONE; // kontrolujeme nejprve tuto možnost, protože to je nejčastější stav
  45.  if (adc_key_in < 50)   return btnRIGHT;  
  46.  if (adc_key_in < 195)  return btnUP;
  47.  if (adc_key_in < 380)  return btnDOWN;
  48.  if (adc_key_in < 555)  return btnLEFT;
  49.  if (adc_key_in < 790)  return btnSELECT;  
  50.  return btnNONE;  // pokus nic z toho neodpovídá, vracíme tuto hodnotu
  51. }
  52.  
  53. //vytvoří objekt DHT11 s názvem MojeCidlo
  54. dht11 CidloDHT11; //
  55.  
  56. void setup()
  57. {
  58.  lcd.begin(16, 2);              // start knihovny pro LCD
  59.  lcd.createChar(1, stupen);     // sestavíme si vlastní znak "stupeň"
  60.  lcd.setCursor(0,0);            // sloupec 0 , řádek 0
  61.  lcd.print("  www.santy.cz  "); // jednoduchý výpis na LCD
  62.  lcd.setCursor(0,1);            // sloupec 0 , řádek 1
  63.  lcd.print("1602 LCD + DHT11");
  64.  delay(5000);                   // pauza 5 sec
  65.  lcd.clear();                   // vymažeme displej
  66.  lcd.setCursor(0,0);
  67.  lcd.print("  www.santy.cz  ");
  68.  
  69. }
  70.  
  71. void loop()
  72. {
  73.  lcd.setCursor(0,1);           // přesuneme kurzor na druhý řádek a znak č.13 (vše číslováno od nuly!)
  74.  
  75.   CidloDHT11.read(30);         // přečte údaje z čidla DTH11 připojeného na pin 30 (Arduino MEGA)
  76.   int hodnota = CidloDHT11.temperature;  // přečte hodnotu z D30
  77.   int vlhkost = CidloDHT11.humidity;    
  78.   lcd.setCursor(0,1);          // nastaví kurzor na třetí řádek a první znak
  79.   lcd.print("t=");             // napíše text t =
  80.   lcd.print(hodnota);          // napíše hodnotu teploty
  81.   lcd.write(1);                // vypíšeme náš znak pro stupeň
  82.   lcd.print("C");              // napíše C
  83.  
  84.   lcd.setCursor(11,1);          // nastaví kurzor na čtvrtý řádek a první znak
  85.   lcd.print("v=");              // napíše text v =
  86.   lcd.print(vlhkost);           // napíše hodnotu teploty
  87.   lcd.print("%");               // napíše %
  88.    
  89.   delay(1000);                  // čekej 1000ms
  90.  
  91.  
  92.  lcd.setCursor(0,1);            // vrátíme zpět na začátek druhého řádku
  93.  lcd_key = read_LCD_buttons();  // přečteme stav tlačítek
  94.  
  95.  switch (lcd_key)               // dle toho, které je stisknuto vypíšeme akci
  96.  {
  97.    case btnRIGHT:                 // ošetříme stav při stisku tlačítka DOPRAVA
  98.      {
  99.      if(btnPUSH) break;           // pokud už je tlačítko stisknuto, neprovádíme
  100.      btnPUSH = true;              // nastavíme, že je stisknuto některé tlačítko
  101.      break;
  102.      }
  103.    case btnLEFT:
  104.      {
  105.      if(btnPUSH) break;           // pokud už je tlačítko stisknuto, neprovádíme
  106.      btnPUSH = true;              // nastavíme, že je stisknuto některé tlačítko
  107.      break;
  108.      }
  109.    case btnUP:
  110.      {
  111.      if(btnPUSH) break;           // pokud už je tlačítko stisknuto, neprovádíme
  112.      btnPUSH = true;              // nastavíme, že je stisknuto některé tlačítko
  113.      break;
  114.      }
  115.    case btnDOWN:
  116.      {
  117.      if(btnPUSH) break;           // pokud už je tlačítko stisknuto, neprovádíme
  118.      btnPUSH = true;              // nastavíme, že je stisknuto některé tlačítko
  119.      break;
  120.      }
  121.    case btnSELECT:
  122.      {
  123.      if(btnPUSH) break;           // pokud už je tlačítko stisknuto, neprovádíme
  124.      btnPUSH = true;              // nastavíme, že je stisknuto některé tlačítko
  125.      break;
  126.      }
  127.      case btnNONE:
  128.      {
  129.      btnPUSH = false;
  130.      break;
  131.      }
  132.  }
  133. }
  134.  
  135.  
  136. Více zde: http://arduino-home.webnode.cz/news/dil-5-cidlo-teploty-a-vlhkosti-lcd-modul-1602-s-tlacitky-/
  137. Vytvořte si vlastní stránky zdarma: http://www.webnode.cz