Table of Contents

Sisend-väljundviigud

Viikude teek on ette nähtud AVR digitaalsete sisend- ja väljundviikudega opereerimiseks. Teegi eesmärk on lihtsustada AVR viikude kasutamist. Kasutaja saab programmis luua soovitud viigu kohta käiva muutuja, millele ta omistab spetsiaalse makrofunktsiooniga füüsilise viigu aadressi. Seejärel saab muutuja abil välja kutsuda erinevaid funktsioone viigu suuna ja olekute muutmiseks ning nende lugemiseks.

Määrates viigu füüsilise siini (pordi) ja indeksi ära ainult ühe korra ja ühes kohas, on füüsiliste muudatuste korral lihtne programmi muuta. Näiteks, kui algul kasutatakse indikaatorina ühte LED-i, võib lihtsa tarkvara muudatusega teist LED kasutama hakata. Viigu muutujatest võib luua ka massiive, näiteks siinide koostamiseks.

Andmetüübid

Konstandid

Funktsioonid

Näide

Näide sellest, kuidas ühe viigu väärtus teha sõltuvaks teisest. Programmis omandab viik PC3 viigule PC0 vastupidise väärtuse:

#include <homelab/pin.h>
 
pin output_pin = PIN(C, 3);
pin input_pin = PIN(C, 0);
 
int main(void)
{
	bool value;
 
	// Viigu väljundiks seadistamine
	pin_setup_output(output_pin);
 
	// Viigu pull-up takistiga sisendiks seadistamine
	pin_setup_input_with_pullup(input_pin);
 
	// Lõputu tsükkel
	while (true)
	{
		// Sisendviigu väärtuse lugemine
		value = pin_get_value(input_pin);
 
		// Väljundviigule vastupidise väärtuse omistamine
		pin_set_to(output_pin, !value);
	}
}

led_on, led_off, button_read käskude kasutamise näide.

#include <homelab/pin.h>
 
// Kodulabori nupud ja LEDid on teegis eeldefineeritud 
// ja neid pole vaja uuesti defineerida
 
int main(void)
{
	// Viigu väljundiks seadistamine
	pin_setup_output(led_green);
 
	// Viigu pull-up takistiga sisendiks seadistamine
	pin_setup_input_with_pullup(S1);
 
	// Lõputu tsükkel
	while (true)
	{
		// Kui nupp on vajutatud, süüta LED, vastasel juhul kustuta
		if(button_read(S1) == true)
			led_on(led_green);
		else
			led_off(led_green);
	}
}