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!

Exibições: 219

Responder esta

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço