Помогите начинающему допилить скетч
- Войдите на сайт для отправки комментариев
Ср, 18/01/2017 - 22:13
Здравствуйте, хочу применить nano для управления планшетом в авто, нашел готовый скетч на форуме PCCAR, переделал, что мог под себя, осталось сделать управление кнопкой питания планшета. Требуется, при появлении сигнала ACC высокого уровня на входе 2 , на цифровом выходе 9 с задержкой 10с появлялся высокий уровень на 3с и опять устанавливался низкий уровень, а при пропадании ACC на выходе 9 появлялся высокий уровень без задержки на 0,8с. Не пинайте начинающего, только второй день воюю с ардуиной.
////////Библиотеки//////// #include <Bounce.h> //устраняет дребезг кнопок #include <Timer.h> //Таймер ////////Входы//////// int ACC = 2; //Вход сигнала ACC int SWITCH = 3; ////////END Входы//////// ////////Выходы//////// int POWER = 8; // Включение планшета int USB = 10; // Включение USB хаба и OTG int ON = 9 int ACC_OUT = 11; ////////END Выходы//////// //Убираем дребезг Bounce ACCButton = Bounce(ACC, 50); //Убираем дребезг сигнала ACC Bounce SWITCHButton = Bounce(SWITCH, 50); //Убираем дребезг сигнала SWITCH ////////Переменные//////// int delayacc_out = 3000; //Задержка отключения сигнала ACC_OUT int delayPowerOnUSB = 15000; //Задержка включение USB (ms) int delayPowerOn = 300; //Задержка включения девайса int delaydispOff = 1; //Задержка выключения девайса (min) long delayPowerOffUSB = 2; //Задержка выключения USB (min) boolean powerOn = LOW; //Девайс вкл/выкл boolean pPowerOff = LOW; //Зажигание выключено, запущен таймер отключения ////////Таймеры//////// Timer timer; int powerOnTimer; //Таймер включения int powerOffTimer; //Таймер выключения int dispOffTimer; //Таймер выключения дисплея int usbOffTimer; //Таймер выключения переферии int usbOnTimer; //Таймер включения переферии int acc_outoffTimer; void setup() { pinMode(ACC, INPUT); pinMode(SWITCH, INPUT); pinMode(ACC_OUT, OUTPUT); //digitalWrite(ACC, HIGH); // подключить подтягивающий резистор digitalWrite(SWITCH, HIGH); // подключить подтягивающий резистор } void loop() { SWITCH_Control(); ACC_Control(); timer.update(); } void SWITCH_Control() { if ( SWITCHButton.update() ) { if ( SWITCHButton.read() == LOW) { digitalWrite(ACC_OUT, HIGH); } else { acc_outoffTimer = timer.after(delayacc_out, doAcc_outOff); //digitalWrite(ACC_OUT, HIGH); } } } void doAcc_outOff() { digitalWrite(ACC_OUT, LOW); } //Вкл/Выкл планшет при включении/выключении зажигания //При выключении задержка 3 секунды void ACC_Control() { if ( ACCButton.update() ) { if ( ACCButton.read() == HIGH) { if (boolean(powerOn) == LOW) { doPowerOn(); } else { pPowerOff = LOW; timer.stop(dispOffTimer); //Обнуляем таймер если снова включили зажигание } } if ( ACCButton.read() == LOW) { if (boolean(powerOn) == HIGH) { doPowerOff(1); pPowerOff = HIGH; } } } } //Включаем девайс void doPowerOn() { timer.stop(usbOffTimer); powerOn = HIGH; powerOnTimer = timer.after(delayPowerOn, doPeripheralsOn1); digitalWrite(POWER, HIGH); // включаем девайс usbOnTimer = timer.after(delayPowerOnUSB, doPeripheralsOn); } void doPeripheralsOn() { // digitalWrite(POWER, HIGH); digitalWrite(USB, HIGH); // включаем usbPower } void doPeripheralsOn1() { digitalWrite(POWER, HIGH); } //Выключаем девайс void doPowerOff(boolean arg) { timer.stop(powerOnTimer); if (arg == 1) { dispOffTimer = timer.after(delaydispOff * 60000, doDispOff); } else { doDispOff(); } } void doDispOff() { pPowerOff = LOW; powerOn = LOW; digitalWrite(POWER, LOW); // выключаем девайс usbOffTimer = timer.after(delayPowerOffUSB * 60000, doPeripheralsOff); } void doPeripheralsOff() { digitalWrite(USB, LOW); // выключаем usbPower }