Go Down

### Topic: counting pulses (Read 1 time)previous topic - next topic

#### macsimski

##### Nov 28, 2006, 12:22 am
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?
--
"We're all in this together..."

#### Daniel

#1
##### Nov 28, 2006, 06:41 am
Chek out Tom Igoe's code....

Code: [Select]
`/*/*  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 inputint yPin = 3;      //  y-axis inputint roll = 0;      // x-axis tiltint 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) {    pinState = digitalRead(whatPin);    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;}`

Go Up