проблесковые маяки

rk4alj
Offline
Зарегистрирован: 02.05.2016

здравствуйте. помогите пожалуйста исправить ошибки в коде.

int regim=1; 
 int flag=0; 

 void setup()   
 { 
    pinMode(10,OUTPUT);    
    pinMode(9,OUTPUT);    
       
 } 

 void loop() 

 { 
       
     if(digitalRead(14)==HIGH&&flag==0)
	 { 
       regim++;   
       flag=1; 
	   if(regim>4)
	   { 
          regim=1;
		    } 
       
     } 
       
      if(digitalRead(14)==LOW&&flag==1)
	  { 
          
        flag=0;
		 } 
	if(regim==1)
	{ 
      digitalWrite(9,HIGH);
	  delay(40);
	  digitalWrite(9,LOW);
	  delay(500);
	  digitalWrite(10,HIGH);
	  delay(40);
	  digitalWrite(10,LOW);
	} 
	if(regim==2)
	{ 
	  digitalWrite(9,HIGH);
	  delay(200);
      digitalWrite(9,LOW);
	  delay(500);
      digitalWrite(10,HIGH);
	  delay(200);
	  digitalWrite(10,LOW);
	} 
	if(regim==3)
	{
	  digitalWrite(9,HIGH);
	  delay(40);
	  digitalWrite(9,LOW);
	  delay(40);
	  digitalWrite(9,HIGH);
	  delay(40);
	  digitalWrite(9,LOW);
	  digitalWrite(10,HIGH);
	  delay(40);
	  digitalWrite(10,LOW);
	  delay(40);
	  digitalWrite(10,HIGH);
	  delay(40);
	  digitalWrite(10,LOW)
	  delay(40);
	}
	if(regim==4)
	{
	  digitalWrite(9,HIGH);
	  delay(40);
	  digitalWrite(9,LOW);
	  delay(40);
	  digitalWrite(9,HIGH);
	  delay(40);
	  digitalWrite(9,LOW);
	  delay(500);
	  digitalWrite(10,HIGH);
	  delay(40);
	  digitalWrite(10,LOW);
	  delay(40);
	  digitalWrite(10,HIGH);
	  delay(40);
	  digitalWrite(10,LOW)
	  delay(40);
	}
	
}

 

inspiritus
Offline
Зарегистрирован: 17.12.2012

Опишите пожалуйста как код должен работать и какова проблема?

а так с налета:

- вы читаете из 14 порта не проинициализировав его как вход

- внутри ифов я бы выделил скобками сравнения

- погасание между 57 и 60 строкой вы не заметите.

- вместо иф/режим я применил бы case.

rk4alj
Offline
Зарегистрирован: 02.05.2016

-при подаче питания, ни чего не происходит

-первое нажатие кнопки. включается первый режим короткие одиночные вспышки ,длит. 40мс )

-второе нажатие,длинные одиночные вспышки длит. 200мс

-третье нажатие, двойные вспышки без паузы длит. 40мс

-четвертое нажатие, двойные вспышки с паузой длит.40мс

Клапауций 232
Offline
Зарегистрирован: 05.04.2016
rk4alj
Offline
Зарегистрирован: 02.05.2016

дело в том, что я только начинаю осваивать все это и части кода взяты с разных источников

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

rk4alj пишет:

дело в том, что я только начинаю осваивать все это и части кода взяты с разных источников

просто заставь себя - прочитай и вникни в предложенную тему.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Например 14 строку можно заменить на

      if(DigitalRead(14)&&!flag)

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

в третьем режиме группы вспышек визуально слиплись: действие 59 строки Вы не заметите глазом.

флаги и режимы наверно можно убрать вообще: ждать первое нажатие играть первую группу и ловить  второе нажатия, при поступлении нажатия - играть втрую группу и ловить нажатие...

однако нажатия будут отлавливаться только на завершении каждой группы тк Вы применяете delay.  Вкуривайте титановый велосипед , предложенный выше.

rk4alj
Offline
Зарегистрирован: 02.05.2016

сижу вкуриваю и понять не могу

 

rk4alj
Offline
Зарегистрирован: 02.05.2016

inspiritus, если есть возможность написать начало кода до первого режима(не сочтите за наглость). напиши пожалуйста, а дальше я разберусь