Всем привет. Собираю на Ардуино свой контроллер блока питания, но вышла небольшая заминка в скетче ( ну не бог я программирования
) Алгоритм блока очень простой - при заводке двигателя ждем N сек, жмем кнопку компа, ждем M сек, контроль выходного напряжения, включаем усилок - считаем, что комп включен. Если машину заглушили, гасим экран/усилок, ждем ~15..20 мин, жмем кнопку компа, ждем X сек для завершения работы системы. Вот заминка вышла в эти 15..20 минут, хочется сделать так, если в течении этого времени ,допустим я вернулся в машину, останавливалась подпрограммма выключения компа,включался монитор и усилок.По идее нужно использовать прерывание, а вот куда его в код добавлять, не соображу
PHP код:
#define acc 4
#define pw_12v 5
#define btn_on 6
#define amp 7
#define WORK 0
#define OFF 1
int State = 0;
int acc_status;
int mode;
void setup()
{
Serial.begin(9600);
pinMode(acc, INPUT);
pinMode(pw_12v, OUTPUT);
pinMode(btn_on, OUTPUT);
pinMode(amp, OUTPUT);
mode = WORK;
acc_status = 0;
}
void loop()
{
switch(mode)
{
case WORK:
workLoop();
break;
case OFF:
offLoop();
break;
}
}
void workLoop()
{
delay(300);
State = digitalRead(acc);
if (State == HIGH)
{
if (acc_status==0)
{
acc_status=1;
delay(5000); //задержка на заводку двигателя - 5 сек.
digitalWrite(pw_12v, HIGH);
delay(1000);
digitalWrite(btn_on, HIGH);
delay(1000);
digitalWrite(btn_on, LOW);
delay(40000); //задержка включения усилителя - 40 сек.
digitalWrite(amp, HIGH);
}
else
{
digitalWrite(pw_12v, HIGH);
digitalWrite(amp, HIGH);
}
}
else
{
if (acc_status ==0)
{
digitalWrite(amp, LOW);
digitalWrite(pw_12v, LOW);
}
else
{
digitalWrite(amp, LOW);
mode = OFF;
}
}
delay(10);
}
void offLoop()
{
delay(300);
for(int timeOut =0;timeOut <= 900; timeOut++) // "timeOut <= 900" задержка спящего режима, в данном случае - 15 минут
{
State = digitalRead(acc);
if(State == LOW)
{
delay(1000);
}
else
{
mode = WORK;
timeOut=5000;
}
}
if(State==LOW)
{
acc_status=0;
digitalWrite(btn_on, HIGH); //
delay(1000); // жмем кнопку питания
digitalWrite(btn_on, LOW); //
delay(30000); //задержка для корректного завершения работы - 30 сек.
mode = WORK;
}
}