Ребята если кто скачал прогу извините я там в коде ошибку допустил которая мешает экстренному отключению программы по нажатию кнопки вот исправленный код :
PHP код:
byte ACCPin = 11; //Выход на транзистор переферии ACC
byte EnginePin = 10; //Выход на транзистор зажигания
byte StarterPin = 9; //Выход на транзистор стартера
byte ButtonPin = 8; //Вход + с кнопки <----------------------------- Стягивающий резистор на "-"
byte StopPin = 12; //Вход с тормоза <----------------------------- Стягивающий резистор на "-"
byte ImmoPin = 7; //Вход с иммо <----------------------------- Подтягивающий резистор на "+"
byte TahoPin = 6; //Вход с тахометра <----------------------------- Стягивающий резистор на "-"
byte WordsPin = 5; //Выход на глазок 1 
byte YellowGlazokPin = 4; //Выход на глазок 2 
byte GreenGlazokPin = 3; //Выход на глазок 3
byte statusEngine = 0;
byte sw = 2;
//byte rotate = 0;
unsigned int rotate=0;
boolean stateACC = false;
unsigned long lastPress = 0;
unsigned long lastImmo = 0;
unsigned long splitTime = 0;
unsigned long time =0;
byte stat = 0;
void setup()
{
pinMode(sw,INPUT);
pinMode(EnginePin, OUTPUT);
pinMode(StarterPin, OUTPUT);
pinMode(ACCPin, OUTPUT);
pinMode(WordsPin, OUTPUT);
pinMode(YellowGlazokPin, OUTPUT);
pinMode(GreenGlazokPin, OUTPUT);
//time = 0;
lastImmo=millis();
lastPress=millis();
Serial.begin(9600);
Serial.println("Arduino is started");
}

// 0 - Все выключенно
// 1 - Включено только зажигание
// 2 - Крутиться стартер, ждем оборотов
// 3 - Двигатель работает, все включено
// 4 - Неудачная попытка запуска, включено только зажигание
// 5 - Двигатель заглушен, АСС пока еще работает
void loop()
{
if (
stat != statusEngine) {stat = statusEngine;
Serial.println(stat);
}
unsigned long newTime = millis() - lastPress;
unsigned int button = pressButton();
if (
button != 0) Serial.println(button);
lastImmoTest();
switch (
statusEngine) 
{
case 
0:
digitalWrite(GreenGlazokPin, LOW);
if (
stateACC) digitalWrite(YellowGlazokPin, HIGH); 
else 
digitalWrite(YellowGlazokPin, LOW);
if (
millis() - lastImmo > 10000) digitalWrite(WordsPin, HIGH); 
else 
digitalWrite(WordsPin, LOW);
if (
button == 1500 && stateACC)
{
StopAll();
}
else if (
button == 1500 && !stateACC) StartACC();
else if (
button != 0 && millis() - lastImmo > 2000 && newTime > 500) {
StartEngine();
statusEngine=1;
}
break;
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- 
case 1:
if (
digitalRead(ImmoPin) == LOW) StopAll();
digitalWrite(WordsPin, HIGH); 
if (
stateACC) digitalWrite(YellowGlazokPin, HIGH); else digitalWrite(YellowGlazokPin, LOW);
if (
millis() - lastImmo > 2000 && StopIsPress() && newTime < 900) 
{
digitalWrite(GreenGlazokPin, HIGH); 
digitalWrite(WordsPin, HIGH);
}
 else
{
digitalWrite(GreenGlazokPin,!digitalRead(GreenGlazokPin));
delay(100);
}
 
if (
button == 1500) {
StopAll();
}
else if (
button != 0 && newTime > 500) {
if (!
stateACC) 
StopAll();
else
{
StopEngine();
 
statusEngine=5;
 }
 }
 else if (
newTime > 9000 && newTime < 9100 && StopIsPress())//задержка на 9 секунд тут она не мешает основному циклу если нужна другая просто меняйте 
 
 
{
 
 
StartStarter();
 
statusEngine=2;
 }
 break;
 
 
 
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
 
case 2:
 
digitalWrite(WordsPin, HIGH); 
 
digitalWrite(GreenGlazokPin, HIGH); 
 if (
stateACC) digitalWrite(YellowGlazokPin, HIGH);
 if (
digitalRead(TahoPin) == HIGH) {
 
rotate++;
 while (
digitalRead(TahoPin) == HIGH) if (digitalRead(ImmoPin) == LOW) {StopAll(); break;}
 }
 if (
rotate>=2) 
 {
 
unsigned int rpm = (rotate*60000*10000/2)/(micros()-splitTime);
 
Serial.print("rpm: ");
 
Serial.println(rpm);
 
rotate=0;
 
splitTime=micros();
 if (
rpm>1000) { //<-------ВЕРНУТЬ СЮДА ТЫЩУ!!!! <-------
 
StopStarter();
 
StartACC();
 
statusEngine=3;
 
Serial.println("Engine is WORK!!");
 break;
 }
 }
 if (
button != 0 && newTime > 500) { 
 
StopAll();
 }
 else if (
newTime > 5000 || !StopIsPress()){
 
StopStarter();
 
statusEngine=4;
 }
 break;
 
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
 
case 3:
 
digitalWrite(GreenGlazokPin, HIGH);
 
digitalWrite(YellowGlazokPin, LOW);
 if (
newTime > 5000) digitalWrite(WordsPin, LOW); 
 else 
digitalWrite(WordsPin, HIGH);
 if (
button == 1500) {
 
StopAll();
 }
 else if (
button != 0 && newTime > 500) { 
 
StopEngine();
 
statusEngine=5;
 }
 break;
 
 
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
 
 
case 4:
 
 
digitalWrite(WordsPin, HIGH);
 
digitalWrite(GreenGlazokPin, !digitalRead(GreenGlazokPin)); delay(50);
 
digitalWrite(YellowGlazokPin, LOW);
 if (
button == 1500 || newTime > 10000) {
 
StopAll();
 }
 else if (
button != 0 && newTime > 500 && StopIsPress()) {
 
StartStarter();
 
statusEngine=2;
 }
 else if (
button != 0 && newTime > 500 && !StopIsPress()) {
 
StopAll();
 }
 break;
 
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
 
case 5:
 
digitalWrite(GreenGlazokPin, LOW);
 if (
stateACC) digitalWrite(YellowGlazokPin, HIGH); else digitalWrite(YellowGlazokPin, LOW);
 if (
newTime > 5000) 
 {
 if (
millis() - lastImmo > 5000) digitalWrite(WordsPin, HIGH); else digitalWrite(WordsPin, LOW);
 }
 else 
 
digitalWrite(WordsPin, HIGH);
 if (
button == 1500) {
 
StopAll();
 }
 else if (
millis() - lastImmo < 2000) StopAll();
 else if (
button != 0 && newTime > 500) {
 
StartEngine();
 
statusEngine=1;
 }
 
lastImmoTest();
 break;
 
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
 
}
 }

