volatile int state = LOW;
volatile int RPM = 0;
unsigned long lastflash;
void setup() {
// put your setup code here, to run once:
pinMode(13, OUTPUT);
pinMode(2, INPUT_PULLUP);
attachInterrupt(0,sens,RISING); //подключить прерывание на 2 пин при повышении сигнала
Serial.begin(9600); //открыть порт
}
void sens() {
state = !state;
RPM=60/((float)(micros()-lastflash)/1000000); //расчет
lastflash=micros(); //запомнить время последнего оборота
}
void loop() {
// if(digitalRead(2)) digitalWrite(13,HIGH);
// else digitalWrite(13,LOW);
// if(digitalRead(2)) digitalWrite(13,HIGH);
// else digitalWrite(13,LOW);
digitalWrite(13,state);
if ((micros()-lastflash)>1000000){ //если сигнала нет больше секунды
RPM=0; //считаем что RPM 0
}
Serial.println(RPM); //вывод в порт
delay(50); //задержка для стабильности
}
|