Цитата:
**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);
****}