Arduino - funkcje we / wy

Piny na płycie Arduino można skonfigurować jako wejścia lub wyjścia. Wyjaśnimy działanie pinów w tych trybach. Należy zauważyć, że większość pinów analogowych Arduino może być konfigurowana i używana dokładnie w taki sam sposób, jak piny cyfrowe.

Piny skonfigurowane jako INPUT

Piny Arduino są domyślnie skonfigurowane jako wejścia, więc nie muszą być jawnie deklarowane jako wejścia z pinMode()kiedy używasz ich jako danych wejściowych. Mówi się, że piny skonfigurowane w ten sposób są w stanie wysokiej impedancji. Piny wejściowe stawiają niezwykle małe wymagania obwodowi, który próbkują, co odpowiada rezystorowi szeregowemu 100 megaomów przed pinem.

Oznacza to, że przełączenie styku wejściowego z jednego stanu na inny wymaga bardzo małego prądu. To sprawia, że ​​piny są przydatne do takich zadań, jak implementacja pojemnościowego czujnika dotykowego lub odczytywanie diody LED jako fotodiody.

Piny skonfigurowane jako pinMode (pin, INPUT) bez niczego do nich podłączonego lub z podłączonymi do nich przewodami, które nie są podłączone do innych obwodów, zgłaszają pozornie przypadkowe zmiany stanu pinów, wychwytują szum elektryczny z otoczenia lub pojemnościowo łączą stan pobliskiego pinu.

Rezystory podciągające

Rezystory podciągające są często przydatne do sterowania pinem wejściowym w znanym stanie, jeśli nie ma wejścia. Można to zrobić, dodając rezystor podciągający (do + 5V) lub rezystor obniżający (rezystor do masy) na wejściu. Rezystor 10K to dobra wartość dla rezystora podwyższającego lub obniżającego.

Używanie wbudowanego rezystora pull-up z pinami skonfigurowanymi jako wejście

W układzie Atmega jest wbudowanych 20000 rezystorów podciągających, do których można uzyskać dostęp z poziomu oprogramowania. Dostęp do tych wbudowanych rezystorów podciągających uzyskuje się po ustawieniu opcjipinMode()jako INPUT_PULLUP. To skutecznie odwraca zachowanie trybu INPUT, gdzie WYSOKI oznacza, że ​​czujnik jest wyłączony, a NISKI oznacza, że ​​czujnik jest włączony. Wartość tego podciągania zależy od zastosowanego mikrokontrolera. Na większości płyt opartych na AVR gwarantowana wartość mieści się w zakresie od 20 kΩ do 50 kΩ. W Arduino Due wynosi od 50 kΩ do 150 kΩ. Dokładną wartość znajdziesz w arkuszu danych mikrokontrolera na swojej płycie.

Podłączając czujnik do pinu skonfigurowanego z INPUT_PULLUP, drugi koniec powinien być podłączony do masy. W przypadku prostego przełącznika powoduje to, że pin wyświetla stan WYSOKI, gdy przełącznik jest otwarty i NISKI, gdy przełącznik jest wciśnięty. Rezystory podciągające zapewniają wystarczający prąd do zaświecenia diody LED słabo podłączonej do styku skonfigurowanego jako wejście. Jeśli diody LED w projekcie wydają się działać, ale bardzo słabo, prawdopodobnie to się dzieje.

Te same rejestry (wewnętrzne lokalizacje w pamięci chipa), które kontrolują, czy pin jest WYSOKI czy NISKI, sterują rezystorami podciągającymi. W konsekwencji pin, który jest skonfigurowany tak, aby rezystory podciągające były włączone, gdy pin jest w trybie INPUT, będzie miał pin skonfigurowany jako WYSOKI, jeśli pin zostanie następnie przełączony w tryb WYJŚCIA za pomocą pinMode (). Działa to również w drugim kierunku, a pin wyjściowy pozostawiony w stanie WYSOKI będzie miał ustawiony rezystor podciągający, jeśli zostanie przełączony na wejście za pomocą pinMode ().

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

Piny skonfigurowane jako OUTPUT

