Essa técnica é muito melhor que o pooling, pois agente só ocupa o processador quando realmente acontece uma mudança de estado no pino que está ligado ao encoder.

Ela ainda não é tão boa como o contador externo pois cada pulso que ocorre na roda agente usa o processador embora seja bem poquinho.

Como usar:
De acordo com o Tutorial do arduino, só podemos usar os pinos 2 ou 3 como interrupção externa, a não ser que esteja com um Mega.

Antes de mais nada vamos declarar uma variável global onde ficará nossa contagem. 

static int contadorDireira = 0; 

O de baixo é para contar o tempo. 

static int tempoanterior = 0; 

Para ligar a interrupção, agente só precisa configurar a interrupção lá no setup. O 0 quer dizer que vamos ligar o encoder no pino 2 do arduino (se fosse o três era 1), o segundo parâmetro é o n ome da função que será executada quando ocorrer a interrupção, e o CHANGE quer dizer que vai executar sempre que mudar o estado de LOW pra HIGH ou de HIGH pra LOW.

void setup()

{

     attachInterrupt(0, ContarRodaDireita, CHANGE);

}

Agora a nossa super função que vai incrementar o contador:

void ContarRodaDireita()

{

    contadorDireira ++;

}

De vez enquando agente tem que ler o contador e zera ele para não estourar o int. Isso pode ser deito no loop mesmo, ou dentro de uma máquina de estados que agente tiver usando, lembre-se que o comando delay() nunca é bem vindo nesse caso.

void loop()
{

    int destancia;
    if ((millis() - tempoanterior) > 10000){
    distancia = contadorDireira / NUMERODEPULSOSPARA1CM;
    contadorDireira = 0;
}
}



Atividades recentes