You are on page 1of 6

Bài 2: Lập trình điều khiển Led đơn

Mục tiêu:
- Sinh viên đọc được các dạng ngõ vào digital: nút nhấn, cảm biến
on/off, …
- Xuất giá trị on/off ở ngõ ra , để điều khiển on/off các thiết bị theo
yêu cầu.

Yêu cầu 1.1:


Viết chương trình điều khiển kiểu chạy led bằng 1 nút nhấn MODE như sau:
Khi nhấn nút MODE lần 1 thì led chạy kiểu 1, khi nhấn lần 2 thì Led chạy kiểu 2, khi nhấn
lần 3 thì Led chạy kiểu 3, khi nhấn lần 4 thì led chạy kiểu 4, Nếu tiếp tục nhấn thì led quay
về kiểu 1 và quy trình lập lại như trên, kiểu
chạy led như sau:
Kiểu 1: Led sáng đuổi từ trái sang phải , sau đó chạy từ phải sang trái .
Kiểu 2: Led sáng dần từ trái sang phải , sau đó chạy từ phải sang trái..
Kiểu 3: Led sáng dồn từ trái sang phải , sau đó chạy từ phải sang trái.
Kiểu 4: Led sáng đuổi từ 2 đầu ngoài vào trong, sau đó chạy từ trong giữa ra 2 đầu.
Nội dung triển khai:
Câu 1 (10đ): Lập bảng thống kê Input/Output, địa chỉ sử dụng cho từng ngõ vào ra
Bảng thống kê địa chỉ ngõ vào (Input)

STT Tên Input Địa chỉ / Pin Mô tả chức năng


1 Nút nhấn mode Pin 14 Nút khởi động, thiết kế tích cực mức 0
2

Bảng thống kê địa chỉ ngõ ra (Output)


STT Tên output Địa chỉ / Pin Mô tả chức năng
1 Led1 Pin 13 Trạng thái sáng/ tắt ở ngỏ ra led1
2 Led2 Pin 12 Trạng thái sáng/ tắt ở ngỏ ra led2
3 Led3 Pin 11 Trạng thái sáng/ tắt ở ngỏ ra led3
4 Led4 Pin 10 Trạng thái sáng/ tắt ở ngỏ ra led4
5 Led5 Pin 9 Trạng thái sáng/ tắt ở ngỏ ra led5
6 Led6 Pin 8 Trạng thái sáng/ tắt ở ngỏ ra led6
7 Led7 Pin 7 Trạng thái sáng/ tắt ở ngỏ ra led7
8 Led8 Pin 6 Trạng thái sáng/ tắt ở ngỏ ra led8
1
Câu 2 (10đ): Vẽ sơ đồ khối của hệ điều khiển này, giải thích hoạt động của các khối

Hình 1: Sơ đồ khối của hệ điều khiển 8 con Led.


Nguyên lý hoạt động:
- Nguồn sẽ được cung cấp để hệ điều khiển có thể chạy.
- Ta có ngỏ vào là nút nhấn sẽ truyền tín hiệu về mạch Arduino mega 2560. Sau khi xử lý,
mạch sẽ xuất ra tín hiệu ở ngỏ ra để điều khiển hoạt động của 8 con Led.
Câu 3: (10đ): Vẽ sơ đồ kết nối (mạch nguyên lý) của hệ thống.

2
Hình 2: Sơ đồ kết nối của hệ thống.
Câu 4 (20đ): Trình bày sơ đồ giải thuật xử lý của đề bài

Hình 3: Sơ đồ giải thuật.


Câu 5 (50đ): Viết code chương trình xử lý (30đ) và trả lời câu hỏi(20đ) (copy code vào đây
và gởi file qua drive)

const int ledPin[] = {13, 12, 11, 10, 9, 8, 7, 6}; // Mảng chứa các chân LED
const int numLEDs = sizeof(ledPin) / sizeof(ledPin[0]); // Số lượng LED

int mode = 1; // Biến lưu trữ chế độ hiện tại

3
bool buttonState = false; // Trạng thái nút nhấn trước đó
bool buttonPressed = false; // Biến đánh dấu nút đã được nhấn

void setup() {
pinMode(buttonPin, INPUT_PULLUP); // Thiết lập chân nút nhấn là INPUT_PULLUP
for (int i = 0; i < numLEDs; i++) {
pinMode(ledPin[i], OUTPUT); // Thiết lập chân LED là OUTPUT
}
}

void loop() {
// Đọc trạng thái của nút nhấn
bool currentState = digitalRead(buttonPin);

// Kiểm tra nếu nút nhấn đã được nhấn và thả


if (currentState == LOW && buttonState == HIGH) {
buttonPressed = true;
} else {
buttonPressed = false;
}

// Lưu trạng thái nút nhấn hiện tại để sử dụng trong lần lặp tiếp theo
buttonState = currentState;

// Nếu nút đã được nhấn, thay đổi chế độ


if (buttonPressed) {
mode++; // Tăng chế độ lên 1
if (mode > 4) mode = 1; // Quay lại chế độ 1 nếu vượt quá chế độ 4
}

// Thực hiện chế độ tương ứng


switch (mode
) {
case 1:
runMode1();
break;
case 2:
runMode2();
break;
case 3:
runMode3();
break;
case 4:
runMode4();
break;
}
}
4
// Hàm chạy chế độ 1
void runMode1() {
// Led sáng đuổi từ trái sang phải, sau đó chạy từ phải sang trái
for (int i = 0; i < numLEDs; i++) {
digitalWrite(ledPin[i], HIGH);
delay(10);
digitalWrite(ledPin[i], LOW);
}
for (int i = numLEDs - 1; i >= 0; i--) {
digitalWrite(ledPin[i], HIGH);
delay(10);
digitalWrite(ledPin[i], LOW);
}
}

// Hàm chạy chế độ 2


void runMode2() {
// Led sáng dần từ trái sang phải, sau đó chạy từ phải sang trái
for (int i = 0; i < numLEDs; i++) {
analogWrite(ledPin[i], 255 * i / (numLEDs - 1));
delay(10);
}
for (int i = numLEDs - 1; i >= 0; i--) {
analogWrite(ledPin[i], 255 * i / (numLEDs - 1));
delay(10);
}
}

// Hàm chạy chế độ 3


void runMode3() {
// Led sáng dồn từ trái sang phải, sau đó chạy từ phải sang trái
for (int i = 0; i < numLEDs; i++) {
digitalWrite(ledPin[i], HIGH);
delay(10);
}
for (int i = numLEDs - 1; i >= 0; i--) {
digitalWrite(ledPin[i], LOW);
delay(10);
}
}

// Hàm chạy chế độ 4


void runMode4() {
// Led sáng đuổi từ 2 đầu ngoài vào trong, sau đó chạy từ trong giữa ra 2 đầu
int start = 0;
int end = numLEDs - 1;
5
while (start < end) {
digitalWrite(ledPin[start], HIGH);
digitalWrite(ledPin[end], HIGH);
delay(10);
digitalWrite(ledPin[start], LOW);
digitalWrite(ledPin[end], LOW);
start++;
end--;
}
int middle = numLEDs / 2;
for (int i = 0; i <= middle; i++) {
digitalWrite(ledPin[middle - i], HIGH);
digitalWrite(ledPin[middle + i], HIGH);
delay(10);
digitalWrite(ledPin[middle - i], LOW);
digitalWrite(ledPin[middle + i], LOW);
}
}

You might also like