//Include the TimerOne Library from Paul Stoffregen #include "TimerOne.h" //Constants for Interrupt Pins //Change values if not using Arduino Uno const byte MOTOR1 = 2; //Motor 1 Interrupt Pin - INT 0 const byte MOTOR2 = 3; //Motor 2 Interrupt Pin - INT 1 //Integers for pulse counters unsigned int counter1 = 0; unsigned int counter2 = 0; //Float for number of slots in encoder disk float diskslots 30; //Change to match value of encoder disk //Interrupt Service Routines //Motor 1 pulse count ISR void ISR_count1() { counter1++; // increment Motor 1 counter value } //Motor 2 pulse count ISR void ISR_count2() { counter2++; // increment Motor 2 counter value } //TimerOne ISR void ISR timerone ( { Timerl.detachInterrupt (); // Stop the timer Serial.print ("Motor Speed 1:"); float rotationl = (counterl / diskslots) * 60.00; //calculate RPM for Motor 1 Serial.print (rotationl); Serial.print (" RPM - "); counterl = 0; // reset counter to zero Serial.print ("Motor Speed 2:"); float rotation2 = (counter2 / diskslots) * 60.00; //calculate RPM for Motor 2 Serial.print (rotation2); Serial.println (" RPM"); counter2 = 0; // reset counter to zero Timerl.attachInterrupt ( ISR_timerone ); // Enable the timer } void setup() { Serial.begin(9600); Timerl.initialize(1000000); // set timer for lsec attachInterrupt (digitalPinToInterrupt (MOTOR1), ISR_count1, RISING); // Increase counter 1 when speed sensor pin goes High attachInterrupt (digitalPinToInterrupt (MOTOR2), ISR_count2, RISING); // Increase counter 2 when speed sensor pin goes High Timer1.attachInterrupt( ISR_timerone ); // Enable the timer } void loop() { //Nothing in the loop! //You can place code here }
标签:counter,电机,ISR,void,Arduino,Motor,print,Serial,测速 From: https://www.cnblogs.com/asandstar/p/17591305.html