Вопрос по прерыванию

bit
Offline
Зарегистрирован: 07.05.2012

Привет всем , собрал устройства для управления ходовыми огнями на шесть входов вроде бы всё работает но есть одно но когда включаешь поворот ходовой огонь с нужной стороны гаснет и начинает мигать в месте с поворотом , а нужно чтобы он просто погас и когда поворот выключил он загорелся, нужен какой та  таймер пока поворот мигает он сбрасывается, а когда его выключили таймер отработался и включил ходовой огонь.

 

Подскажите пожалуйста как это сделать чтобы пока подворотник мигает флаг не включался или как не будь ещё?

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; 
 } 
 }
 
 
 

}





 

 

maksim
Offline
Зарегистрирован: 12.02.2012
bit
Offline
Зарегистрирован: 07.05.2012

Спасибо за подсказку 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);