/**
Trường Công nghệ Thông tin và Truyền thông, Đại học Bách Khoa Hà Nội
Website: https://soict.hust.edu.vn
Học phần: Hệ nhúng
Mô tả bài thực hành: Đèn led sáng dần từ từ, tối dần từ từ.
Các công cụ cần thiết:
- ESP32
- Bo mạch cắm breadboard
- 2 nút bấm
Sử dụng
- Bấm nút xanh và theo dõi đoạn text gửi về trên editor mô phỏng
Serial ở góc dưới phải
- Gõ số 0, 1 vào editor Serial và quan sát đèn led bật/tắt
**/
#define MY_BUTTON 25 // Vị trí chân GPIO của ESP32 được nối với nút bấm
#define MY_LED 5 // Vị trí chân GPIO của ESP32 được nối với đèn LED
//-------------------------------------------------------------------
// Khởi tạo
//-------------------------------------------------------------------
void setup() {
// Chế độ hoạt động của chân Pin nối với Led: Output
pinMode(MY_LED, OUTPUT);
// Chế độ hoạt động của chân Pin nối với nút bấm: Input với điện trở kêo lên có sẵn trong MCU
// Khi nhả: mạch điện ở phía nút bấm hở, nhưng điện trở kéo lên bên trong sẽ bảo đám mạch điện vẫn kín, và kéo về logic 1
// Khi bấm: mạch điện ở phía nút bấm thông, tạo điện áp 0V tương ứng với logic 0
pinMode(MY_BUTTON, INPUT_PULLUP);
/// Thiết lập giao tiếp Serial ở phía ESP32
// - Tốc độ liên lạc 115200 bit per second
Serial.begin(115200);
// Gửi thông điệp chào hỏi về máy tính
Serial.println("ESP32 chào bác máy tính");
}
/// Trạng thái nút bấm
bool btn;
/// Biến chứa lệnh mà máy tính gửi về
int cmd;
//-------------------------------------------------------------------
// Thân vòng lặp vĩnh viễn
//-------------------------------------------------------------------
void loop() {
//---------- Xử lý với nút bấm ~ Gửi -----------------------------
/// Đọc trạng thái nút bấm
btn = digitalRead(MY_BUTTON);
/// Nếu nút được bấm thì báo cho máy tính biết
if (btn == 0 ) {
Serial.print("Nút đang bấm..");
}
//---------- Xử lý với led ~ Nhận -----------------------------
/// Nếu phát hiện có dữ liệu từ máy tính gửi về...
if (Serial.available() > 0) {
/// ... thì đọc kí tự đó...
cmd = Serial.read();
/// ... và tắt/bật led tương ứng
if (cmd == '1') {
digitalWrite(MY_LED, HIGH);
} else if (cmd == '0') {
digitalWrite(MY_LED, LOW);
};
}
}