Mudanças entre as edições de "MCO018703 2018 2 AULA11"
Linha 41: | Linha 41: | ||
void setup() | void setup() | ||
{ | { | ||
− | pinMode(pin, OUTPUT); | + | pinMode(pin, OUTPUT); |
− | attachInterrupt(0, blink, FALLING); | + | attachInterrupt(0, blink, FALLING); // chama a função blink quando o pino 2 (0) for pressionado. |
− | + | } // o pino vai de HIGH para LOW | |
− | } | ||
void loop() | void loop() | ||
{ | { | ||
− | digitalWrite(pin, state); | + | digitalWrite(pin, state); |
} | } | ||
Linha 54: | Linha 53: | ||
void blink() | void blink() | ||
{ | { | ||
− | if(state==state1) | + | if(state==state1) { |
− | { | + | state = !state1; |
− | state = !state1; | + | } |
− | } | + | else { |
− | else | + | state=state1; |
− | { | + | } |
− | state=state1; | ||
− | } | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> |
Edição das 18h27min de 13 de novembro de 2018
Apresentação
Temporização é fundamental quando se trabalha com circuitos microcontrolados, seja para um simples delay ou para geração de sinais ou eventos periódicos. Todo microcontrolador tem pelo menos um periférico temporizador/contator. Esse periférico possui hardware dedicado para contagem de tempo e o seu correto uso, auxilia em uma programação mais eficiente para realização de diversos projetos.
Timers do ATmega328
O Atmega328, utilizado na placa Arduino UNO, possui 3 timers, sendo dois de 8 bits (TIMER0 e TIMER2) e um de 16 bits (TIMER1). Esses temporizadores são utilizados para diversas funcionalidades, tais como:
- Temporização;
- Contagem de eventos externos;
- Geração de sinais PWM;
- Interrupções periódicas;
- Medida de intervalos de pulsos.
Cada temporizador possui características próprias e são utilizados conforme os recursos disponíveis. A biblioteca do Arduino abstrai o uso destes temporizadores em muitas de suas funções. Por exemplos, as funções delay(), millis(), micros(), tone(), analogWrite() utilizam recursos de timers para o funcionamento.
O TIMER1 é utilizado somente em algumas bibliotecas no Arduino específicas, podendo ser utilizado para outras finalidades sem causar muito impacto no funcionamento do restante das funções. [1]
Interrupções no Arduino
No Arduino, assim como em qualquer outro microcontrolador, pode-se utilizar interrupções para priorizar ou não tarefas e resolver problemas de tempo (timing). Existe dois tipos de interrupção no Arduino: a interrupção interna que permite interromper um código, caso o Arduino precise "rodar" o código inteiro sem ser interrompido; e a interrupção externa, dada pela portas digitais 2 e 3.
Interrupção Externa
O exemplo abaixo demonstra o uso da interrupção externa de forma simples e funcional. O exemplo adotado é o blink (pisca-pisca) com botão utilizando interrupção externa, a figura abaixo mostra a montagem, e, em seguida apresentamos o código fonte.
figura
int pin = 13;
volatile int state = LOW;
volatile int state1 = LOW;
void setup()
{
pinMode(pin, OUTPUT);
attachInterrupt(0, blink, FALLING); // chama a função blink quando o pino 2 (0) for pressionado.
} // o pino vai de HIGH para LOW
void loop()
{
digitalWrite(pin, state);
}
void blink()
{
if(state==state1) {
state = !state1;
}
else {
state=state1;
}
}
Referências
[1] https://www.embarcados.com.br/timers-do-atmega328-no-arduino/