mình có đoạn code sau:
#include <SPI.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define Relay_2 3 // chan relay2 dieukhien bom
byte Relay_2Status = LOW; // trạng thái của nut an relay2
int button2 = A2; // chan dieu khien nut an bom
//khia bao cam bien hc05
const int trig = 12; // chan trig cau HY-SRF05
const int echo = 8; // chan echo cau HY-SRF05
LiquidCrystal_I2C lcd(0x27,20,4);
void setup()
{
Serial.begin(9600);// giao tiep Serial voi baudrate 9600
Wire.begin();
pinMode(Relay_2, OUTPUT); // relay2 bom chong can
pinMode(13, OUTPUT); // cai dat den 13 bat bom chong can
pinMode(button2, INPUT); // Button cau bom chong can
// khai bao chan hc_o5
pinMode (trig, OUTPUT); // chan trig de phat tin hieu
pinMode (echo,INPUT); // chan echo de nhan tin hieu
lcd.init(); //Khởi động màn hình. Bắt đầu cho phép Arduino sử dụng màn hình
lcd.backlight(); //Bật đèn nền
// hien thi so thoi gian khi < 10 thi hien so 0 dang truoc
}
// hien thi so thoi gian khi < 10 thi hien so 0 dang truoc
void printDigitsLCD(int digits){
if(digits < 10)
lcd.print('0');
lcd.print(digits);
}
void loop()
// cam bien hc 05 hienthi
{
unsigned long duration; // biến đo thời gian
int distance; // biến lưu khoảng cách
/* Phát xung từ chân trig */
digitalWrite(trig,0); // tắt chân trig
delayMicroseconds(2);
digitalWrite(trig,1); // phát xung từ chân trig
delayMicroseconds(10); // xung có độ dài 5 microSeconds
digitalWrite(trig,0); // tắt chân trig
/* Tính toán thời gian */
// Đo độ rộng xung HIGH ở chân echo.
duration = pulseIn(echo,HIGH);
// Tính khoảng cách đến vật.
distance = int(duration/2/29.412);
/* In kết quả ra Serial Monitor */
if (distance >99)
{
lcd.setCursor(1,2);
lcd.print("KhC ");
printDigitsLCD(distance);
lcd.setCursor(8,2);
lcd.print("cm");
}
else
{
lcd.setCursor(1,2);
lcd.print("KhC ");
printDigitsLCD(distance);
lcd.setCursor(7,2);
lcd.print(" cm");
}
//*********************
// tu dong bat tat bom cam bien siwu am hc-sr05
if (distance > 20)
{
digitalWrite (Relay_2, HIGH);
digitalWrite ( 13, HIGH);
lcd.setCursor(3,3);
lcd.print("ON ");
}
else if (distance <10)
{
digitalWrite (Relay_2, LOW);
digitalWrite ( 13, LOW);
lcd.setCursor(3,3);
lcd.print("OFF");
}
///*******************
// ham chay khi bat nut may bom hoi luu
int button2Status = digitalRead(button2); //Đọc trạng thái button hoi luu
if (digitalRead(button2) == LOW) // nếu nút được nhấn hoi luu
{
//Relay_2Status == HIGH
while (digitalRead(button2) == LOW);
//; // chờ nút nhấn buông
Relay_2Status = !Relay_2Status; // đảo trạng thái cau relay2 từ LOW -> HIGH
digitalWrite(Relay_2, Relay_2Status);
//Relay_2Status == LOW
// viet code doan nay ntn de hien ON OFF tren lcd
lcd.setCursor(3,3);
if (Relay_2Status)
lcd.print("ON ");
else
lcd.print("OFF");
}
}
//*****************************
Khi nhấn nút nó không đóng tắt đc, bạn nào biết khi nhấn nút chuyển trang thái, sẽ làm cho relay cài ddatwj trước cũng thay đổi không.
#include <SPI.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define Relay_2 3 // chan relay2 dieukhien bom
byte Relay_2Status = LOW; // trạng thái của nut an relay2
int button2 = A2; // chan dieu khien nut an bom
//khia bao cam bien hc05
const int trig = 12; // chan trig cau HY-SRF05
const int echo = 8; // chan echo cau HY-SRF05
LiquidCrystal_I2C lcd(0x27,20,4);
void setup()
{
Serial.begin(9600);// giao tiep Serial voi baudrate 9600
Wire.begin();
pinMode(Relay_2, OUTPUT); // relay2 bom chong can
pinMode(13, OUTPUT); // cai dat den 13 bat bom chong can
pinMode(button2, INPUT); // Button cau bom chong can
// khai bao chan hc_o5
pinMode (trig, OUTPUT); // chan trig de phat tin hieu
pinMode (echo,INPUT); // chan echo de nhan tin hieu
lcd.init(); //Khởi động màn hình. Bắt đầu cho phép Arduino sử dụng màn hình
lcd.backlight(); //Bật đèn nền
// hien thi so thoi gian khi < 10 thi hien so 0 dang truoc
}
// hien thi so thoi gian khi < 10 thi hien so 0 dang truoc
void printDigitsLCD(int digits){
if(digits < 10)
lcd.print('0');
lcd.print(digits);
}
void loop()
// cam bien hc 05 hienthi
{
unsigned long duration; // biến đo thời gian
int distance; // biến lưu khoảng cách
/* Phát xung từ chân trig */
digitalWrite(trig,0); // tắt chân trig
delayMicroseconds(2);
digitalWrite(trig,1); // phát xung từ chân trig
delayMicroseconds(10); // xung có độ dài 5 microSeconds
digitalWrite(trig,0); // tắt chân trig
/* Tính toán thời gian */
// Đo độ rộng xung HIGH ở chân echo.
duration = pulseIn(echo,HIGH);
// Tính khoảng cách đến vật.
distance = int(duration/2/29.412);
/* In kết quả ra Serial Monitor */
if (distance >99)
{
lcd.setCursor(1,2);
lcd.print("KhC ");
printDigitsLCD(distance);
lcd.setCursor(8,2);
lcd.print("cm");
}
else
{
lcd.setCursor(1,2);
lcd.print("KhC ");
printDigitsLCD(distance);
lcd.setCursor(7,2);
lcd.print(" cm");
}
//*********************
// tu dong bat tat bom cam bien siwu am hc-sr05
if (distance > 20)
{
digitalWrite (Relay_2, HIGH);
digitalWrite ( 13, HIGH);
lcd.setCursor(3,3);
lcd.print("ON ");
}
else if (distance <10)
{
digitalWrite (Relay_2, LOW);
digitalWrite ( 13, LOW);
lcd.setCursor(3,3);
lcd.print("OFF");
}
///*******************
// ham chay khi bat nut may bom hoi luu
int button2Status = digitalRead(button2); //Đọc trạng thái button hoi luu
if (digitalRead(button2) == LOW) // nếu nút được nhấn hoi luu
{
//Relay_2Status == HIGH
while (digitalRead(button2) == LOW);
//; // chờ nút nhấn buông
Relay_2Status = !Relay_2Status; // đảo trạng thái cau relay2 từ LOW -> HIGH
digitalWrite(Relay_2, Relay_2Status);
//Relay_2Status == LOW
// viet code doan nay ntn de hien ON OFF tren lcd
lcd.setCursor(3,3);
if (Relay_2Status)
lcd.print("ON ");
else
lcd.print("OFF");
}
}
//*****************************
Khi nhấn nút nó không đóng tắt đc, bạn nào biết khi nhấn nút chuyển trang thái, sẽ làm cho relay cài ddatwj trước cũng thay đổi không.