 
 decode_results results;
 
+//Struct que guarda infos do botao, no caso sobre o codigo IR que ele deve reproduzir quando apertado
+typedef struct Button_Info{
+    int codeType;// -1 should be the default
+    int toggle;  //0 should be the default; The RC5/6 toggle state
+    unsigned long codeValue; // The code value if not raw
+    unsigned int rawCodes[RAWBUF]; // The durations if raw
+    int codeLen; // The length of the code
+} Button_Info;
+
 //=====================
 //VARIAVEIS GLOBAIS
 //=====================
-int ultimo_botao_press = FIRST_BUTTON_PIN; //por default o ultimo botao pressionado vai ser o primeiro
+int last_pressed_button = 0; //por default o ultimo botao pressionado vai ser o primeiro
+
+Button_Info button_one = { -1, 0 };// inicializando codeType =-1 e toggle=0;
+
+//lista dos botoes
+Button_Info buttons_list[1] = { button_one };
+
 //=====================
 //VARIAVEIS GLOBAIS - FIM
 //=====================

            return;
        }
    }
    else if (codeType == SONY)
    {
        Serial.print("Received SONY: ");
    }
    else if (codeType == RC5)
    {
        Serial.print("Received RC5: ");
    }
    else if (codeType == RC6)
    {
        Serial.print("Received RC6: ");
    }
    else
    {
        Serial.print("Unexpected codeType ");
        Serial.print(codeType, DEC);
        Serial.println("");
    }
}

void sendCode(int repeat)
{
    if (codeType == NEC)
    {
        sendCodeNec(repeat);
    }
    else if (codeType == SONY)
    {
        sendCodeSony();
    }
    else if (codeType == RC5 || codeType == RC6)
    {
        sendCodeRC5orRC6(repeat);
    }
    else if (codeType == UNKNOWN /* i.e. raw */)
    {
        // Assume 38 KHz
        sendCodeUnknow();
    }
}
void sendCodeNec(int repeat)
{

    if (repeat)
    {
        irsend.sendNEC(REPEAT, codeLen);
        Serial.println("Sent NEC repeat");
    }
    else
    {
        irsend.sendNEC(codeValue, codeLen);
        Serial.print("Sent NEC ");
        Serial.println(codeValue, HEX);
    }

}
void sendCodeSony()
{
    irsend.sendSony(codeValue, codeLen);
    Serial.print("Sent Sony ");
    Serial.println(codeValue, HEX);
}
void sendCodeRC5orRC6(int repeat)
{
    if (!repeat)
    {
        // Flip the toggle bit for a new button press
        toggle = 1 - toggle;
    }
    // Put the toggle bit into the code to send
    codeValue = codeValue & ~(1 << (codeLen - 1));
    codeValue = codeValue | (toggle << (codeLen - 1));
    if (codeType == RC5)
    {
        Serial.print("Sent RC5 ");
        Serial.println(codeValue, HEX);
        irsend.sendRC5(codeValue, codeLen);
    }
    else
    {
        irsend.sendRC6(codeValue, codeLen);
        Serial.print("Sent RC6 ");
        Serial.println(codeValue, HEX);
    }
}

void sendCodeUnknow()
{
    irsend.sendRaw(rawCodes, codeLen, 38);
    Serial.println("Sent raw");
}



    if (firstButtonState)
    {
        last_pressed_button = 0; //marca o primeiro botao como sendo o pressionado
        Serial.println("Pressed, sending");
        digitalWrite(STATUS_PIN, HIGH);
        sendCode(lastButtonState == firstButtonState, last_pressed_button);
        digitalWrite(STATUS_PIN, LOW);
        delay(50); // Wait a bit between retransmissions
    }
    else if (irrecv.decode(&results))
    {
        digitalWrite(STATUS_PIN, HIGH);
        storeCode(&results, last_pressed_button);
        irrecv.resume(); // resume receiver
        digitalWrite(STATUS_PIN, LOW);
    }
