www.gusucode.com > Arduino_Engineering_Kit_Hardware_Support_18b 工具箱matlab源码程序 > Arduino_Engineering_Kit_Hardware_Support_18b/simulink/src/MW_Tachometer.cpp
#include <Arduino.h> #include "MW_Tachometer.h" volatile uint32_T counter; unsigned long passedtime; #define MW_ARDUINO_RPM_STEP_SIZE 60*1000 /* * Interrupt Routine */ void countISR(void) { //Update count counter++; } /* * Tachometer initialization */ extern "C" void MW_Tachometer_Init(uint8_T pin, uint8_T mode) { counter = 0; passedtime = 0; //Set the pin to INPUT mode pinMode(pin, INPUT); switch(mode){ case 0: attachInterrupt(digitalPinToInterrupt(pin), countISR, RISING); break; case 1: attachInterrupt(digitalPinToInterrupt(pin), countISR, FALLING); break; case 2: attachInterrupt(digitalPinToInterrupt(pin), countISR, CHANGE); break; case 3: attachInterrupt(digitalPinToInterrupt(pin), countISR, LOW); break; case 4: attachInterrupt(digitalPinToInterrupt(pin), countISR, HIGH); break; default: //Do Nothing break; } } /* * Calculate RPM */ extern "C" uint32_T MW_Tachometer_GetSpeed(void) { uint32_T rpm; rpm = (counter * (1000/(millis() - passedtime)) * 60); passedtime = millis(); counter = 0; return rpm; } // [EOF]