====== Pins ====== Pins library provides an easy way for operating with AVR digital input-output pins. The user can create a pin related variable and do all the pin operations with that variable. This way there is no need to deal with the register names and bit indexes like it is done while programming in direct register access method. The pin's port and index must be specified only once, so the changes are easy to implement. ===== Data Types ===== * **//pin//** \\ Data type to hold pin registers addresses and bit mask. To get the most efficent program, //pin// typed variables should be constant, and they should be initialized at the beginning of the program code. Intializing can be done with the macro function //PIN//, whose first parameter is the port letter (capital A, B, C, etc) and the other one being the pin index (0 to 7). Only existing ports and pins can be used. ===== Constants ===== * **//led_green, led_yellow, led_red//** - Homelab User interface board LEDs by colour * **//LED1, LED2, LED3//** - Homelab User interface board LEDs by LED numbers * **//S1, S2, S3//** - Homelab User interface board buttons ===== Functions ===== * **//void pin_setup_output(pin pin)//** \\ Configures pin as an output. Parameters: * //pin// - Pin variable. * **//void pin_setup_input(pin pin)//** \\ Configures pin as an input without pull-up resistor. Parameters: * //pin// - Pin variable. * **//void pin_setup_input_with_pullup(pin pin)//** \\ Configures pin as an input with pull-up resistor. Parameters: * //pin// - Pin variable. * **//void pin_set(pin pin)//** \\ Sets output pin high. Parameters: * //pin// - Pin variable. * **//void pin_clear(pin pin)//** \\ Sets output pin low. Parameters: * //pin// - Pin variable. * **//void pin_toggle(pin pin)//** \\ Inverts output pin state. Parameters: * //pin// - Pin variable. * **//void pin_set_to(pin pin, bool value)//** \\ Sets output pin to desired state. Parameters: * //pin// - Pin variable. * //value// - Desired state boolean value. * **//bool pin_get_value(pin pin)//** \\ Gets pin value. Parameters: * //pin// - Pin variable. * Return boolean //true// when pin is high and //false// when pin is low. * **//bool pin_get_debounced_value(pin pin)//** \\ Reads pin value through the switch debounce filter. Filtering takes at least 8 ms and may last up to 100 ms, depending on when the bouncing ends. If the bouncing does not end, //false// is returned. Function uses software delay. Parameters: * //pin// - Pin variable. * Return pin boolean value - //true// when pin is high and //false// when pin is low or undetermined. ===== Example ===== Example of getting and setting a pin's value. Pin PC0 value is inverted and attached to pin PC3. #include pin output_pin = PIN(C, 3); pin input_pin = PIN(C, 0); int main(void) { bool value; // Configuring pin as an output pin pin_setup_output(output_pin); // Configuring pin as an input pin with pull-up pin_setup_input_with_pullup(input_pin); // Endless loop while (true) { // Getting an input pin value value = pin_get_value(input_pin); // Setting an output pin value pin_set_to(output_pin, !value); } } led_on, led_off, button_read commands example #include // Homelab buttons and LEDs are predefined in the library int main(void) { // Set LED pin as output pin_setup_output(led_green); // Set Button S1 pin as input pin_setup_input(S1); // Endless loop while (true) { // If button is pressed, turn on LED, if not pressed, turn LED off. if(button_read(S1) == true) led_on(led_green); else led_off(led_green); } }