Professional Documents
Culture Documents
Bài 4 PP
Bài 4 PP
Tạ
Tuấ Tú
n
Ngu
y ễn n
A nh Tuấ
P hạ n
mT ề
han Tuy
h
1
Tìm hiểu chế độ ngắt ngoài
▰ Tuần tự: Một trương trình C,Cpp sẽ được xử lý tuần tự theo
chiều từ trên xuống dưới và sẽ bị ảnh hưởng bởi các câu lệnh
rẽ nhánh và loop
▰ Ngắt: Chương trình sẽ bị thoát ra khỏi quá trình tuần tự, xử
lý xong các lệnh trong ngắt, sau đó mới quay lại xử lý tiếp.
▰ Ngắt là một công việc được ưu tiên làm trước, khi xử lý
xong mới được làm các việc khác. Các sự kiện ngắt có thể đến
từ nhiều nguồn khác nhau như: ADC, IO, UART. TIMER…
2
Lựa chọn thiết bị
LCD
RES
ESP32
LED
Mạch mô phỏng
4
Lưu đồ thuật toán
5
Chương trình
#include <Wire.h> lcd.clear();
#include <LiquidCrystal_I2C.h> lcd.setCursor(0, 0);
if (motion == HIGH) { lcd.print("Khong co chuyen dong");
#define PIR_PIN 2 / if (!motionDetected) {
#define LED_PIN 13 motionDetected = true; Serial.println("Khong co chuyen dong");
motionStartTime = millis();
LiquidCrystal_I2C lcd(0x27, 16, 2); // Tắt đèn
lcd.clear(); digitalWrite(LED_PIN, LOW);
bool motionDetected = false; lcd.setCursor(0, 0); }
unsigned long motionStartTime; lcd.print("Da phat hien"); }
const unsigned long motionDuration = 5000;
Serial.println("Da phat hien chuyen dong"); if (motionDetected && millis() -
void setup() { motionStartTime < motionDuration) {
pinMode(PIR_PIN, INPUT); // Bật đèn int brightness = map(millis() - motionStartTime,
pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, HIGH); 0, motionDuration, 0, 255);
lcd.backlight(); } analogWrite(LED_PIN, brightness);
Serial.begin(9600); } else { } else {
} if (motionDetected) { analogWrite(LED_PIN, 0);
motionDetected = false; }
void loop() {
int motion = digitalRead(PIR_PIN); delay(1000);
}
Kinh nghiệm sau bài thực hành.