#define DECODE_NEC         
#include <Arduino.h>
#include "PinDefinitionsAndMore.h"
#include <IRremote.hpp> // include the library

int EN = 9;
int motor1pin1 = 4;
int motor1pin2 = 5;

void setup() {
    Serial.begin(115200);
    pinMode(motor1pin1, OUTPUT);
    pinMode(motor1pin2, OUTPUT);
    pinMode(EN, OUTPUT); // Added to set the EN pin as output

    Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE));
    // Start the receiver 
    IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);

    Serial.print(F("Ready to receive IR signals of protocols: "));
    printActiveIRProtocols(&Serial);
    Serial.println(F("at pin " STR(IR_RECEIVE_PIN)));
}

void loop() {
    if (IrReceiver.decode()) {
        
         // Print a short summary of received data
        IrReceiver.printIRResultShort(&Serial);
        IrReceiver.printIRSendUsage(&Serial);
        if (IrReceiver.decodedIRData.protocol == UNKNOWN) {
            Serial.println(F("Received noise or an unknown (or not yet enabled) protocol"));
            IrReceiver.printIRResultRawFormatted(&Serial, true);
        }
        Serial.println();
        IrReceiver.resume(); 
        
        // Enable receiving of the next value
        // Control the motor based on the received IR command
        if (IrReceiver.decodedIRData.command == 0x44) {
            // Rotate motor clockwise
            digitalWrite(motor1pin1, LOW);
            digitalWrite(motor1pin2, HIGH);
            analogWrite(EN, 200);

        } else if (IrReceiver.decodedIRData.command == 0x40) {
            // Rotate motor counterclockwise
            digitalWrite(motor1pin1, HIGH);
            digitalWrite(motor1pin2, LOW);
            analogWrite(EN, 200);

        }
        else if (IrReceiver.decodedIRData.command == 0x43) {
            // Rotate motor counterclockwise
            digitalWrite(motor1pin1, HIGH);
            digitalWrite(motor1pin2, LOW);
            analogWrite(EN, 0);

        }
    }
}
