ช่วยดู Code Keypad ให้หน่อยครับ

Started by jued, July 11, 2016, 09:18:26 PM

Previous topic - Next topic

jued

คือเวลากด keypad อยากให้หน้าจอมัน clear screen แล้วแสดงเฉพาะ ตัวเลขที่เรากดรับค่าเข้าไปอะครับ
ตอนนี้มันเป็นดังในคลิปวีดีโอ : https://www.youtube.com/watch?v=BWQ7aNKk6KE


#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <EEPROM.h>
#include "DHT.h"
#define DHTPIN A0
#define DHTTYPE DHT22
#define LEDgreen 12
#define LEDred   13
DHT dht(DHTPIN, DHTTYPE);
bool use_external_eeprom = true;
bool himadity = true ;
// I2C BUS ADDRESSES
#define EEPROM_BUS_ADDRESS 0x50 // external eeprom i2c bus address (use i2c scanner to get it)
#define LCD_BUS_ADDRESS 0x27  // lcd i2c bus address (use i2c scanner to get it)

// EEPROM AT24C16
//#define AT24C16 4


int eEPROMValue = 0;
int eEPROMaddr = 0;
int eEPROMaddr1 = 1;
int eEPROMaddr2 = 2;
int eEPROMaddr3 = 3;
// KEYPAD
const byte numRows = 4;
const byte numCols = 4;
byte rowPins[numRows] = { 11, 10, 9, 8 };
byte colPins[numCols] = { 7, 6, 5, 4 };
char keymap[numRows][numCols] =
{
  { '1', '2', '3', 'A' },
  { '4', '5', '6', 'B' },
  { '7', '8', '9', 'C' },
  { '*', '0', '#', 'D' }
};
#define CLEAR_KEY          'C'
#define SAVE_KEY           '#'
#define RESTORE_KEY        '*'
#define SWITCH_EEPROM_KEY  'A'
#define SWITCH_EEPROM_KEY1  'B'
#define LCD_DISPLAY_KEY    'D'


Keypad myKeypad = Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);
String inputString = "";

// LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
byte temp[8] = {
  0b00100,
  0b01010,
  0b01010,
  0b01110,
  0b01110,
  0b11111,
  0b11111,
  0b01110
};
byte humudity[8] = {
  0b00100,
  0b00100,
  0b01010,
  0b01010,
  0b10001,
  0b10001,
  0b10001,
  0b01110
};
byte cer[8] = {
  0b11000,
  0b11000,
  0b01110,
  0b10001,
  0b10000,
  0b10000,
  0b10001,
  0b01110
};
unsigned long t_temp = 0;
unsigned long h_humi = 0;
unsigned long times = 0;
int t;
int h;
void setup() {

  pinMode(LEDgreen, OUTPUT);
  pinMode(LEDred, OUTPUT);
  digitalWrite(LEDgreen, LOW);
  digitalWrite(LEDred, LOW);
  Serial.begin(115200);
  Wire.begin();
  dht.begin();
  lcd.begin();
  lcd.setBacklight(HIGH);
  lcd.print("Starting...");
  lcd.createChar(0, temp);
  lcd.createChar(1, humudity);
  lcd.createChar(2, cer);
  delay(1000);
  lcd.clear();
}

void loop() {
  mainmenu();
  listenKeyboard();
}


void listenKeyboard()
{

  char keyPressed = myKeypad.getKey();
  if (keyPressed == NO_KEY) {
    return;
  }
  else if (keyPressed != NO_KEY) {
    switch (keyPressed) {

      case RESTORE_KEY:
        if (eEPROMValue == EEPROM.read(eEPROMaddr1) || eEPROMValue == EEPROM.read(eEPROMaddr)) {
          readEEPROMAndDisplay();
          break;
        }
        else {
          readEEPROMAndDisplay2();
          break;
        }
      case CLEAR_KEY:
        lcd.clear();
        lcd.home();
        lcd.setCursor(0, 8);
        inputString = "";
        break;
      case SWITCH_EEPROM_KEY:
        switchtemperature();

        break;
      case SWITCH_EEPROM_KEY1:
        switchhumidity();

        break;
      case LCD_DISPLAY_KEY:
        showdisplay();
        break;
      case SAVE_KEY:
        if (eEPROMValue == EEPROM.read(eEPROMaddr1) || eEPROMValue == EEPROM.read(eEPROMaddr)) {
          savetemperature();
          //       readEEPROMAndDisplay();

          break;
        }
        else {
          savehumidity();
          //        readEEPROMAndDisplay2();

          break;
        }
      default:

        inputString.concat(keyPressed);
        lcd.print(keyPressed);
        break;

    }
  }
}
void switchtemperature() {    //================ฟั่งชั่นสลับหน้าไปการตั้งค่าอุณหภูมิ
  use_external_eeprom = !use_external_eeprom;
  lcd.clear();
  lcd.home();
  lcd.print("Switched to");
  lcd.setCursor(0, 1);
  if (use_external_eeprom) {
    lcd.print("temp min");
  }
  else  {
    lcd.print("temp max");
  }
  delay(1000);
  lcd.clear();
  lcd.home();
  readEEPROMAndDisplay();
}
void switchhumidity() {  //================ฟั่งชั่นสลับหน้าไปการตั้งค่าความชื้น
  himadity = !himadity;
  lcd.clear();
  lcd.home();
  lcd.print("Switched to");
  lcd.setCursor(0, 1);

  if (himadity) {
    lcd.print("humidity max");
  }
  else   {
    lcd.print("humidity min");
  }
  delay(1000);
  lcd.clear();
  lcd.home();
  readEEPROMAndDisplay2();
}

