#define Out_WN 11 //выход форсунки подачи воды
#define In_IF 0 //вход сигнала импульса форсунки (0-D2,1-D3)
#define t_I_rate 2 //отношение длительности импульса впрыска воды к длительности импульса форсунки
volatile uint32_t time_F; //текущее время по прерываниям импульсов форсунки
volatile uint32_t t_IF;
void setup() {
pinMode(Out_WN, OUTPUT);
pinMode(In_IF+2, INPUT);
attachInterrupt(In_IF, IF, CHANGE);//прерывание на импульс форсунки (¯|_ or _|¯)
Serial.begin(9600);
}
void loop() {
Serial.print(t_IF);Serial.print(" ");Serial.println(round(t_IF*t_I_rate));
if ((micros()-time_F)>=round(t_IF*t_I_rate))
{
digitalWrite(Out_WN, LOW);
}
}
//обработчик прерывания импульса форсунки
void IF()
{
if (digitalRead(2)==LOW)
{
time_F=micros();
digitalWrite(Out_WN, HIGH);
}
if (digitalRead(2)==HIGH)
{
t_IF=micros()-time_F;
}
}