Advanced I/O
Advanced I/O trong Arduino
Các hàm Advanced I/O cung cấp khả năng điều khiển các tín hiệu I/O đặc biệt, chẳng hạn như tạo âm thanh, đo xung, hoặc giao tiếp nối tiếp cơ bản bằng các chân digital.
1. noTone()
Mô tả:
Dừng việc tạo tín hiệu âm thanh (tone) trên một chân đã được sử dụng bởi tone()
.
Cú pháp:
noTone(pin);
Tham số:
pin
: Chân digital nơi âm thanh đang được phát.
Ví dụ:
void setup() {
tone(8, 1000); // Tạo âm tần số 1000 Hz trên chân 8
delay(2000); // Phát âm trong 2 giây
noTone(8); // Dừng phát âm
}
void loop() {
}
2. pulseIn()
Mô tả:
Đo thời gian của một xung HIGH hoặc LOW trên một chân.
Cú pháp:
unsigned long duration = pulseIn(pin, value, timeout);
Tham số:
pin
: Chân digital cần đo xung.value
: Mức tín hiệu cần đo (HIGH hoặc LOW).timeout
(tùy chọn): Thời gian tối đa chờ tín hiệu, tính bằng micro giây.
Trả về:
Thời gian của xung (micro giây) hoặc 0 nếu vượt quá timeout
.
Ví dụ:
void setup() {
Serial.begin(9600);
pinMode(7, INPUT);
}
void loop() {
unsigned long duration = pulseIn(7, HIGH);
Serial.print("Pulse duration: ");
Serial.print(duration);
Serial.println(" microseconds");
}
3. pulseInLong()
Mô tả:
Tương tự pulseIn()
, nhưng có độ chính xác cao hơn để đo xung dài.
Cú pháp:
unsigned long duration = pulseInLong(pin, value, timeout);
Tham số:
Giống pulseIn()
.
Ví dụ:
void setup() {
Serial.begin(9600);
pinMode(7, INPUT);
}
void loop() {
unsigned long duration = pulseInLong(7, HIGH);
Serial.print("Long pulse duration: ");
Serial.print(duration);
Serial.println(" microseconds");
}
4. shiftIn()
Mô tả:
Đọc dữ liệu nối tiếp (serial data) từ một chân digital, một bit mỗi lần.
Cú pháp:
byte data = shiftIn(dataPin, clockPin, bitOrder);
Tham số:
dataPin
: Chân nhận dữ liệu nối tiếp.clockPin
: Chân tạo xung clock.bitOrder
: Thứ tự bit (LSBFIRST hoặc MSBFIRST).
Ví dụ:
void setup() {
pinMode(2, INPUT);
pinMode(3, OUTPUT);
Serial.begin(9600);
}
void loop() {
byte data = shiftIn(2, 3, LSBFIRST);
Serial.println(data);
}
5. shiftOut()
Mô tả:
Gửi dữ liệu nối tiếp (serial data) tới một chân digital, một bit mỗi lần.
Cú pháp:
shiftOut(dataPin, clockPin, bitOrder, value);
Tham số:
dataPin
: Chân gửi dữ liệu nối tiếp.clockPin
: Chân tạo xung clock.bitOrder
: Thứ tự bit (LSBFIRST hoặc MSBFIRST).value
: Giá trị byte cần gửi.
Ví dụ:
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
}
void loop() {
shiftOut(2, 3, MSBFIRST, 0b10101010); // Gửi dữ liệu
delay(1000);
}
6. tone()
Mô tả:
Phát tín hiệu âm thanh (tone) với tần số và thời gian cụ thể.
Cú pháp:
tone(pin, frequency, duration);
Tham số:
pin
: Chân phát tín hiệu âm thanh.frequency
: Tần số của âm thanh (Hz).duration
(tùy chọn): Thời gian phát âm (millisecond).
Ví dụ:
void setup() {
tone(8, 500); // Phát âm tần số 500 Hz trên chân 8
delay(2000); // Dừng sau 2 giây
noTone(8); // Dừng tone
}
void loop() {
}
Tóm tắt bảng
Hàm | Mô tả | Cú pháp |
---|---|---|
noTone() |
Dừng phát tín hiệu âm thanh trên một chân. | noTone(pin); |
pulseIn() |
Đo thời gian của xung HIGH hoặc LOW. | pulseIn(pin, value, timeout); |
pulseInLong() |
Đo thời gian xung dài với độ chính xác cao. | pulseInLong(pin, value, timeout); |
shiftIn() |
Đọc dữ liệu nối tiếp từ chân digital (1 bit/lần). | shiftIn(dataPin, clockPin, bitOrder); |
shiftOut() |
Gửi dữ liệu nối tiếp tới chân digital (1 bit/lần). | shiftOut(dataPin, clockPin, bitOrder, val); |
tone() |
Phát tín hiệu âm thanh với tần số và thời gian cụ thể. | tone(pin, frequency, duration); |