Вопрос по доп функциям

Fuego
Offline
Зарегистрирован: 18.01.2012

Народ подскажите пожалуста как по адекватней сделать чето туплю,

вот кусок кода, тут два условия вконце каждого ссылка на доп функцию

если условие верно слишком долго то доп мотает несколько раз

вопрос?? как зделать что бы допы выполнялись однократно даже если условие продолжает быть тру?

 
	if(time >=10 && time <=20 && engstate == off){ 
	STRT();}

        if (time >= 150 && engstate == on){
	astep = 2;delay(10);pretime = 0;time = 0; STOP();}	   


void STRT(){  ///ПОЛНЫЙ ЦИКЛ
digitalWrite(ign, 1);digitalWrite(imo, 1);delay(2000);
digitalWrite(stb, 1);delay(500);
digitalWrite(stb, 0);delay(3000);
digitalWrite(ign, 0);digitalWrite(imo, 0);

}
void STOP (){  ///ТОЛЬКО
digitalWrite(ign, 1);delay(3000);
digitalWrite(stb, 1);delay(500);
digitalWrite(stb, 0);delay(3000);
digitalWrite(ign, 0);
}    

 

Evgen
Evgen аватар
Offline
Зарегистрирован: 10.06.2011

Надо ввести две дополнительные переменные, (например x  y) и изменять их в доп функциях:

	if(time >=10 && time <=20 && engstate == off && x == 0){ 
	STRT();}

        if (time >= 150 && engstate == on && y == 0){
	astep = 2;delay(10);pretime = 0;time = 0; STOP();}	   


void STRT(){  ///ПОЛНЫЙ ЦИКЛ
x = 1;
digitalWrite(ign, 1);digitalWrite(imo, 1);delay(2000);
digitalWrite(stb, 1);delay(500);
digitalWrite(stb, 0);delay(3000);
digitalWrite(ign, 0);digitalWrite(imo, 0);

}
void STOP (){  ///ТОЛЬКО
y = 1;
digitalWrite(ign, 1);delay(3000);
digitalWrite(stb, 1);delay(500);
digitalWrite(stb, 0);delay(3000);
digitalWrite(ign, 0);
}    

Только потом, когда условия в строках 1 и 4 будут false, надо x y приравнять обратно к нулю, иначе условия выполнятся только один раз.

Fuego
Offline
Зарегистрирован: 18.01.2012

 Мдяя в том то и проблема что куда это обнуление втыкать непонятно.

Была бы какая нибуть команда типо сделать вот то() один разок; )

Evgen
Evgen аватар
Offline
Зарегистрирован: 10.06.2011

Например вот так можно сделать:

if(time < 10 || time > 20 || engstate != off && x == 1) {x = 0;}
if(time < 150 || engstate != on && y == 1) {y = 0;}

	if(time >=10 && time <=20 && engstate == off && x == 0){ 
	STRT();}

        if (time >= 150 && engstate == on && y == 0){
	astep = 2;delay(10);pretime = 0;time = 0; STOP();}

 

Fuego
Offline
Зарегистрирован: 18.01.2012

вообщем придумал кроссовер, одна функция разрешает другой, не совсем то но в данном порокатит)

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Добавьте к каждому if контроператор else и вот там обнуляйте.