**
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);
****}