Забыл код добавить. Вот он:
/* Запуск двигателя автомобиля от кнопки "Start-Stop"*/
int ledzel=2; // светодиод зеленый (ACC)
int ledzol=3; // светодиод желтый (зажигание)
int ledred=4; // светодиод красный двс заведен
int regim=1; // переменная для выбора нескольких режимов, типа что то выбора меню
int flag=0; // переменная состояния нажатия или отжатия кнопки
//-------------- для выполнения какого либо действия по истечению заданого времени после нажатия кнопки ---------------
//int valBut=0; // задаем переменную для счетчика
//long previousMillis=0; // зададим начальное значение счетчика millis
//long TimePush=200; // время нажатия на кнопку 500= 8секунд
//---------------------------------------------------------------------------------------------------------------------
//---------------мигание светодиода красного--------------------------------
int previousMillis1=0;
int interval1=40;
//--------------------------------------------------------------------------
//--------------- задержка для включеня стартера и ACC ---------------------
int previousMillis2=0;
int interval2=50;
//--------------------------------------------------------------------------
void setup()
{
pinMode(2, OUTPUT); // Светодиод статуса зеленый
pinMode(3, OUTPUT); // Светодиод статуса желтый
pinMode(4, OUTPUT); // Светодиод статуса красный
pinMode(6, INPUT); // Вход button (кнопка start-stop)(-)
pinMode(7, INPUT); // Вход педаль тормоза (+12V)
pinMode(8, INPUT); // Вход сигнал генератора (+)
pinMode(9, OUTPUT); // Выход ACC (Акссесуары)(+)
pinMode(10, OUTPUT); // Выход ING 1 (зажигание)(+)
pinMode(11, OUTPUT); // Выход ING 2 (зажигание)(+)
pinMode(12, OUTPUT); // Выход STARTER (стартер)(+)
}
//=============================== Начало основного кода программы ================================================== ===============
void loop()
{
/***** Сам код программы Авто и Ручного пуска ДВС *****/
if(digitalRead(6)==HIGH&&flag==0) // если кнопка нажата и переменная flag равна 0, то ....
{
if(digitalRead(7)==LOW) // "ТОРМОЗ" НЕ НАЖАТ
{
regim++; // это нужно для того что бы с каждым нажатием кнопки
flag=1; // происходило только одно действие
// плюс защита от дребезга 100%
if(regim>3) // ограничим количество режимов
{
regim=1; // так как мы используем только одну кнопку,
// то переключать режимы будем циклично
}
}
}
//================================ Режим Автопуска ДВС ================================================== =
if(digitalRead(7)==HIGH&&digitalRead(3)==LOW) // если тормоз нажат и светодиод желтый не горит, то ...
{
statusredmig(); // мигание светодиода во время прокрутки стартера
start(); // включаем автопуск
regim=0; // обнуляем все режимы(отключаем ручной запуск)
}
//================================================== ================================================== ====
if(digitalRead(6)==LOW&&flag==1) // проверяем нажата ли кнопка если да, то ... см.ниже
{
flag=0; // обнуляем переменную "кнопка"
}
if(regim==1) // первый режим
{
digitalWrite(9,LOW); // выключаем ACC
digitalWrite(10,LOW); // выключаем ING 1
digitalWrite(11,LOW); // выключаем ING 2
digitalWrite(12,LOW); // выключаем STARTER
digitalWrite(3,LOW); // выключить светодиод желтый
digitalWrite(4,LOW); // выключить светодиод красный
// ВСЕ ВЫКЛЮЧАЕМ
}
if(regim==2) // второй режим
{
digitalWrite(9,HIGH); // включаем ACC
}
if(regim==3) // третий режим
{
digitalWrite(10,HIGH); // включаем ING 1
digitalWrite(11,HIGH); // включаем ING 2
digitalWrite(3,HIGH); // включаем желтый светодиод
if(digitalRead(6)==HIGH&&digitalRead(3)==HIGH&&dig italRead(7)==HIGH&digitalRead(8)==LOW&flag==0) // если нажата кнопка, нажат "ТОРМОЗ",
{
digitalWrite(12,HIGH); // включаем стартер
digitalWrite(9,LOW); // выключаем ACC
}
if(digitalRead(6)==LOW) // проверяем отпушенна ли кнопка
{
digitalWrite(12,LOW); // выключаем STARTER
digitalWrite(9,HIGH); // включаем ACC
}
}
/***** Конец кода программы Авто и Ручного пуска ДВС *****/
//====================================== Конец основного кода программы ================================================== ======
}
// ----------------------- Подпрограмма Автопуска ДВС, в одно касание кнопки -1----------------------------------------------
void start() // Подпрограмма запуска ДВС
{
if(digitalRead(6)==HIGH) // если кнопка нажата, то ....
{
digitalWrite(9,LOW); // выключаем acc
digitalWrite(10,HIGH); // включаем ing 1
digitalWrite(11,HIGH); // включаем ing 2
delay(50); // задержка перед пуском стартера
digitalWrite(12,HIGH); // включаем STARTER
}
if(digitalRead(8)==HIGH||digitalRead(7)==LOW) // если есть сигнал с генератор(+12V) или отпущенн тормоз
{
digitalWrite(12,LOW); // выключаем стартер
digitalWrite(ledred, HIGH); // включаем красный светодиод
// delay(50); // задержка на включение ACC
digitalWrite(9,HIGH); // включить ACC
}
}
//----------------------------------------------------------------------------1------------------------------------------
//------------------------------------------------2-----------------------------------------------------------------------
/***** Подпрограмма для сработки кнопки или от чего нибудь,через заданное время *****/
/** void pushtime()
{
if(digitalRead(7)==HIGH) // если педаль или кнопка или что то нажато-включенно, то
{
if(millis()-previousMillis>=1)//&&digitalRead(6)==HIGH) // начинаем считать время нажатия
{
previousMillis=millis();
valBut++; // с каждой милисекундой увеличиваем значение valBut
}
}
else // если кнопку отпустили, то valBut становится равным 0
{ // это необходимо для защиты от срабатывания при частых
// и многократных нажатиях
valBut=0;
}
if(valBut>=TimePush) // как только значение valLed становиться равным TimtPush
{
regim=0;
// upr(); // запускаем третий режим, т.е. включаем зажигание
valBut=0; // устанавливаем valBut=0
}
} **/
//------------------------------------------------2------------------------------------------------------------------------
//-------------------------------Подпрограмма мигания красного светодиода в автопуске ----3--------------------------------
void statusredmig()
{
unsigned long currentMillis=millis();
if(currentMillis-previousMillis1>interval1&&digitalRead(7)==HIGH)
{
// сохраняем время последнго переключения
previousMillis1=currentMillis;
// если светодиод не горит, то зажигаем и наоборот
if(digitalRead(4)==LOW)
digitalWrite(4,HIGH); // включаем светодиод
else
digitalWrite(4,LOW); // выключаем светодиод
}
}
//---------------------------------------------------------------------------------------3---------------------------------