Помогите начинающему допилить скетч
- Войдите на сайт для отправки комментариев
Ср, 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
}