====== Pinos ====== A biblioteca Pins fornece meios simples para trabalhar com pins AVR de entrada e saída digitais. O utilizador pode criar uma variável associada a um pin e fazer qualquer operação com essa mesma variável. Desta forma não é necessário lidar directamene com nomes de registos e indíces de bits como quando se programa acedendo directamente aos registos. Os portos e indíces dos pins têm de ser especifiados apenas uma vez de forma a tornar as alterações fáceis de implementar. ===== Tipos de Dados ===== * **//pin//** \\ Tipo que permite guardar moradas de registos e máscaras de bits. Para tornar os programas mais eficientes, variáveis do tipo //pin// devem ser constantes e devem também ser inicializadas no início do programa. A inicialização pode ser feita com a função macro //PIN//, cujo primeiro parâmetro é a letra correspondente ao porto (maiúsculas A, B, C, etc) e o outro o número de indíce do pin (0 a 7). Apenas portos e pins existentes podem ser usados. ===== Constantes ===== * **//led_green, led_yellow, led_red//** - LEDs do interface de utilizador Homelab por cor * **//LED1, LED2, LED3//** - LEDs do interface de utilizador Homelab por número de LED * **//S1, S2, S3//** - Botões da placa do interface do utilizador Homelab ===== Funções ===== * **//void pin_setup_output(pin pin)//** \\ Configura um pin como saída. Parâmetros: * //pin// - Variável do pin. * **//void pin_setup_input(pin pin)//** \\ Configura um pin como entrada sem resistência “pull-up” ligada. Parâmetros: * //pin// - Variável do pin. * **//void pin_setup_input_with_pullup(pin pin)//** \\ Configura um pin como entrada com resistência “pull-up” ligada. Parâmetros: * //pin// - Variável do pin. * **//void pin_set(pin pin)//** \\ Define o pin de saída para "high". Parâmetros: * //pin// - Variável do pin. * **//void pin_clear(pin pin)//** \\ Define o pin de saída para "low". Parâmetros: * //pin// - Variável do pin. * **//void pin_toggle(pin pin)//** \\ Inverte o estado do pin de saída. Parâmetros: * //pin// - Variável do pin. * **//void pin_set_to(pin pin, bool value)//** \\ Define o estado do pin de saída. Parâmetros: * //pin// - Variável do pin. * //value// - Valor lógico do estado. * **//bool pin_get_value(pin pin)//** \\ Obtém o valor do pin. Parâmetros: * //pin// - Variável do pin. * Devolve //true// quando o pin está high e //false// quando o pin está low. * **//bool pin_get_debounced_value(pin pin)//** \\ Lê o valor do pin através do filtro de debounce. A filtragem demora pelo menos 8 ms e pode demorar até 100 ms, dependendo do debouncing. se este não acaba, //false// é devolvido. A função utiliza delay. Parâmetros: * //pin// - Variável do pin. * Devolve o valor lógico do pin - //true// quando o pin está high e //false// quando o pin está low ou é indeterminado. ===== Exemplo ===== Exemplo de como obter e definir o valor de um pin. O valor do pin PC0 é invertido e copiado para o 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); } }