Bom dia pessoal, preciso fazer o seguinte. Um sensor, quando detecta a presença de um objeto, muda de 1 para 0 o seu nível lógico, quando essa mudança acontece, imediatamente chama-se uma função do tipo void(). Esse sensor vai continuar enviando nível lógico 0 até que a função termine e outro objeto seja retirado e outro colocado, pra iniciar o processo novamente. Dá pra entender? 

Quando o objeto foi retirado, vai de 0 pra 1, e não acontece nada, quando outro é colocado no lugar, vai de 1 pra 0 e chama a função novamente.

Usei o seguinte protótipo, bem fuleiro e não deu certo.

void função() {

executa a função quando o objeto for detectado

}

loop() {

if(digitalRead(sensor)==HIGH) {                          // Se estão ALTO

   if(digitalRead(sensor)==LOW) função();            // e vai pra baixo chama a função

}

else { }                                                             // Se ainda está baixa não faz nada

Alguma ideia pra melhorar isso?

Exibições: 1556

Responder esta

Respostas a este tópico

RMM, bom dia,

use um flag pra indicar que tinha um objeto na frente do sensor.

Testa este code:

http://pastebin.com/KWmE9KMv

Rui

Deu certinho meu caro! Te devo mais uma. 

Sem querer abusar mas já abusando, só teve um pequeno problema: bouce

Como faço pra colocar um debounce do sensor? Pois algumas vezes quando o sensor volta pra 1 ele chama a função sem poder.

Resolvido, Valeu!!!

Pessoal, bom dia!

Nesse caso poderia ser usada uma interrupção também usanso o modo FALLING (HIGH to LOW)) ?

int sensor = 13;
int state = LOW;

void setup() {
    pinMode(sensor, OUTPUT);
    attachInterrupt(digitalPinToInterrupt(sensor), funcao, FALLING);
}

void loop() {
    digitalWrite(sensor, state);
}

void funcao() {
    state = !state;
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço