problema no ir remote

este projeto so tem dois problema que eu nao consigo conseta por conta propia. este coidigo so fusiona "ben" quando o serial.println(botao) esta no codigo,

segundo problema e quando o serial.println(botao) esta no codigo, uma vez que o
fase TV = 1 ele ativa mas nao e possível desativar depois.

voce pode me ajuda, eu acho que tem haver com a velocidade quer o codigo fuciona

void tv(){

Serial.println(botao);
byte botao;

if (irrecv.decode(&results)) {
long int decCode = results.value;

switch (faseTV){
case 1:

if(results.value == sair){
modo = 1;
botao = 0;
faseTV = 0;
}

switch (results.value){
case (ok):
botao = 1;
break;
case (esquerda):
botao = 2;
break;
case (direita):
botao = 3;
break;
case (cimar):
botao = 4;
break;
case (baixo):
botao = 5;
break;
case (configL):
botao = 6;
break;
case (X):
botao = 7;
}

switch (botao){
case 1:
for (int i = 0; i < 4; i++) {
irsend.sendNEC(okLG, 32);
botao = 0;
}
break;
case 2:
for (int i = 0; i < 4; i++) {
irsend.sendNEC(esquerdaLG, 32);
botao = 0;
}
break;
case 3:
for (int i = 0; i < 4; i++) {
irsend.sendNEC(direitaLG, 32);
botao = 0;
}
break;
case 4:
for (int i = 0; i < 4; i++) {
irsend.sendNEC(cimarLG, 32);
botao = 0;
}
break;
case 5:
for (int i = 0; i < 4; i++) {
irsend.sendNEC(baixoLG, 32);
botao = 0;
}
break;
case 6:
for (int i = 0; i < 4; i++) {
irsend.sendNEC(configLG, 32);
botao = 0;
}
break;
case 7:
for (int i = 0; i < 4; i++) {
irsend.sendNEC(sairLG, 32);
botao = 0;
}
break;
}

irrecv.enableIRIn();
irrecv.resume(); //esta instrução pode até ser desnecessária...

break;
}

}
}

este projeto só tem dois problema que eu não consigo conserta por conta própria. este código só fusiona "Ben" quando o serial.println(botao) esta no código,

segundo problema e quando o serial.println(botao) esta no código, uma vez que o
fase TV = 1 ele ativa mas não e possível desativar depois.

você pode me ajuda? eu acho que tem haver com a velocidade quer o código fusiona.

void tv(){
Serial.println(botao);
byte botao;
if (irrecv.decode(&results)) {
long int decCode = results.value;

switch (faseTV){
case 1:

if(results.value == sair){
modo = 1;
botao = 0;
faseTV = 0;
}

switch (results.value){
case (ok):
botao = 1;
break;
case (esquerda):
botao = 2;
break;
case (direita):
botao = 3;
break;
case (cimar):
botao = 4;
break;
case (baixo):
botao = 5;
break;
case (configL):
botao = 6;
break;
case (X):
botao = 7;
}

switch (botao){
case 1:
for (int i = 0; i < 4; i++) {
irsend.sendNEC(okLG, 32);
botao = 0;
}
break;
case 2:
for (int i = 0; i < 4; i++) {
irsend.sendNEC(esquerdaLG, 32);
botao = 0;
}
break;
case 3:
for (int i = 0; i < 4; i++) {
irsend.sendNEC(direitaLG, 32);
botao = 0;
}
break;
case 4:
for (int i = 0; i < 4; i++) {
irsend.sendNEC(cimarLG, 32);
botao = 0;
}
break;
case 5:
for (int i = 0; i < 4; i++) {
irsend.sendNEC(baixoLG, 32);
botao = 0;
}
break;
case 6:
for (int i = 0; i < 4; i++) {
irsend.sendNEC(configLG, 32);
botao = 0;
}
break;
case 7:
for (int i = 0; i < 4; i++) {
irsend.sendNEC(sairLG, 32);
botao = 0;
}
break;
}

irrecv.enableIRIn();
irrecv.resume(); //esta instrução pode até ser desnecessária...

break;
}

}
}

O que pode acontecer o seguinte:
quando você coloca no código if()... ele entende que se essa condição for verdadeira, lembrando que ele faz muitos, muitos ciclos por segundo, tenta usar o while ao invés de if, pois o while diz que que enquato for verdade, ele só faz isso!

não fusiona, mais eu tenho um novo código, dar uma olhada como eu uso o serial Priante para fazer fusiona, não faz sentido este código fusiona pra min. para fazer ele desativa, tenho quer desliga o serial Priante primeiro, muito estranho. o problema quer só existe código como este antigo quer não fusiona mais. sou novo na aria e foi muito edifício fazer este código só quer entender porque este código e precisa do serial Priante.

void tv(){
if(faseTV == 1){
Serial.println(faseTV); // os comado ir so fusiona apena se este serial printe fusiona.
}

if (irrecv.decode(&results)) {
long int decCode = results.value;

switch (faseTV){
case 1:

if(results.value == sair){
modo = 1;
faseTV = 0;
}

switch (results.value){
case (ok):

for (int i = 0; i < 4; i++) {
irsend.sendNEC(okLG, 32);
}
break;
case (esquerda):
for (int i = 0; i < 4; i++) {
irsend.sendNEC(esquerdaLG, 32);

}
break;
case (direita):
for (int i = 0; i < 4; i++) {
irsend.sendNEC(direitaLG, 32);

}
break;
case (cimar):
for (int i = 0; i < 4; i++) {
irsend.sendNEC(cimarLG, 32);

}
break;
case (baixo):
for (int i = 0; i < 4; i++) {
irsend.sendNEC(baixoLG, 32);

}
break;
case (configL):
for (int i = 0; i < 4; i++) {
irsend.sendNEC(configLG, 32);

}
break;
case (X):
for (int i = 0; i < 4; i++) {
irsend.sendNEC(sairLG, 32);

}
}
irrecv.enableIRIn();
irrecv.resume();

break;
}

}
}

novo código, este aki fusiona perfeitamente, foi eu que fiz mais não entendo o pra quer deve ser usado o serial printe neste código, será quer precisa de algum timer? em fim vou deixa este código aki paras pessoas novatas como eu, já quer não achei mais nenhum código come este.

void tv(){
if(faseTV == 1){
Serial.println(faseTV);
}
if (irrecv.decode(&results)) {

if(results.value == sair){
modo = 1;
faseTV = 0;
}
long int decCode = results.value;

switch (faseTV){
case 1:

switch (results.value){
case (ok):

for (int i = 0; i < 4; i++) {
irsend.sendNEC(okLG, 32);
}
break;
case (esquerda):
for (int i = 0; i < 4; i++) {
irsend.sendNEC(esquerdaLG, 32);

}
break;
case (direita):
for (int i = 0; i < 4; i++) {
irsend.sendNEC(direitaLG, 32);

}
break;
case (cimar):
for (int i = 0; i < 4; i++) {
irsend.sendNEC(cimarLG, 32);

}
break;
case (baixo):
for (int i = 0; i < 4; i++) {
irsend.sendNEC(baixoLG, 32);

}
break;
case (configL):
for (int i = 0; i < 4; i++) {
irsend.sendNEC(configLG, 32);

}
break;
case (X):
for (int i = 0; i < 4; i++) {
irsend.sendNEC(sairLG, 32);

}
}
irrecv.enableIRIn();
irrecv.resume();

break;
}

}
}

Amigo, estou com um problema parecido mas não consigo ajuda, preciso que o Arduíno receba um sinal IR da TV e em seguida ele é pra enviar um sinal IR que decodifiquei do som, ou seja, quero controlar o som pelo controle da TV... O Arduino vai servir como um conversor de sinal IR...