Щоб відповісти на конкретні запитання Тіло:
analogRead(5)
і digitalRead(5)
буде читати з двох різних місць. Колишній буде зчитувати з аналогового каналу 5
або A5
і останній буде читати з пальця 5 , який відбувається , щоб бути цифровий контактний. Так що так, якщо ви хочете прочитати аналоговий штифт, digitalRead
вам слід скористатися A5
.
Чому?
analogRead
потрібен номер каналу внутрішньо, але це дозволить вам надати і номер PIN-коду. Якщо ви дасте йому PIN-код, він перетворить його на відповідний номер каналу. Наскільки я можу сказати, analogRead
це єдина функція, яка використовує номер каналу внутрішньо, єдина, яка дозволяє номер каналу, і є єдиною функцією з цим незадокументованим перетворенням між каналами. Щоб зрозуміти це, почнемо з кількох прикладів.
Якщо ви хочете використовувати analogRead
на першому аналоговому штифті, A0
ви можете зробити analogRead(0)
номер каналу або analogRead(A0)
номер контакту. Якби ви використовували варіант номера PIN-коду, analogRead
він перетворив би номер PIN-коду A0
у його власний номер каналу 0
.
Якщо ви хочете використовувати digitalWrite
на першому аналоговому штифті, A0
ви можете лише зробити digitalWrite(A0, x)
. digitalWrite
не використовує аналогові канали внутрішньо і не дозволяє вам передавати йому номер каналу. Ну, це дозволить , але ви виберете неправильний штифт. Це ж стосується digitalRead
і рівних analogWrite
.
Що з конверсіями між каналами analogRead
? Джерело цієї функції можна знайти в розділі " hardware/arduino/avr/cores/arduino/wiring_analog.c
Ви побачите, що воно робить просте віднімання на основі типу плати. A0
/ A1
/ A2
/ І т.д .. константи представляють число контактів аналогових каналів і їх можна використовувати всюди, де потрібно звернутися до аналогових входів. З цієї причини вони є найкращим варіантом використання у вашому коді Arduino, оскільки це дуже очевидно, що ви використовуєте один і той же фізичний порт, навіть якщо ви використовуєте різні функції. Визначення цих констант залежать від вашої ради.
Наприклад, ось код визначення аналогового штифта для Arduino Uno в 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;
Для порівняння ось аналоговий код визначення штифтів для Argaino 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;
Подальше обговорення EE про аналогові штифти: Чи можу я використовувати аналогові штифти на Arduino для свого проекту як цифрові?