====== 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);
}
}