# counting pulses

Hello all.

Is there a way to count pulses coming in a train on one pin? and another pin giving start and stop time by getting high or low? i was thinking about mesuring a status on a pin, wait for a small time and check again. then compare these values to get a difference. is this the right way to go?

Chek out Tom Igoe’s code…

``````/*
/*
Pulse_in
by Tom Igoe

Reads the values from a Memsic 2125 2-axis accelerometer.
In order to do so, uses a function called pulseIn, which reads
the width of a pulse on a pin.

Created 11 Feb. 2006

*/

int xPin = 2;      //  x-axis input
int yPin = 3;      //  y-axis input
int roll = 0;      // x-axis tilt
int pitch = 0;     // y-axis tilt

// Function prototypes:
int pulseIn(int whatPin, int desiredState);

void setup() {
beginSerial(9600);
pinMode(xPin, INPUT);
pinMode(yPin, INPUT);
printString("Starting\r\n");
}

void loop() {
roll = pulseIn(xPin, HIGH);    // read pulsewidth on x axis
printString("got a roll\n");
pitch = pulseIn(yPin, HIGH);  // read pulsewidth on y axis
printString("got a pitch\n");
printInteger(roll);            // print x axis value
printString("\t");             // print a tab character
printInteger(pitch);         // print y axis value
printString("\r\n");           // print return character and newline character

}

/////////////////////////////////////////
/*
pulseIn function.  reads the width of a pulse on a pin.
Takes a pin number and the desired state, HIGH or LOW.
Watches for the pin to change from the non-desired state to
the desired state, then counts loops until the pin changes
back again.

*/
int pulseIn(int whatPin, int desiredState) {
int count = 0;        // local counter
int finalCount = 0;   // final number of loops the pulse takes
int pinState;         // state of the pin you're watching
int lastState = desiredState;   // place to store the previous state of the pin
int difference = 0;

while (finalCount <= 0) {
difference = pinState - lastState;

if ((difference > 0) &&(desiredState == HIGH)) {
// start counting pulses
count++;
}

if ((difference < 0) &&(desiredState == HIGH)) {
// stop counting pulses
finalCount = count;
count = 0;
}

if ((difference < 0) &&(desiredState == LOW)) {
// start counting pulses
count++;
}

if ((difference > 0) &&(desiredState == LOW)) {
// stop counting pulses
finalCount = count;
count = 0;
}

// save the state of the pin as the old state,
// so we can get a new state to compare it to:
lastState = pinState;
}
// you're done.  Return the final count:
return finalCount;
}
``````