Digital I/O
Digital I/O trong Arduino
Digital I/O (Input/Output) là một trong những tính năng cơ bản của Arduino, giúp điều khiển và đọc tín hiệu số từ các chân (pins) trên board. Dưới đây là mô tả, giải thích và ví dụ chi tiết cho từng hàm.
1. digitalRead()
Mô tả:
- Hàm dùng để đọc giá trị logic (HIGH hoặc LOW) từ một chân digital đã được thiết lập làm đầu vào (INPUT).
Cú pháp:
int digitalRead(uint8_t pin);
Giải thích:
- Trả về
HIGH
nếu chân có điện áp 5V (hoặc 3.3V trên một số board). - Trả về
LOW
nếu chân được nối xuống GND hoặc không có tín hiệu.
Ví dụ: Đọc tín hiệu từ một nút nhấn
const int buttonPin = 2; // Chân kết nối nút nhấn
const int ledPin = 13; // Chân LED tích hợp
void setup() {
pinMode(buttonPin, INPUT); // Thiết lập buttonPin làm INPUT
pinMode(ledPin, OUTPUT); // Thiết lập ledPin làm OUTPUT
}
void loop() {
int buttonState = digitalRead(buttonPin); // Đọc trạng thái nút nhấn
if (buttonState == HIGH) { // Nếu nút được nhấn
digitalWrite(ledPin, HIGH); // Bật LED
} else {
digitalWrite(ledPin, LOW); // Tắt LED
}
}
2. digitalWrite()
Mô tả:
- Hàm dùng để ghi giá trị logic (HIGH hoặc LOW) lên một chân digital đã được thiết lập làm đầu ra (OUTPUT).
Cú pháp:
void digitalWrite(uint8_t pin, uint8_t value);
Giải thích:
HIGH
: Cấp điện áp 5V (hoặc 3.3V) cho chân.LOW
: Đưa chân xuống mức điện áp 0V.
Ví dụ: Nhấp nháy LED
const int ledPin = 13; // Chân LED tích hợp
void setup() {
pinMode(ledPin, OUTPUT); // Thiết lập ledPin làm OUTPUT
}
void loop() {
digitalWrite(ledPin, HIGH); // Bật LED
delay(1000); // Chờ 1 giây
digitalWrite(ledPin, LOW); // Tắt LED
delay(1000); // Chờ 1 giây
}
3. pinMode()
Mô tả:
- Hàm dùng để cấu hình chức năng của một chân digital (INPUT, OUTPUT, hoặc INPUT_PULLUP).
Cú pháp:
void pinMode(uint8_t pin, uint8_t mode);
Giải thích:
INPUT
: Thiết lập chân làm đầu vào.OUTPUT
: Thiết lập chân làm đầu ra.INPUT_PULLUP
: Thiết lập chân làm đầu vào với điện trở pull-up nội bộ.
Ví dụ: Sử dụng điện trở pull-up nội bộ
const int buttonPin = 2; // Chân kết nối nút nhấn
const int ledPin = 13; // Chân LED tích hợp
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // Sử dụng pull-up nội bộ
pinMode(ledPin, OUTPUT); // Thiết lập ledPin làm OUTPUT
}
void loop() {
int buttonState = digitalRead(buttonPin); // Đọc trạng thái nút nhấn
if (buttonState == LOW) { // Nút nhấn được kích hoạt (GND)
digitalWrite(ledPin, HIGH); // Bật LED
} else {
digitalWrite(ledPin, LOW); // Tắt LED
}
}
Tóm tắt bảng
Hàm | Mô tả | Ứng dụng | Ví dụ |
---|---|---|---|
digitalRead() |
Đọc trạng thái HIGH hoặc LOW từ một chân digital. | Đọc tín hiệu từ nút nhấn, cảm biến, v.v. | digitalRead(buttonPin) |
digitalWrite() |
Ghi tín hiệu HIGH hoặc LOW lên một chân digital. | Điều khiển LED, relay, mô-đun điện tử khác. | digitalWrite(ledPin, HIGH) |
pinMode() |
Thiết lập chức năng cho một chân digital: INPUT, OUTPUT, hoặc INPUT_PULLUP. | Cấu hình chân cho các thiết bị hoặc tín hiệu. | pinMode(buttonPin, INPUT_PULLUP) |
Lưu ý:
INPUT_PULLUP
rất hữu ích khi không muốn sử dụng điện trở ngoài cho nút nhấn.- Khi thiết lập một chân làm OUTPUT, đảm bảo không đấu nối trực tiếp với các thiết bị nhạy cảm mà không có mạch bảo vệ.