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);