Ребята если кто скачал прогу извините я там в коде ошибку допустил которая мешает экстренному отключению программы по нажатию кнопки вот исправленный код :
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(EnginePinOUTPUT);
pinMode(StarterPinOUTPUT);
pinMode(ACCPinOUTPUT);
pinMode(WordsPinOUTPUT);
pinMode(YellowGlazokPinOUTPUT);
pinMode(GreenGlazokPinOUTPUT);
//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 != 0Serial.println(button);
lastImmoTest();
switch (
statusEngine
{
case 
0:
digitalWrite(GreenGlazokPinLOW);
if (
stateACCdigitalWrite(YellowGlazokPinHIGH); 
else 
digitalWrite(YellowGlazokPinLOW);
if (
millis() - lastImmo 10000digitalWrite(WordsPinHIGH); 
else 
digitalWrite(WordsPinLOW);
if (
button == 1500 && stateACC)
{
StopAll();
}
else if (
button == 1500 && !stateACCStartACC();
else if (
button != && millis() - lastImmo 2000 && newTime 500) {
StartEngine();
statusEngine=1;
}
break;
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- 
case 1:
if (
digitalRead(ImmoPin) == LOWStopAll();
digitalWrite(WordsPinHIGH); 
if (
stateACCdigitalWrite(YellowGlazokPinHIGH); else digitalWrite(YellowGlazokPinLOW);
if (
millis() - lastImmo 2000 && StopIsPress() && newTime 900
{
digitalWrite(GreenGlazokPinHIGH); 
digitalWrite(WordsPinHIGH);
}
 else
{
digitalWrite(GreenGlazokPin,!digitalRead(GreenGlazokPin));
delay(100);
}
 
if (
button == 1500) {
StopAll();
}
else if (
button != && newTime 500) {
if (!
stateACC
StopAll();
else
{
StopEngine();
 
statusEngine=5;
 }
 }
 else if (
newTime 9000 && newTime 9100 && StopIsPress())//задержка на 9 секунд тут она не мешает основному циклу если нужна другая просто меняйте 
 
 
{
 
 
StartStarter();
 
statusEngine=2;
 }
 break;
 
 
 
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
 
case 2:
 
digitalWrite(WordsPinHIGH); 
 
digitalWrite(GreenGlazokPinHIGH); 
 if (
stateACCdigitalWrite(YellowGlazokPinHIGH);
 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 != && newTime 500) { 
 
StopAll();
 }
 else if (
newTime 5000 || !StopIsPress()){
 
StopStarter();
 
statusEngine=4;
 }
 break;
 
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
 
case 3:
 
digitalWrite(GreenGlazokPinHIGH);
 
digitalWrite(YellowGlazokPinLOW);
 if (
newTime 5000digitalWrite(WordsPinLOW); 
 else 
digitalWrite(WordsPinHIGH);
 if (
button == 1500) {
 
StopAll();
 }
 else if (
button != && newTime 500) { 
 
StopEngine();
 
statusEngine=5;
 }
 break;
 
 
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
 
 
case 4:
 
 
digitalWrite(WordsPinHIGH);
 
digitalWrite(GreenGlazokPin, !digitalRead(GreenGlazokPin)); delay(50);
 
digitalWrite(YellowGlazokPinLOW);
 if (
button == 1500 || newTime 10000) {
 
StopAll();
 }
 else if (
button != && newTime 500 && StopIsPress()) {
 
StartStarter();
 
statusEngine=2;
 }
 else if (
button != && newTime 500 && !StopIsPress()) {
 
StopAll();
 }
 break;
 
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
 
case 5:
 
digitalWrite(GreenGlazokPinLOW);
 if (
stateACCdigitalWrite(YellowGlazokPinHIGH); else digitalWrite(YellowGlazokPinLOW);
 if (
newTime 5000
 {
 if (
millis() - lastImmo 5000digitalWrite(WordsPinHIGH); else digitalWrite(WordsPinLOW);
 }
 else 
 
digitalWrite(WordsPinHIGH);
 if (
button == 1500) {
 
StopAll();
 }
 else if (
millis() - lastImmo 2000StopAll();
 else if (
button != && newTime 500) {
 
StartEngine();
 
statusEngine=1;
 }
 
lastImmoTest();
 break;
 
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
 
}
 }

void StartEngine(){
digitalWrite(EnginePinHIGH);
Serial.println("Engine is ON");
lastPress=millis();
 }
 
void StopEngine(){
 
digitalWrite(EnginePinLOW);
 
Serial.println("Engine is OFF");
 
lastPress=millis();
 }
 
void StopAll(){
 
digitalWrite(EnginePinLOW);
 
digitalWrite(StarterPinLOW);
 
digitalWrite(ACCPinLOW);
 
Serial.println("All OFF"); 
 while (!
digitalRead(ButtonPin)){}
 
stateACC=false;
 
lastPress=millis();
 
statusEngine=0;
 
lastPress=millis(); 
 }
 
 
void StartStarter(){
 
digitalWrite(StarterPinHIGH);
 
Serial.println("Starter START!");
 
splitTime=micros();
 
lastPress=millis();
 }
 
void StopStarter(){
 
digitalWrite(StarterPinLOW);
 
Serial.println("Starter if OFF!");
 
lastPress=millis();
 }
 
 
void StartACC(){
 
digitalWrite(ACCPinHIGH);
 
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 60newTime 0;
 return 
newTime
 }
 
boolean StopIsPress(){
 return 
digitalRead(StopPin); 
 }