Tyilo'nun özel sorularını cevaplamak için:
analogRead(5)
ve digitalRead(5)
iki farklı yerden okuyacak. Eski bir analog kanal okuyacak 5
ya A5
ve ikinci pim 5 okuyacak durumda bir dijital pim olması. Yani evet, sizinle analog bir pin okumak digitalRead
istiyorsanız kullanmalısınız A5
.
Neden?
analogRead
dahili olarak bir kanal numarası gerektirir ancak bu numaraya bir pin numarası vermenize de olanak tanır. Bir pin numarası verirseniz, karşılık gelen kanal numarasına dönüştürür. Anlayabildiğim kadarıyla analogRead
, bir kanal numarasını dahili olarak kullanan tek işlevdir, bir kanal numarasına izin veren tek işlevdir ve bu belgesiz pin-kanal dönüşümü ile tek işlevdir. Bunu anlamak için bazı örneklerle başlayalım.
Kullanmak isterseniz analogRead
ilk analog pim üzerine A0
yapabileceğiniz analogRead(0)
kanal numarasını kullanan veya analogRead(A0)
pin numarası kullanır. Eğer pin numarası varyantını kullanacak olursak, analogRead
pin numarası dönüştürmek istiyorum A0
onun uygun kanal numarasına 0
.
Kullanmak isterseniz digitalWrite
ilk analog pim üzerine A0
şunları yapabilirsiniz sadece yapmak digitalWrite(A0, x)
. digitalWrite
analog kanalları dahili olarak kullanmaz ve kanal numarası iletmenize izin vermez. Sana izin verecek ama yanlış pimi seçeceksin. Aynısı digitalRead
ve hatta geçerlidir analogWrite
.
Tarafından yapılan pin-to-channel dönüşümleri ne olacak analogRead
? Bu işlevin kaynağı hardware/arduino/avr/cores/arduino/wiring_analog.c
, pano türüne bağlı olarak bazı basit çıkarma işlemlerinin yapıldığını göreceksiniz. A0
/ A1
/ A2
/ Vb. sabitler analog kanalların pin numarasını temsil eder ve analog girişlere başvurmanız gereken her yerde kullanılabilir. Bu nedenle, Arduino kodunuzda kullanmak için en iyi seçenektir, çünkü farklı işlevleri kullanırken bile aynı fiziksel bağlantı noktasını kullandığınız çok açıktır. Bu sabitlerin tanımları tahtanıza bağlıdır.
Örneğin, burada Arduino Uno in için analog pin tanımlama kodu 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;
Karşılaştırma için burada Arduino Mega için analog pin tanımlama kodu:
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;
Analog pinler hakkında daha fazla enerji verimliliği tartışması: Projem için Arduino'daki analog pinleri dijital olarak kullanabilir miyim?