Доброй ночи. Делаю полицейскую мигалку на arduino. Все подключил, набросал простенький код:
Код#include <IRremoteInt.h>
#include <IRremote.h>
#include <boarddefs.h>
#include <ir_Lego_PF_BitStreamEncoder.h>
IRrecv irrecv(4);
int ledGreen1 = 2;
int ledRed1 = 3;
int w = 50;
decode_results results;
void setup() {
irrecv.enableIRIn();
pinMode(ledGreen1,OUTPUT);
pinMode(ledRed1,OUTPUT);
}
void loop() {
// digitalWrite(led,HIGH);
// delay(100);
// digitalWrite(led,LOW);
// delay(100);
//modeBlinkRed();
if(irrecv.decode(&results))
{
switch(results.value)
{
case 0xFFB24D:
modeBlinkRed();
break;
case 0xFF6897:
modeBlinkGreen();
break;
case 0xFF2AD5:
modeBlinkAll();
break;
}
irrecv.resume();
}
}
void modeBlinkGreen()
{
for(int i=0;i<6;i++)
{
blinkGreen();
}
delay(1000);
}
void modeBlinkRed()
{
for(int i=0;i<6;i++)
{
blinkRed();
}
delay(1000);
}
void modeBlinkAll()
{
for(int i=0;i<5;i++)
{
blinkGreen();
}
for (int i=0;i<5;i++)
{
blinkRed();
}
}
void blinkGreen()
{
digitalWrite(ledGreen1,HIGH);
delay(w);
digitalWrite(ledGreen1,LOW);
delay(w);
}
void blinkRed()
{
digitalWrite(ledRed1,HIGH);
delay(w);
digitalWrite(ledRed1,LOW);
delay(w);
}
Столкнулся с такой проблемой здесь:
void loop() {
if(irrecv.decode(&results))
{
switch(results.value)
{
case 0xFFB24D:
modeBlinkRed();
break;
case 0xFF6897:
modeBlinkGreen();
break;
case 0xFF2AD5:
modeBlinkAll();
break;
}
irrecv.resume();
}
}
Если я нажимаю первую кнопку, выполняется функция modeBlinkRed(), вторую - modeBlinkGreen(), третью - modeBlinkAll(). Проблема в том, что функция выполняется только один раз, а мне нужно, что-бы функция выполнялась в цикле, пока не будет нажата другая кнопка на пульте( то есть не будет выбран другой режим).
Догадываюсь, что здесь решение простое, но в голове что-то ничего не приходит, поздно наверное уже)
PS: На переменную w не обращайте внимание, это что-бы быстро настроить частоту мигания.
PS2: Знаю что в полицейских синие, или синие и красные мигалки, просто синего светодиода под рукой не было)