Hi,.
I am trying to get the arduino to count the pulses it gets from an input. Its from a inductive sensor sitting on the back of a 900rpm motor. I wan't to use it as an encoder, to be able to stop the motor after X rotations.
I have tried a lot of different things, and read posts for hours, but i just cant get it working. It just counts all pulses at an instance... I am using interrupt.
int pin = 13;
volatile int state = LOW;
volatile int count = 0;
int pin1 =9;
void setup()
{
pinMode(pin, OUTPUT);
pinMode(pin1,OUTPUT);
attachInterrupt(0, puls, RISING); //Interrupt indgang 0 som er pin2, aktiver "blink" når værdien falder på pin2, altså fra + -> -, kan også være RISING eller CHANGE (skifter ved hver ændring) Eller LOW for at trigger den hver gang den blive lav.
}
void loop()
{
if(count>=20){
digitalWrite(pin, HIGH);}
else{digitalWrite(pin, LOW);}
digitalWrite(pin1,HIGH);
}
void puls()
{
state ? count--: count++;
}
I have the sensor connected via 24v on two resistors to break it down to 5v. 2.4K to GND, a 10K from sensor signal. The two resistors are joined at the input on the arduino.
Pin is just setting the led on pin 13 (onboard led).
Pin1 is my motor, which i wan't to stop at the count of 20.
But the big problem is that when i activate the sensor once it counts to 20, it doen't just give me one pulse. I wanted it to count +1 every time sensor goes from low to high or the other way around. The 10K resistor to GND should make sure the sensor doesn't flicker. Should i set a 1uf capacitor betwen the input and GND also? or is it my programming that is wrong??
int pin = 13;
volatile int state = LOW;
volatile int count = 0;
int pin1 =9;
void setup()
{
pinMode(pin, OUTPUT);
pinMode(pin1,OUTPUT);
attachInterrupt(0, puls, RISING); //Interrupt indgang 0 som er pin2, aktiver "blink" når værdien falder på pin2, altså fra + -> -, kan også være RISING eller CHANGE (skifter ved hver ændring) Eller LOW for at trigger den hver gang den blive lav.
}
void loop()
{
if(count<=200){
digitalWrite(pin1, HIGH);}
else{digitalWrite(pin1, LOW);}
digitalWrite(pin,HIGH);
}
void puls()
{
state ? count--: count++;
}
[/code
Damn it. It was just the 1uF capacitor on the input as i suggested.. The programmin is good, it works now..
But thank you so much for the reply!
Regards NIC
Good that you got it working.
I was about to suggest that if the sensor is an analog one, outputting voltages in 0V ~ 24V, connecting it directly to a digital input may lead to quite an undetermined behavior. If it's a digital one, outputting just 0V or 24V, you should be fine.
It is a digital 0-24v. And i just have to resistors on its signal wire for breaking the 24 down to 5v. Now i just put a 1uF between GND and the input pin on the arduino, to take the flicker. And it looks like it is working...
I am not all that in to circuits, but should i use a 10K resistor from the signal to the input and then a 1uF capacitor from input to GND or is it fine with just the capacitor?
I have seen the low-pass filter with a 10K and 1uF before, but it works with just the 1uF...
Note that you can also "debounce" in software by recording a "high" then not recording a transition to "low" until some milliseconds have passed. This can be done through various means such as recording millis when you receive the first transition, then ignoring transitions until a few milliseconds have passed.
But I'm wandering dangerously into territory I don't really know here.