Tôi đang đọc về I2C. Trên trang web này:
http://playground.arduino.cc/Main/WireL LibraryDetailedReference # endTransmission
Nó nói rằng endTransmission()
có thể trả về một trong các mã trạng thái sau:
- 0: Gửi thành công.
- 1: Gửi bộ đệm quá lớn cho bộ đệm twi. Điều này không nên xảy ra, vì độ dài bộ đệm TWI được đặt trong twi.h tương đương với độ dài bộ đệm gửi được đặt trong Wire.h.
- 2: Địa chỉ đã được gửi và nhận được NACK. Đây là một vấn đề và chủ nên gửi một điều kiện STOP.
- 3: Dữ liệu đã được gửi và nhận được NACK. Điều này có nghĩa là nô lệ không còn gì để gửi. Bậc thầy có thể gửi một điều kiện DỪNG hoặc BẮT ĐẦU lặp lại. 4: Một lỗi twi khác đã xảy ra (ví dụ: chủ bị mất trọng tài xe buýt).
Nếu tôi không gắn gì với Arduino của tôi (hoặc với điện trở kéo lên cả SDA / SCL), tôi luôn nhận được trạng thái 2. Nhưng làm thế nào có thể nhận được NACK (hoặc bất cứ thứ gì) khi không có gì để giao tiếp? Nó có nghĩa gì khác không?
Đây là mã ví dụ của tôi
#include "Wire.h"
void setup() {
Serial.begin(9600);
Wire.begin();
}
void loop() {
Wire.beginTransmission(42);
Wire.write(0);
byte status = Wire.endTransmission();
Serial.println(status); // always prints 2
}