void StartEngine(){
digitalWrite(EnginePin, HIGH);
Serial.println("Engine is ON");
lastPress=millis();
 }
 
void StopEngine(){
 
digitalWrite(EnginePin, LOW);
 
Serial.println("Engine is OFF");
 
lastPress=millis();
 }
 
void StopAll(){
 
digitalWrite(EnginePin, LOW);
 
digitalWrite(StarterPin, LOW);
 
digitalWrite(ACCPin, LOW);
 
Serial.println("All OFF"); 
 while (!
digitalRead(ButtonPin)){}
 
stateACC=false;
 
lastPress=millis();
 
statusEngine=0;
 
lastPress=millis(); 
 }
 
 
void StartStarter(){
 
digitalWrite(StarterPin, HIGH);
 
Serial.println("Starter START!");
 
splitTime=micros();
 
lastPress=millis();
 }
 
void StopStarter(){
 
digitalWrite(StarterPin, LOW);
 
Serial.println("Starter if OFF!");
 
lastPress=millis();
 }
 
 
void StartACC(){
 
digitalWrite(ACCPin, HIGH);
 
Serial.println("Starter ACC!");
 
stateACC=true;
 
lastPress=millis();
 }
 
void lastImmoTest(){
 if (
digitalRead(ImmoPin) == LOW) { //<----------------------------- Поменял на LOW
 
lastImmo=millis();
 
Serial.println("Immo+");
 }
 }
 
 
unsigned int pressButton(){
 
unsigned long newTime = millis();
 
boolean currentPosition = digitalRead(ButtonPin);
 if (
currentPosition == HIGH){ 
 
delay(50);
 
currentPosition=digitalRead(ButtonPin); 
 }
 while (!
currentPosition) {
 
currentPosition=digitalRead(ButtonPin);
 if (
millis() - newTime > 1000) return 1500;
 }
 
newTime=millis() - newTime;
 if (
newTime < 60) newTime = 0;
 return 
newTime; 
 }
 
boolean StopIsPress(){
 return 
digitalRead(StopPin); 
 }