คือเวลากด keypad อยากให้หน้าจอมัน clear screen แล้วแสดงเฉพาะ ตัวเลขที่เรากดรับค่าเข้าไปอะครับ
ตอนนี้มันเป็นดังในคลิปวีดีโอ
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
Code
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
#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);
}
}
ช่วยดู Code Keypad arduino ให้หน่อยครับ
ตอนนี้มันเป็นดังในคลิปวีดีโอ [Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
Code [Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้