Để trả lời các câu hỏi cụ thể của Tyilo:
analogRead(5)
và digitalRead(5)
sẽ đọc từ hai nơi khác nhau. Các cựu sẽ đọc từ kênh analog 5
hay A5
và sau này sẽ đọc từ pin 5 mà xảy ra được một pin kỹ thuật số. Vì vậy, có, nếu bạn muốn đọc một pin tương tự với digitalRead
bạn nên sử dụng A5
.
Tại sao?
analogRead
yêu cầu số kênh trong nội bộ nhưng nó cũng cho phép bạn cung cấp cho nó số pin. Nếu bạn cung cấp cho nó một số pin, nó sẽ chuyển đổi nó thành số kênh tương ứng. Theo như tôi có thể nói analogRead
là chức năng duy nhất sử dụng số kênh bên trong, là chức năng duy nhất cho phép số kênh và là chức năng duy nhất có chuyển đổi pin-to-kênh không có giấy tờ này. Để hiểu điều này, hãy bắt đầu với một số ví dụ.
Nếu bạn muốn sử dụng analogRead
trên chân analog đầu tiên, A0
bạn có thể analogRead(0)
sử dụng số kênh hoặc analogRead(A0)
sử dụng số pin. Nếu bạn sử dụng biến thể số pin, analogRead
sẽ chuyển đổi số pin thành số A0
kênh thích hợp 0
.
Nếu bạn muốn sử dụng digitalWrite
trên pin analog đầu tiên, A0
bạn chỉ có thể làm digitalWrite(A0, x)
. digitalWrite
không sử dụng các kênh tương tự trong nội bộ và không cho phép bạn chuyển số kênh đó. Vâng, nó sẽ cho phép bạn nhưng bạn sẽ chọn sai mã pin. Điều tương tự áp dụng cho digitalRead
và thậm chí analogWrite
.
Điều gì về các chuyển đổi pin-to-channel được thực hiện bởi analogRead
? Nguồn cho chức năng đó có thể được tìm thấy trong hardware/arduino/avr/cores/arduino/wiring_analog.c
Bạn sẽ thấy rằng nó thực hiện một số phép trừ đơn giản dựa trên loại bảng. Các A0
/ A1
/ A2
/ etc. hằng số đại diện cho số pin của các kênh tương tự và có thể được sử dụng ở mọi nơi bạn cần để tham khảo các đầu vào tương tự. Vì lý do đó, chúng là lựa chọn tốt nhất để sử dụng trong mã Arduino của bạn bởi vì rất rõ ràng rằng bạn đang sử dụng cùng một cổng vật lý ngay cả khi bạn đang sử dụng các chức năng khác nhau. Các định nghĩa của các hằng số phụ thuộc vào bảng của bạn.
Ví dụ: đây là mã định nghĩa pin tương tự cho Arduino Uno trong hardware/arduino/avr/variants/standard/pins_arduino.h
static const uint8_t A0 = 14;
static const uint8_t A1 = 15;
static const uint8_t A2 = 16;
static const uint8_t A3 = 17;
static const uint8_t A4 = 18;
static const uint8_t A5 = 19;
static const uint8_t A6 = 20;
static const uint8_t A7 = 21;
Đối với comparaison ở đây là mã định nghĩa pin tương tự cho Arduino Mega:
static const uint8_t A0 = 54;
static const uint8_t A1 = 55;
static const uint8_t A2 = 56;
[...]
static const uint8_t A13 = 67;
static const uint8_t A14 = 68;
static const uint8_t A15 = 69;
Thảo luận thêm về các chân tương tự: Tôi có thể sử dụng các chân tương tự trên Arduino cho dự án của mình dưới dạng kỹ thuật số không?