Arduino - I / O Fonksiyonları

Arduino kartındaki pinler, giriş veya çıkış olarak yapılandırılabilir. Bu modlarda pinlerin işleyişini açıklayacağız. Arduino analog pinlerinin çoğunun, dijital pinlerle tamamen aynı şekilde yapılandırılabileceğini ve kullanılabileceğini unutmamak önemlidir.

INPUT olarak yapılandırılmış pinler

Arduino pinleri varsayılan olarak giriş olarak yapılandırılmıştır, bu nedenle açık bir şekilde giriş olarak bildirilmelerine gerek yoktur. pinMode()bunları girdi olarak kullandığınızda. Bu şekilde yapılandırılan pinlerin yüksek empedans durumunda olduğu söylenir. Giriş pimleri, örnekledikleri devrede, pinin önündeki 100 megaohm'luk bir seri dirence eşdeğer, son derece küçük taleplerde bulunur.

Bu, giriş pinini bir durumdan diğerine geçirmek için çok az akım gerektiği anlamına gelir. Bu, pimleri, kapasitif bir dokunmatik sensörün uygulanması veya bir fotodiyot olarak bir LED'in okunması gibi görevler için kullanışlı hale getirir.

PinMode (pin, INPUT) olarak yapılandırılmış pinler, kendilerine bağlı hiçbir şey olmadan veya bunlara bağlı olmayan diğer devrelere bağlı olmayan kablolarla, pin durumunda görünüşte rastgele değişiklikleri bildirir, çevreden elektriksel gürültüyü alır veya durumu kapasitif olarak birleştirir yakındaki bir pinin.

Çekme Dirençleri

Yukarı çekme dirençleri, giriş yoksa, bir giriş pimini bilinen bir duruma yönlendirmek için genellikle kullanışlıdır. Bu, girişe bir çekme direnci (+ 5V'ye) veya bir çekme direnci (toprağa direnç) eklenerek yapılabilir. 10K direnç, çekme veya aşağı çekme direnci için iyi bir değerdir.

Giriş Olarak Yapılandırılmış Pimlerle Dahili Çekme Direncinin Kullanılması

Yazılımdan erişilebilen, Atmega yongasında yerleşik 20.000 kaldırma direnci vardır. Bu yerleşik kaldırma dirençlerine,pinMode()INPUT_PULLUP olarak. Bu, INPUT modunun davranışını etkili bir şekilde tersine çevirir; burada HIGH, sensörün KAPALI olduğu ve DÜŞÜK, sensörün AÇIK olduğu anlamına gelir. Bu yukarı çekmenin değeri, kullanılan mikro denetleyiciye bağlıdır. Çoğu AVR tabanlı kartta, değerin 20kΩ ile 50kΩ arasında olması garanti edilir. Arduino Due'de 50kΩ ile 150kΩ arasındadır. Tam değer için, kartınızdaki mikro denetleyicinin veri sayfasına bakın.

INPUT_PULLUP ile yapılandırılmış bir pime bir sensör bağlarken, diğer ucun toprağa bağlanması gerekir. Basit bir anahtar durumunda, bu, anahtar açıkken pimin YÜKSEK ve düğmeye basıldığında DÜŞÜK okumasına neden olur. Çekme dirençleri, giriş olarak yapılandırılmış bir pime zayıf bir şekilde bağlanmış bir LED'i yakmak için yeterli akım sağlar. Bir projedeki LED'ler çalışıyor gibi görünüyorsa, ancak çok belirsizse, muhtemelen olan şey budur.

Bir pinin YÜKSEK veya DÜŞÜK olup olmadığını kontrol eden aynı yazmaçlar (dahili yonga bellek konumları) çekme dirençlerini kontrol eder. Sonuç olarak, pin INPUT modundayken yukarı çekme dirençleri açık olacak şekilde yapılandırılmış bir pin, pin daha sonra pinMode () ile bir OUTPUT moduna geçirilirse, pin HIGH olarak yapılandırılmış olacaktır. Bu, diğer yönde de çalışır ve YÜKSEK durumda bırakılan bir çıkış pini, pinMode () ile bir girişe geçilirse yukarı çekme direncine sahip olacaktır.

Example

pinMode(3,INPUT) ; // set pin to input without using built in pull up resistor
pinMode(5,INPUT_PULLUP) ; // set pin to input using built in pull up resistor

OUTPUT olarak Yapılandırılan Pinler

PinMode () ile OUTPUT olarak yapılandırılan pinlerin düşük empedans durumunda olduğu söylenir. Bu, diğer devrelere önemli miktarda akım sağlayabilecekleri anlamına gelir. Atmega pinleri, diğer cihazlara / devrelere 40 mA'ya (miliamper) kadar akım kaynağı (pozitif akım sağlar) veya düşürür (negatif akım sağlar). Bu, bir LED'i parlak bir şekilde yakmak için (seri direnci unutmayın) veya birçok sensörü çalıştırmak için yeterli, ancak röleleri, solenoidleri veya motorları çalıştırmak için yeterli akım değildir.

Çıkış pinlerinden yüksek akım cihazları çalıştırmaya çalışmak, pin içindeki çıkış transistörlerine zarar verebilir veya yok edebilir veya tüm Atmega yongasına zarar verebilir. Çoğunlukla bu, mikro denetleyicide "ölü" bir pimle sonuçlanır, ancak kalan yongalar yine de yeterince çalışır. Bu nedenle, belirli bir uygulama için pinlerden çekilen maksimum akım gerekmedikçe, OUTPUT pinlerini diğer cihazlara 470Ω veya 1k dirençler aracılığıyla bağlamak iyi bir fikirdir.

pinMode () İşlevi

PinMode () işlevi, belirli bir pini bir giriş veya çıkış olarak davranacak şekilde yapılandırmak için kullanılır. INPUT_PULLUP modu ile dahili kaldırma dirençlerini etkinleştirmek mümkündür. Ek olarak, GİRİŞ modu, dahili çekimleri açıkça devre dışı bırakır.

pinMode () İşlev Sözdizimi

Void setup () {
   pinMode (pin , mode);
}
  • pin - modunu ayarlamak istediğiniz pinin numarası

  • mode - INPUT, OUTPUT veya INPUT_PULLUP.

Example

int button = 5 ; // button connected to pin 5
int LED = 6; // LED connected to pin 6

void setup () {
   pinMode(button , INPUT_PULLUP); 
   // set the digital pin as input with pull-up resistor
   pinMode(button , OUTPUT); // set the digital pin as output
}

void setup () {
   If (digitalRead(button ) == LOW) // if button pressed {
      digitalWrite(LED,HIGH); // turn on led
      delay(500); // delay for 500 ms
      digitalWrite(LED,LOW); // turn off led
      delay(500); // delay for 500 ms
   }
}

