Zaawansowane funkcje wejścia/wyjscia

powyżej opisane funkcje obsługujące wejście i wyjście analogowo-cyfrowe nie wyczerpują wszystkich możliwości pakietu ArduinoIDE.

    tone()

Funkcja tone() umożliwia wygenerowanie przebiegu prostokątnego o wypełnieniu 50%. Zakres możliwych do wygenerowania częstotliwości to 31 do 65535Hz. Wygenerowanie przebiegu o częstotliwości mniejszej niż 31Hz nie jest możliwe. Składnia funkcji jest następująca:

tone(pin, częstotliwość);
tone(pin, częstotliwość, czas);

Możliwe są dwa sposoby wywołania. Podaje się numer pinu i częstotliwość lub numer pinu, częstotliwość i czas trwania. W pierwszym przypadku przebieg generowany jest do czasu, aż nie zostanie zatrzymany za pomocą funkcji noTone(), w drugim natomiast generowanie trwa tyle ile podano w wywołaniu funkcji. czas podawany w wywołaniu funkcji podajemy w milisekundach. W przypadku, gdy chcemy uzyskać generowany sygnał o różnych częstotliwościach na różnych pinach należy wyłączyć generowanie przebiegu na jednym pinie przed rozpoczęciem generowania go na drugim pinie. Nie jest możliwe jednoczesne generowanie różnych przebiegów na różnych pinach. Przykłady wykorzystania funkcji tone():

tone(3,1000);
delay(1500);
noTone(3);

tone(4,1000,1500);

Pierwsza część kodu umożliwia wygenerowanie przebiegu o częstotliwości 1000Hz i czasie trwania 1500ms. Druga część kodu wykonuje to samo zadanie. Różnica polega na tym, że w pierwszym przypadku korzystamy z odrębnych funkcji do odmierzania czasu i wyłączenia generowania sygnału, w drugim przypadku wszystko ustalane jest w funkcji tone().

    noTone()

Funkcja noTone() umożliwia wyłączenie generowania przebiegu za pomocą funkcji tone(). Składnia noTone() sprowadza się do podania numeru pinu, który chcemy wyłączyć. 

noTone(pin);

Wyłączenie generowania przebiegu dla pinu, na którym przebieg nie był generowany nie powoduje żadnej akcji.

    shiftOut()

Funkcja shiftOut() umożliwia szeregowe wystawienie wartości liczby int na podanym pinie. Umożliwia to prostą obsługę zewnętrznych rejestrów szeregowo-równoległych, czy wykonania kilku programowych portów szeregowych. 

    shiftIn()

Za pomocą funkcji shiftIn() możliwe jest szeregowe odczytanie wartości z podanego pinu. Umożliwia to obsługę zewnętrznych rejestrów równoległo-szeregowych i innych.

    pulseIn()

Funkcja pulseIn() umożliwia zmierzenie czasu trwania impulsu podanego na zdefiniowany pin. Możliwy jest pomiar czasu stanu wysokiego, jak również stanu niskiego - w zależności od podanego parametru. Składnia wywołania funkcji jest następująca:

pulseIn(pin, stan);

pulseIn(pin, stan,czas);

Pin określa z którego pinu odczytujemy stan, stan to jedna z wartości HIGH lub LOW, dodatkowo opcjonalny parametr czas określa jak długo funkcja ma czekać na zdarzenie. Wykorzystanie czasu umożliwia zaniechanie oczekiwania w przypadku, gdy zdarzenie (zmiana stanu pinu) nie wystąpi. Przykład wykorzystania pulseIn() przedstawiono poniżej:

#define pin  7
unsigned long czas;

void setup()
{
  pinMode(pin, INPUT);
  Serial.begin(9600);
}

void loop()
{
  czas = pulseIn(pin, HIGH);
  Serial.println(czas);
  delay(1000);
}

W przykładzie co sekundę odczytywany jest czas trwania stanu wysokiego na pinie 7. Czas przesyłany jest poprzez port szeregowy do komputera.