void readEEPROMAndDisplay() //================ฟั่งชั่นอ่านค่าความอุณภูมิใน EEPROM
{

  String msg = "";
  if (!use_external_eeprom)
  {
    eEPROMValue = EEPROM.read(eEPROMaddr1);
    msg = "temp max";
  }
  else
  {
    eEPROMValue = EEPROM.read(eEPROMaddr);
    msg = "temp min";
  }
  if (eEPROMValue >= 0) {
    inputString = (String)eEPROMValue;
    lcd.clear();
    lcd.home();
    lcd.print(msg);
    lcd.setCursor(0, 1);
    lcd.print("Value: ");
    lcd.print(inputString);
    delay(1000);
    lcd.clear();
    lcd.home();
    lcd.setCursor(2, 1);
    lcd.print(inputString);
  }
}
void readEEPROMAndDisplay2() //================ฟั่งชั่นอ่านค่าความชื้นใน EEPROM
{
  String msg = "";
  if (!himadity) {
    eEPROMValue = EEPROM.read(eEPROMaddr2);
    msg = "humi min";
  }
  else {
    eEPROMValue = EEPROM.read(eEPROMaddr3);
    msg = "humi max";
  }
  if (eEPROMValue >= 0) {
    inputString = (String)eEPROMValue;
    lcd.clear();
    lcd.home();
    lcd.print(msg);
    lcd.setCursor(0, 1);
    lcd.print("Value: ");
    lcd.print(inputString);
    delay(1000);
    lcd.clear();
    lcd.home();
    lcd.setCursor(10, 1);
    lcd.print(inputString);
  }
}
void savetemperature() { //================ฟั่งชั่นเก็บค่าความอุณหภูมิไว้ใน EEPROM
  if (inputString.toInt() > 255)
  {
    lcd.clear();
    lcd.home();
    lcd.print("Value is too large!");
    delay(1000);
    return;
  }
  if (inputString.toInt() >= 0 && inputString.toInt() <= 255)
  {
    String msg = "";
    eEPROMValue = inputString.toInt();
    if (!use_external_eeprom)
    {
      EEPROM.write(eEPROMaddr1,   eEPROMValue);
      msg = "temp max";
    }
    else
    {
      EEPROM.write(eEPROMaddr, eEPROMValue);
      msg = "temp min";
    }
    lcd.clear();
    lcd.home();
    lcd.print("Saved value to");
    lcd.setCursor(0, 1);
    lcd.print(msg);
    delay(1000);
    lcd.clear();
    lcd.home();
    delay(1000);
  }

}
void savehumidity() { //================ฟั่งชั่นเก็บค่าความชื้นไว้ใน EEPROM
  if (inputString.toInt() > 255)
  {
    lcd.clear();
    lcd.home();
    lcd.print("Value is too large!");
    delay(1000);
    return;
  }
  if (inputString.toInt() >= 0 && inputString.toInt() <= 255) {
    String msg = "";
    eEPROMValue = inputString.toInt();
    if (!himadity)
    {
      EEPROM.write(eEPROMaddr2,   eEPROMValue);
      msg = "humi min";
    }
    else {
      EEPROM.write(eEPROMaddr3,   eEPROMValue);
      msg = "humi max";
    }
    lcd.clear();
    lcd.home();
    lcd.print("Saved value to");
    lcd.setCursor(0, 1);
    lcd.print(msg);
    delay(1000);
    lcd.clear();
    lcd.home();
    delay(1000);
  }
}

void showdisplay() { // แสดงค่าอุณหภูมิ
  lcd.clear();
  lcd.home();
  lcd.setCursor(0, 0);
  lcd.write((uint8_t)0);
  lcd.print("Max=");
  lcd.print(EEPROM.read(eEPROMaddr1));
  lcd.setCursor(9, 0);
  lcd.write((uint8_t)0);
  lcd.print("Min=");
  lcd.print(EEPROM.read(eEPROMaddr));
  lcd.setCursor(0, 1);
  lcd.write((uint8_t)1);
  lcd.print("Max=");
  lcd.print(EEPROM.read(eEPROMaddr3));
  lcd.setCursor(9, 1);
  lcd.write((uint8_t)1);
  lcd.print("Min=");
  lcd.print(EEPROM.read(eEPROMaddr2));
  delay(2000);
  lcd.clear();
  lcd.home();
}
void mainmenu() {   // ฟั่งชั่นรับค่าอุณหภูมิ
  if (millis() >= t_temp) {
    t = dht.readTemperature();
    t_temp = t;
    t_temp = millis() + 1000;
    lcd.setCursor (0, 0);
    lcd.write(( uint8_t)0);
    lcd.print(" ");
    lcd.print(t);
    lcd.print(" ");
    lcd.write((uint8_t)2);
    if (t >= (EEPROM.read(eEPROMaddr1))) {
      digitalWrite(LEDred, HIGH);
    }
    else {
      digitalWrite(LEDred, LOW);
    }
  }
  if (millis() >= h_humi) {
    h = dht.readHumidity();
    h_humi = t;
    h_humi = millis() + 1000;
    lcd.setCursor (8, 0);
    lcd.write(( uint8_t)1);
    lcd.print(" ");
    lcd.print(h);
    lcd.print(" %");
    Serial.print(h);
  }

}

JENG

char keyPressed = myKeypad.getKey();
  if (keyPressed == NO_KEY) {
    return;
  }

lcd.clear
lcd.print(keyPressed )
สามารถติดตาม electoday ได้ที่

Facebook
www.facebook.com/groups/coopmicro

Google+
https://plus.google.com/communities/103482067769375459277

☺☺☺ความรู้ และความฉลาด ไม่ใช่สิ่งเดียวกัน จะมีประโยชน์อะไร ถ้าฉลาดแต่อยู่ในกะลา☺☺☺