#include <LiquidCrystal.h>
TCCR2B = TCCR2B & 0b11111000 | 0b00000010;
unsigned int rpm = 0;
unsigned int pwm = 255;
unsigned int set = 0;
unsigned long present = 0;
unsigned long past = 0;
unsigned long past2 = 0;
unsigned long past3 = 0;
unsigned long past4 = 0;
float time = 0;
float itd = 0;
LiquidCrystal lcd(4, 5, 6, 7, 8, 9);
void setup() {
pinMode(2, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(2), sensing, FALLING);
pinMode(3, OUTPUT);
analogWrite(3, 255);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
lcd.begin(16, 2);
}
void sensing() {
time = present - past;
past = present;
}
void loop() {
present = micros();
itd = 1000000 / time;
rpm = itd * 60;
if(rpm < set && present - past3 >= 750 && pwm >= 1) {
pwm = pwm - 1;
past3 = present;
}
if(pwm >= 255) {
pwm = 255;
}
if(pwm <= 0) {
pwm = 0;
}
if(rpm > set && present - past4 >= 750 && pwm <= 254) {
pwm = pwm + 1;
past4 = present;
}
set = analogRead(A0) * 5.5;
if(present - past2 >= 500000) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(rpm);
lcd.setCursor(6, 0);
lcd.print(pwm);
lcd.setCursor(0, 1);
lcd.print(set);
time = 200000000;
past2 = present;
}
analogWrite(3, pwm);
}