const int CnOn = 500; //Уровень напряжения состояния On
const int CnPause = 7; //Циклы паузы реверса помпы
const int CnPomp = 15; //Циклы LongTap
const int CnOnPomp = 20; //Циклы работы помпы в реверсе
const int ApL3 = 0; //Аналоговый порт Противотуманки
const int ApL1 = 6; //Аналоговый порт Ближний свет
const int ApL3Key = 2; //Аналоговый порт Противотуманки(Кнопка)
const int ApPomp = 4; //Аналоговый порт Помпа (Нажатие)
const int DpPomp = 10; //Цифровой порт пуск Помпы
const int DpPRev = 12; //Цифровой порт Помпа Реверс
const int DpL3 = 8 ; //Цифровой порт Противотуманки
int VPompStatus; // 0 - Простой.
// 1 - Остановка насоса.
// 2 - Реверс, включение насоса
// 3 - Остановка насоса после реверса
// 4 - Отключение реверса
bool L1 = HIGH;
bool L2 = LOW;
int VPompCount; // Количество циклов для работы помпы.
int VBhw; // Кнопка омывателя фар
int VBl3; // Кнопка Ближний свет
int VSl1; // Статус Ближнего света
int VSl3; // Статус ПТФ
int VL3Status; // Текущее состояние кнопки ПТФ 1 - ON; 0 - OFF; 2 - Отработано
int VCount;
int VLongTap;
int VHWStatus; // Текущее состояние кнопки омывателя фар 1 - Вкл.насос
// 2 - Отработано
// 0 - Нет сигнала;
int VSl1a = 2; // Предыдущий Статус Ближнего света 0 - Выключен
// 1 - Включен
// 2 - Неопределённое сосояние
void setup() {
// Инициализируем вход/выход в режиме выхода.
pinMode(DpPomp, OUTPUT);
pinMode(DpPRev, OUTPUT);
pinMode(DpL3, OUTPUT);
pinMode(13, OUTPUT);
Serial.begin(115200);
pinMode(ApL3, INPUT);
pinMode(ApL1, INPUT);
pinMode(ApL3Key, INPUT);
pinMode(ApPomp, INPUT);
}
void loop() {
// Читаем значение вольтметра
VSl3 = analogRead(ApL3);
delay(20);
VBl3 = analogRead(ApL3Key);
delay(20);
VBhw = analogRead(ApPomp);
delay(20);
VSl1 = analogRead(ApL1);
delay(20);
// Визуализация статуса Ближнего света
if ( VSl1 >= CnOn && VSl1a == 0 ) {
//Serial.println("ON");
L1 = LOW;
L2 = HIGH;
digitalWrite(13,L2);
}
if ( VSl1 < CnOn && VSl1a == 1 ) {
//Serial.println("OFF");
L1 = HIGH;
L2 = LOW;
digitalWrite(13,L2);
}
if ( VSl1 >= CnOn ) {
if ( VSl1a == 2) { VSl1a = 0;} else {VSl1a = 1;}
}
else {
if ( VSl1a == 2) { VSl1a = 1;} else {VSl1a = 0;}
}
// ПТФ.
if (VBl3 >= CnOn && VL3Status == 2) { //Кнопка отпущена и обработана
VL3Status = 0;
digitalWrite(13, L2);
}
if (VBl3 < CnOn && VL3Status == 0) { //Кнопка нажата и не отработана
VL3Status = 1;
digitalWrite(13, L1);
}
if (VSl3 > CnOn && VL3Status == 1 ) { // ПТФ горит и кнопка нажата
digitalWrite(DpL3, LOW); // ПТФ погашен
VL3Status = 2; //Сигнал отработан
}
if (VSl3 <= CnOn && VL3Status == 1 ) { // ПТФ не горит и кнопка нажата
//Serial.println("ПТФ Включен");
digitalWrite(DpL3, HIGH); // ПТФ включен
VL3Status = 2; //Сигнал отработан
}
//----------------------------------------------------------------- Омыватель фар
if (VPompStatus == 0) { // Помпа не в реверсе.
if (VSl1 <= CnOn) { // Ближний свет фар выключен
VLongTap = 0; // Счётчик длинного нажатия сброшен
VCount = 0; // Счётчик нажатий сброшен
}
if (VBhw > CnOn && VHWStatus == 0) { //Кнопка нажата и не отработана
VHWStatus = 1;
}
if ( VHWStatus == 1 ) { // Кнопка нажата
digitalWrite(DpPomp, HIGH); // Насос включен
VHWStatus = 2; // Сигнал отработан
digitalWrite(13, L1);
if (VSl1 > CnOn) { // Ближний свет фар включен
VCount = VCount + 1; // Счётчик нажатий омывателя.
VLongTap = 0; // Счётчик длинного нажатия инициализирован
}
}
if (VBhw < CnOn && VHWStatus == 2) { //Кнопка отпущена и обработана
digitalWrite(DpPomp, LOW); // Насос выключен
digitalWrite(13, L2);
VHWStatus = 0; // Сигнал сброшен
}
if (VHWStatus == 2) { // Счётчик Длинное нажатие
VLongTap = VLongTap + 1;
}
if ((VCount == 5 || VLongTap >= CnPomp) && VHWStatus == 0) { // Длинное нажатие или 5 включений омывателя
VPompStatus = 1;
}
}
if (VPompStatus != 0) {
VPompCount = VPompCount - 1;
VLongTap = 0;
VCount = 0;
}
if (VPompStatus == 4 && VPompCount == 0) {
digitalWrite(DpPRev, LOW); // Отключен реверс
// VPompCount = 1; // Остановка помпы
VPompStatus = 0;
}
if (VPompStatus == 3 && VPompCount == 0) {
digitalWrite(DpPomp, LOW); // Насос стоп.
VPompCount = CnPause; // Остановка помпы
VPompStatus = 4;
}
if (VPompStatus == 2 && VPompCount == 0) {
digitalWrite(DpPRev, HIGH); // Реверс насоса включен
digitalWrite(DpPomp, HIGH); // Помпа Старт.
VPompCount = CnOnPomp; // Количество циклов работы помпы в реверсном режиме
VPompStatus = 3;
}
if (VPompStatus == 1) {
digitalWrite(DpPomp, LOW); // Помпа Стоп.
VPompStatus = 2;
VPompCount = CnPause; // Остановка помпы
}
}