Цитата:
	
		
		
			**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 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(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,*!digitalRea  d(GreenGlazokPin));
**********delay(100);
********}*/
********
********
******if (button == 1500) {
********StopAll();
******}
******else if (button != 0 && newTime > 500) {
********if (!stateACC) 
**********StopAll();
********else
********{********
**********StopEngine();
**********statusEngine*=*5;
********}
******}
******else if (newTime > 800 && newTime < 900 && StopIsPress()) {
********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>1500) { //<-------ВЕРНУТЬ СЮДА ТЫЩУ!!!! <-------
**********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); 
****}