Вопрос по прерыванию
- Войдите на сайт для отправки комментариев
Втр, 24/09/2013 - 13:10
Привет всем , собрал устройства для управления ходовыми огнями на шесть входов вроде бы всё работает но есть одно но когда включаешь поворот ходовой огонь с нужной стороны гаснет и начинает мигать в месте с поворотом , а нужно чтобы он просто погас и когда поворот выключил он загорелся, нужен какой та таймер пока поворот мигает он сбрасывается, а когда его выключили таймер отработался и включил ходовой огонь.
Подскажите пожалуйста как это сделать чтобы пока подворотник мигает флаг не включался или как не будь ещё?
int LED_L1 = 5;
int LED_L2 = 6;
int LED_R1 = 11;
int LED_R2 = 10;
int PovorotL = 4;
int PovorotR = 8;
int Drive = 7;
int Signal = 9;
int Svet = 12;
int Goborit = 13;
int flag=1;
int flag2=0;
int flag3=1;
int flag5=1;
int value = 0;
int value2 = 0;
void setup()
{
pinMode(LED_L1, OUTPUT);
pinMode(LED_L2, OUTPUT);
pinMode(LED_R1, OUTPUT);
pinMode(LED_R1, OUTPUT);
pinMode(PovorotL, INPUT);
pinMode(PovorotR, INPUT); ;
pinMode(Drive, INPUT);
pinMode(Signal, INPUT);
pinMode(Svet, INPUT);
pinMode(Goborit, INPUT);
}
void loop()
{
///////////////// Включим драйв плавно зажигаем ходовые огни
if(digitalRead(Drive)==HIGH&&flag2==0)
{
for(value = 0 ; value <= 255; value+=5)
{
analogWrite(LED_L1, value);
analogWrite(LED_L2, value);
analogWrite(LED_R1, value);
analogWrite(LED_R2, value);
delay(30);
}
flag2=1;
}
////////////Выключим драйв плавно гасим ходовые огни
if(digitalRead(Drive)==LOW&&flag2==1)
{
for(value = 255; value >=0; value-=5)
{
analogWrite(LED_L1, value);
analogWrite(LED_L2, value);
analogWrite(LED_R1, value);
analogWrite(LED_R2, value);
delay(30);
}
flag2=0;
}
////////////Если включен драйв и включен левы поворот то гасим левы ходовой огонь
if(digitalRead(Drive)==HIGH)
{
if(digitalRead(PovorotL)==HIGH&&flag==1)
{
for(value = 255; value >=0; value-=5)
{
analogWrite(LED_L1, value);
analogWrite(LED_L2, value);
delay(3);
}
flag=0;
}
}
////// Если включен драйв и выключен левы поворот то зажигаем левый ходовой огонь
if(digitalRead(Drive)==HIGH)
{
if(digitalRead(PovorotL)==LOW&&flag==0)
{
for(value = 0 ; value <= 255; value+=5)
{
analogWrite(LED_L1, value);
analogWrite(LED_L2, value);
delay(30);
}
flag=1;
}
}
/////////////////Если включен драйв и включен правый поворот то гасим правый ходовой огонь
if(digitalRead(Drive)==HIGH)
{
if(digitalRead(PovorotR)==HIGH&&flag3==1)
{
for(value = 255; value >=0; value-=5)
{
analogWrite(LED_R1, value);
analogWrite(LED_R2, value);
delay(3);
}
flag3=0;
}
}
//////Если включен драйв и выключен правый поворот то зажигаем правый ходовой огонь
if(digitalRead(Drive)==HIGH)
{
if(digitalRead(PovorotR)==LOW&&flag3==0)
{
for(value = 0 ; value <= 255; value+=5)
{
analogWrite(LED_R1, value);
analogWrite(LED_R2, value);
delay(30);
}
flag3=1;
}
}
}
http://arduino.ru/forum/programmirovanie/pomogite-s-simpletimer#comment-41203
Спасибо за подсказку maksim всё получилась
static uint32_t millis_start = 0; if(digitalRead(Knop)==HIGH&&flag2==1) { digitalWrite(Led, LOW); delay(100); flag2=0; } if(digitalRead(Knop)==HIGH&&flag2==0) millis_start = millis(); delay(30); if(millis_start && millis()-millis_start >= 900) { millis_start = 0; digitalWrite(Led, HIGH);