Piny skonfigurowane jako OUTPUT z pinMode () są określane jako w stanie niskiej impedancji. Oznacza to, że mogą dostarczać znaczną ilość prądu do innych obwodów. Piny Atmega mogą dostarczać (dostarczać prąd dodatni) lub odprowadzać (dostarczać prąd ujemny) do 40 mA (miliamperów) prądu do innych urządzeń / obwodów. Jest to wystarczający prąd, aby jasno zapalić diodę LED (nie zapomnij o rezystorze szeregowym) lub uruchomić wiele czujników, ale nie wystarczy, aby uruchomić przekaźniki, solenoidy lub silniki.

Próba uruchomienia urządzeń wysokoprądowych z pinów wyjściowych może spowodować uszkodzenie lub zniszczenie tranzystorów wyjściowych w pinie lub uszkodzenie całego układu Atmega. Często skutkuje to „martwym” pinem mikrokontrolera, ale pozostałe chipy nadal działają prawidłowo. Z tego powodu dobrym pomysłem jest połączenie pinów OUTPUT z innymi urządzeniami poprzez rezystory 470Ω lub 1k, chyba że dla konkretnego zastosowania wymagany jest maksymalny prąd pobierany z pinów.

Funkcja pinMode ()

Funkcja pinMode () służy do konfigurowania określonego pinu tak, aby zachowywał się jako wejście lub wyjście. Możliwe jest włączenie wewnętrznych rezystorów podciągających w trybie INPUT_PULLUP. Ponadto tryb INPUT jawnie wyłącza wewnętrzne podciąganie.

pinMode () Składnia funkcji

Void setup () {
   pinMode (pin , mode);
}
  • pin - numer pinu, którego tryb chcesz ustawić

  • mode - INPUT, OUTPUT lub 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
   }
}

Funkcja digitalWrite ()

Plik digitalWrite()Funkcja służy do zapisania wartości HIGH lub LOW na pinie cyfrowym. Jeśli pin został skonfigurowany jako WYJŚCIE z pinMode () , jego napięcie zostanie ustawione na odpowiednią wartość: 5 V (lub 3,3 V na płytach 3,3 V) dla WYSOKIE, 0 V (masa) dla NISKIE. Jeśli pin jest skonfigurowany jako INPUT, digitalWrite () włączy (WYSOKI) lub wyłączy (NISKI) wewnętrzne podciąganie na pinie wejściowym. Zaleca się ustawienie pinMode () na INPUT_PULLUP, aby włączyć wewnętrzny rezystor podciągający.

Jeśli nie ustawisz pinMode () na OUTPUT i podłączysz diodę LED do pinu, podczas wywoływania digitalWrite (HIGH) dioda LED może być przyciemniona. Bez jawnego ustawienia pinMode (), digitalWrite () włączy wewnętrzny rezystor podciągający, który działa jak duży rezystor ograniczający prąd.

Składnia funkcji digitalWrite ()

Void loop() {
   digitalWrite (pin ,value);
}
  • pin - numer pinu, którego tryb chcesz ustawić

  • value - WYSOKA lub NISKA.

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
}

funkcja analogRead ()

Arduino jest w stanie wykryć, czy na jednym z jego pinów jest napięcie i zgłosić to za pomocą funkcji digitalRead (). Istnieje różnica między czujnikiem włączania / wyłączania (wykrywającym obecność obiektu) a czujnikiem analogowym, którego wartość stale się zmienia. Do odczytania tego typu czujnika potrzebujemy innego typu pinów.

W prawej dolnej części płyty Arduino zobaczysz sześć pinów oznaczonych „Analog In”. Te specjalne szpilki nie tylko informują, czy jest na nich przyłożone napięcie, ale także informują o jego wartości. Korzystając zanalogRead() możemy odczytać napięcie przyłożone do jednego z pinów.

Ta funkcja zwraca liczbę z przedziału od 0 do 1023, która reprezentuje napięcia od 0 do 5 woltów. Na przykład, jeśli do pinu numer 0 przyłożono napięcie 2,5 V, analogRead (0) zwraca 512.

Funkcja analogRead () Składnia

analogRead(pin);
  • pin - numer pinu wejścia analogowego do odczytu (od 0 do 5 na większości płyt, od 0 do 7 w Mini i Nano, od 0 do 15 w Mega)

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
}