Project 3 : Led sáng dần từ led 1 đến led 10 và ngược lại.
1. Sơ đồ mạch.
- Code chương trình.
byte ledPin[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
int direction = 1;
int currentLED = 0;
void setup()
{
for (int x=0; x<10; x++)
{
pinMode(ledPin[x], OUTPUT);
}
}
void loop() {
for (int x=0; x<10; x++)
{
digitalWrite(ledPin[x], LOW);
}
digitalWrite(ledPin[currentLED], HIGH);
currentLED += direction;
if (currentLED == 9)
{
direction = -1;
}
if (currentLED == 0)
{
direction = 1;
}
delay(500);
}
- Giải thích chương trình.
Trong Project này chúng ta sử dụng 10 chân digital để điều khiển 10 led, để cho
chương trình ngắn gọn thì ở đây tôi sử dụng mảng 1 chiều gồm 10 phần tử trong đó chứa
10 vị trí chân led mà ta sử dụng trong project
byte ledPin[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
Tiếp tục khai báo 2 biến integer là :
int direction = 1;
int currentLED = 0;
Trong hàm setup() tôi sử dụng một vòng lặp để định nghĩa mode cho các chân led.
Tôi nghĩ là không khó để hiểu được các câu lệnh này.
Tiếp theo là hàm loop(), đầu tiên tôi tắt tất cả các led bằng các câu lệnh:
for (int x=0; x<10; x++)
{
digitalWrite(ledPin[x], LOW);
}
Sau đó cho sáng led đầu tiên bằng câu lệnh :
digitalWrite(ledPin[currentLED], HIGH);
Vì ta đã khai báo currentLED = 0 nên mãng sẽ truy xuất phần tử đầu tiên trong
mãng có giá trị là 4 vì thế led ở vị trí chân digital số 4 sẽ sáng.
currentLED += direction;
Tăng currentLED lên 1 đơn vị ( direction =1 ). Vòng lặp tiếp theo sẽ là led ở chân
digital 5 sáng và cứ như thế cho đến led ở chân số 13 sáng, thì lúc này currentLED == 9,
câu lệnh “ if (currentLED == 9) {direction = -1;}” sẽ thực hiện và led sẽ sáng ngược lại
từ led 10 xuống led thứ 1.
Hai câu lệnh :
if (currentLED == 9)
{
direction = -1;
}
if (currentLED == 0)
{
direction = 1;
}
dùng để quy định chiều sáng của led là tăng dần hay giảm dần. Nếu là Led thứ 10 sang thì
tiếp theo sẽ giảm xuống led thứ 9 và ngược lại nếu led thứ 0 sang thì chu kỳ tiếp theo led
1 sẽ sáng.
EmoticonEmoticon