diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..93b3d6a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,17 @@ +{ + "files.associations": { + "array": "cpp", + "*.tcc": "cpp", + "string": "cpp", + "vector": "cpp", + "string_view": "cpp", + "functional": "cpp", + "iomanip": "cpp", + "istream": "cpp", + "limits": "cpp", + "ostream": "cpp", + "ratio": "cpp", + "sstream": "cpp", + "streambuf": "cpp" + } +} \ No newline at end of file diff --git a/platformio.ini b/platformio.ini index 4f4e156..6786f48 100644 --- a/platformio.ini +++ b/platformio.ini @@ -13,3 +13,4 @@ platform = espressif32 board = esp32doit-devkit-v1 framework = arduino monitor_speed = 115200 +lib_deps = bblanchon/ArduinoJson@^7.3.1 diff --git a/src/main.cpp b/src/main.cpp index 7046e7c..4dedce9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,73 +1,89 @@ #include -const int IR_SEND_PIN = 12; // GPIO12 for the IR LED +#include +const int IR_SEND_PIN = 12; +const int IR_RECEIVE_PIN = 14; +const int CONTROL_LED_PIN = 13; #include #include "BluetoothSerial.h" BluetoothSerial SerialBT; -const int ReceiverPin = 14; // GPIO14 for the IR receiver (TSOP48) -const int LedPin = 13; // GPIO13 for the external LED +void handleIncomingSerialBTData(void *pvParameters); +void handleIncomingIRSignals(void *pvParameters); -IRData data; - - -// put function declarations here: -int myFunction(int, int); -void parallelLoop(void *pvParameters); -void handleSerialBT(void *pvParameters); +void sendDataBT(String data); void setup() { - Serial.begin(115200); // Start the serial communication + Serial.begin(115200); // Start the serial communication SerialBT.begin("ESP32"); - pinMode(LedPin, OUTPUT); // Set LED pin as output + pinMode(CONTROL_LED_PIN, OUTPUT); // Set LED pin as output pinMode(IR_SEND_PIN, OUTPUT); // Set IR LED pin as output - IrReceiver.begin(ReceiverPin, DISABLE_LED_FEEDBACK); // Initialize the IR receiver + IrReceiver.begin(IR_RECEIVE_PIN, DISABLE_LED_FEEDBACK); // Initialize the IR receiver + IrSender.begin(IR_SEND_PIN); // Initialize the IR sender Serial.println("IR Receiver Ready!"); - xTaskCreate(parallelLoop, "parallelLoop", 2048, NULL, 1, NULL); // Create a task for parallel loop - xTaskCreate(handleSerialBT, "handleSerialBT", 2048, NULL, 1, NULL); // Create a task for serial BT communication + + xTaskCreate(handleIncomingSerialBTData, "handleIncomingSerialBTData", 2048, NULL, 1, NULL); + xTaskCreate(handleIncomingIRSignals, "handleIncomingIRSignals", 2048, NULL, 1, NULL); } void loop() { - if (IrReceiver.decode()) - { // Check if IR signal is received - IrReceiver.printIRResultShort(&Serial); // Print IR signal details to Serial Monitor - data = IrReceiver.decodedIRData; - digitalWrite(LedPin, HIGH); // Turn on the LED - delay(200); // Keep LED on for 200ms - digitalWrite(LedPin, LOW); // Turn off the LED - IrReceiver.resume(); // Prepare to receive the next IR signal - } + delay(200); } -void parallelLoop(void *pvParameters) +void handleIncomingIRSignals(void *pvParameters) { while (true) { - delay(5000); - digitalWrite(IR_SEND_PIN, HIGH); - delay(5000); - digitalWrite(IR_SEND_PIN, LOW); + if (IrReceiver.decode()) + { + IRData data; + data = IrReceiver.decodedIRData; + IrReceiver.printIRResultShort(&Serial, &data, false); + digitalWrite(CONTROL_LED_PIN, HIGH); + delay(200); + digitalWrite(CONTROL_LED_PIN, LOW); + IrReceiver.resume(); + } } } -void handleSerialBT(void *pvParameters) +void handleIncomingSerialBTData(void *pvParameters) { while (true) { - if (Serial.available()) { - SerialBT.write(Serial.read()); - } - if (SerialBT.available()) { - Serial.write(SerialBT.read()); - } - delay(25); + String data = ""; + while (SerialBT.available()) + { + char c = SerialBT.read(); + data.concat(c); + } + if (data != "") + { + Serial.println(data); + + JsonDocument doc; + deserializeJson(doc, data); + String protocol = doc["protocol"]; + int address = doc["address"]; + int command = doc["command"]; + + digitalWrite(CONTROL_LED_PIN, HIGH); + if (protocol == "samsung") { + + IrSender.sendSamsung(address, command, 4); + } + digitalWrite(CONTROL_LED_PIN, LOW); + } + delay(25); } } -// put function definitions here: -int myFunction(int x, int y) +void sendDataBT(String data) { - return x + y; + uint8_t buf[data.length()]; + memcpy(buf, data.c_str(), data.length()); + SerialBT.write(buf, data.length()); + SerialBT.println(); } \ No newline at end of file