Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <avr/interrupt.h>
- #define PIN 2
- #define NUM_BLADES 2
- float RPM = 0.0f;
- int interrupted_times = 0;
- unsigned long last_time = 0, elapsed_time;
- int state = 0;
- void setup()
- {
- DDRD &= ~(1 << _BV(PIN)); //Set PIN as Input
- PORTD &= ~(1 << _BV(PIN)); //Pull-Down
- cli(); // Disable global interrupts
- EIMSK |= (1 << INT0); // Enable external interrupt INT0
- //Rising edge
- EICRA |= (1 << ISC00);
- EICRA |= (1 << ISC01);
- sei(); // Enable global interrupts
- Serial.begin(9600);
- pinMode(13, OUTPUT);
- digitalWrite(13, state);
- last_time = micros();
- }
- void loop()
- {
- Serial.println(RPM);
- delay(100);
- }
- ISR(INT0_vect)
- {
- digitalWrite(13, (state ^= 1));
- interrupted_times++;
- if(interrupted_times >= NUM_BLADES)
- {
- elapsed_time = (micros() - last_time);
- RPM = 1.0f/(((((float)elapsed_time)/1000.0f)/1000.0f)/60.0f);
- interrupted_times = 0;
- last_time = micros();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement