Arduino: Temporizadores e Interrupcoes: mudanças entre as edições
Linha 48: | Linha 48: | ||
As '''interrupções''' permitem detectar mudanças em uma entrada sem a necessidade de checar constantemente seu estado. Quando uma interrupção é detectada uma '''rotina de tratamento de interrupção''' é chamada. | As '''interrupções''' permitem detectar mudanças em uma entrada sem a necessidade de checar constantemente seu estado. Quando uma interrupção é detectada uma '''rotina de tratamento de interrupção''' é chamada. | ||
No '''Arduíno UNO''' as '''interrupções externas''' são acionadas pelo comando | No '''Arduíno UNO''' as '''interrupções externas''' são acionadas pelo comando <code>AttachInterrupt()</code> e são acionadas pelo pino 2 (interrupção 0) e/ou pino 3 (interrupção 1). | ||
No Arduíno as '''interrupções externas''' podem ser acionadas de quatro diferentes modos: | No Arduíno as '''interrupções externas''' podem ser acionadas de quatro diferentes modos: |
Edição das 16h57min de 9 de novembro de 2021
Arduíno: Temporizadores e Interrupções
Temporizadores
O Arduíno possui várias funções que permitem implementar temporizadores e realizar medidas de tempo.
- Funções de pausa temporizada no programa
delay(ms)
- Pausa o programa por uma quantidade de tempo especificada como parâmetro em milissegundos. (onde 1000 milissegundos é 1 segundo).
delayMicroseconds(us)
- Equivalente ao
delay()
com tempo especificado microssegundos.
- Funções para medidas de tempo
millis()
- Retorna o número de milissegundos decorridos desde que a placa Arduíno foi iniciada com o programa atual.
micros()
- Equivalente ao
millis()
retornando o número de microssegundos.
Laboratório 1: Blink sem pausar o programa em execução
Uma aplicação interessante da função millis()
é poder realizar temporizações sem pausar o programa em execução.
- Programa Blink sem pausar programa [1]:
/*
* Blink sem delay();
*/
const int ledPin = 13; // pino do led
int ledState = LOW; // estado do led
unsigned long previousMillis = 0; // tempo anterior no qual o led foi chaveado
const long interval = 1000; // intervalo para piscar led (milliseconds)
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis; // salva o tempo atual
ledState = !ledState; // chaveia o led
digitalWrite(ledPin, ledState); // atualiza estado do led
}
}
- Carregar e testar o programa.
Interrupções
As interrupções permitem detectar mudanças em uma entrada sem a necessidade de checar constantemente seu estado. Quando uma interrupção é detectada uma rotina de tratamento de interrupção é chamada.
No Arduíno UNO as interrupções externas são acionadas pelo comando AttachInterrupt()
e são acionadas pelo pino 2 (interrupção 0) e/ou pino 3 (interrupção 1).
No Arduíno as interrupções externas podem ser acionadas de quatro diferentes modos:
- LOW: Quando o pino está baixo;
- CHANGE: Quando o valor do pino muda;
- RISING: Quando o valor do pino sobe de baixo para alto;
- FALLING: Quando o valor do pino desce de alto para baixo;
A cada fechamento de contados ocasionado pelos sensores uma rotina de tratamento de interrupção será acionada.
Referências
Evandro.cantu (discussão) 09h51min de 9 de novembro de 2021 (-03)