digitalWrite () Fonksiyonu

digitalWrite()fonksiyonu bir dijital pime HIGH veya LOW bir değer yazmak için kullanılır. Pin, pinMode () ile bir OUTPUT olarak yapılandırılmışsa , voltajı karşılık gelen değere ayarlanacaktır: HIGH için 5V (veya 3.3V kartlarda 3.3V), LOW için 0V (toprak). Pin bir GİRİŞ olarak yapılandırılmışsa, digitalWrite () giriş pini üzerindeki dahili çekmeyi etkinleştirir (YÜKSEK) veya devre dışı bırakır (DÜŞÜK). Dahili çekme direncini etkinleştirmek için pinMode () 'un INPUT_PULLUP'a ayarlanması önerilir .

PinMode () öğesini OUTPUT olarak ayarlamazsanız ve bir pime bir LED bağlarsanız, digitalWrite (HIGH) çağrılırken LED sönük görünebilir. Açıkça pinMode () ayarlanmadan, digitalWrite (), büyük bir akım sınırlayıcı direnç gibi davranan dahili kaldırma direncini etkinleştirmiş olacaktır.

digitalWrite () İşlev Sözdizimi

Void loop() {
   digitalWrite (pin ,value);
}
  • pin - modunu ayarlamak istediğiniz pinin numarası

  • value - YÜKSEK veya DÜŞÜK.

Example

int LED = 6; // LED connected to pin 6

void setup () {
   pinMode(LED, OUTPUT); // set the digital pin as output
}

void setup () { 
   digitalWrite(LED,HIGH); // turn on led
   delay(500); // delay for 500 ms
   digitalWrite(LED,LOW); // turn off led
   delay(500); // delay for 500 ms
}

analogRead () işlevi

Arduino, pinlerinden birine voltaj uygulanıp uygulanmadığını algılayabilir ve bunu digitalRead () işlevi aracılığıyla raporlayabilir. Açma / kapama sensörü (bir nesnenin varlığını algılayan) ile değeri sürekli değişen bir analog sensör arasında bir fark vardır. Bu tip sensörü okumak için farklı tipte bir pime ihtiyacımız var.

Arduino kartının sağ alt kısmında "Analog Giriş" olarak işaretlenmiş altı pin göreceksiniz. Bu özel pimler sadece kendilerine voltaj uygulanıp uygulanmadığını değil, aynı zamanda değerini de söyler. KullanarakanalogRead() fonksiyon, pimlerden birine uygulanan voltajı okuyabiliriz.

Bu işlev, 0 ile 1023 arasında, 0 ile 5 volt arasındaki voltajları temsil eden bir sayı döndürür. Örneğin, 0 numaralı pime uygulanan 2,5 V'luk bir voltaj varsa, analogRead (0) 512 değerini döndürür.

analogRead () işlevi Sözdizimi

analogRead(pin);
  • pin - okunacak analog giriş pini sayısı (çoğu panoda 0'dan 5'e, Mini ve Nano'da 0'dan 7'ye, Mega'da 0-15)

Example

int analogPin = 3;//potentiometer wiper (middle terminal) 
   // connected to analog pin 3 
int val = 0; // variable to store the value read

void setup() {
   Serial.begin(9600); // setup serial
} 

void loop() {
   val = analogRead(analogPin); // read the input pin
   Serial.println(val); // debug value
}