01-06-2017, 19:32
(Ten post był ostatnio modyfikowany: 01-06-2017, 20:05 przez Robson Kerman.)
Pętla WHILE ma taką konstrukcję, że dopóki warunek w nawiasach jest spełniony, to będzie ona wykonywać instrukcję, lub blok instrukcji umieszczonych w klamrach.
To znaczy, w twoim kodzie, dopóki results.value==0x9716BE3F
wykonuj funkcję prgram1();
Czyli suma summarum, te funkcje nie muszą wykonać się ani razu, bo jeśli warunek nie jest spełniony, to program przeskakuje do następnej instrukcji.
Mi chodziło o to, że jak już przeskoczysz z bloku
do funkcji, powiedzmy program1(); to możesz ją sobie zapętlić dopóki nie naciśniesz klawisza na pilocie.
Mniej więcej coś takiego:
Nie wiem czy negacja results zadziała, bo nie znam tej biblioteki, ale widać na tym przykładzie sens mojego wywodu.
To znaczy, w twoim kodzie, dopóki results.value==0x9716BE3F
wykonuj funkcję prgram1();
Czyli suma summarum, te funkcje nie muszą wykonać się ani razu, bo jeśli warunek nie jest spełniony, to program przeskakuje do następnej instrukcji.
Mi chodziło o to, że jak już przeskoczysz z bloku
Kod:
if (irrecv.decode(&results)) //odbieranie danych przez odbirnika
{
if(results.value==0x9716BE3F)program1();
if(results.value==0x3D9AE3F7) program2();
if(results.value==0x6182021B) program3();
irrecv.resume(); //resetowanuie odbiornika
}
}
do funkcji, powiedzmy program1(); to możesz ją sobie zapętlić dopóki nie naciśniesz klawisza na pilocie.
Mniej więcej coś takiego:
Kod:
void program1()
{
while(irrecv.decode(!results))
{
expander2.digitalWrite(5, LOW);
expander1.digitalWrite(6, LOW);
expander0.digitalWrite(7, LOW);
expander0.digitalWrite(0, LOW);
delay(50);
expander1.digitalWrite(7, LOW);
expander1.digitalWrite(0, LOW);
expander0.digitalWrite(1, LOW);
delay(50);}
}
break;
}
Nie wiem czy negacja results zadziała, bo nie znam tej biblioteki, ale widać na tym przykładzie sens mojego wywodu.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.