Boa tarde a todos.
Estou fazendo um projeto onde tenho um sensor de barreira sendo usado como tacometro. Ele esta fixado em uma chapa fixa e logo abaixo dessa temos uma chapa movel, ambas furadas na area do sensor, então quando a chapa movel é rotacionada, e os furos se coincidirem, o sensor manda um pulso para o arduino; até ai sem problemas, o bicho pega pq tenho q deixar o motor em nivel logico alto enquanto o sensor não bater determinada quantidade de pulso; segue parte da programação para quem poder me dar uma mãozinha!
#include<EEPROM.h>
int dcontagem = 0;
int csensor = 0;
int motor = 8;
int botaociclo = A2;
int entradasensor = A5;
int incrementa = A4;
int decrementa = A3;
int pisca0 = 0;void setup (){
DDRD=0b11111111;
DDRB=0b111111;
DDRC=0b000000;
recupera();
verifica();
csensor=0;
}void loop (){
if (analogRead(incrementa) <500 && dcontagem <9){
dcontagem++;
EEPROM.write(0,dcontagem);
verifica();
delay(100);
}if (analogRead(decrementa)<500 && dcontagem >0) {
dcontagem--;
EEPROM.write(0,dcontagem);
verifica();
delay(100);
}
if (analogRead(botaociclo)<500){ //O PROBLEMA SE ENCONTRA AQUI
switch(dcontagem){
case 1:
do {
digitalWrite(motor,1);
sensor();
} while (csensor<=1);
break;
case 2:
do {
digitalWrite(motor,1);
sensor();
} while (csensor<=2);
break;
case 3:
do {
digitalWrite(motor,1);
sensor();
} while (csensor<=2);
break;
case 4:
do {
digitalWrite(motor,1);
sensor();
} while (csensor<=2);
break;
case 5:
do {
digitalWrite(motor,1);
sensor();
} while (csensor<=2);
break;
case 6:
do {
digitalWrite(motor,1);
sensor();
} while (csensor<=2);
break;
case 7:
do {
digitalWrite(motor,1);
sensor();
} while (csensor<=2);
break;
case 8:
do {
digitalWrite(motor,1);
sensor();
} while (csensor<=2);
break;
case 9:
do {
digitalWrite(motor,1);
sensor();
} while (csensor<=2);
break;
case 0:
for (pisca0 = 0; pisca0<3; pisca0++){
PORTD=0b11111100;
delay(250);
PORTD=0b00000000;
delay(250);
PORTD=0b11111100;
}
pisca0=0;
break;
}
digitalWrite(motor,0);
csensor=0;
zera();
verifica();
}
}void sensor(){
if (analogRead(entradasensor) <500) {
csensor ++;
delay(15);
}
}
As variáveis citadas são;
dcontagem = contagem para o display de 7 seg. que mostra a quantidade de pulsos
csensor = contagem dos pulsos emitidos pelo sensor
Ja fiz a mesma programação com if, while e agora esta com do...while (redundância, eu sei).
Para esclarecer; se coloco a variavel de contagem, a que esta no void sensor(), dentro do while, ele só executa a programação uma vez; ja se coloco fora, como esperado, ele nunca sai do while...
O que preciso seria que;
Se setar no display x voltas, o motor ficasse acionado enquanto o sensor não chegasse nas x voltas determinadas.
Obrigado pela atenção!
Tags:
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por