commit b14746c0b247db45dcb478d0d7aac4cf16eba363 Author: Michael Clemens // DK1MI Date: Thu Feb 1 23:39:25 2024 +0000 hygain-ir-controller.ino hinzugefĆ¼gt diff --git a/hygain-ir-controller.ino b/hygain-ir-controller.ino new file mode 100644 index 0000000..bc4f1c7 --- /dev/null +++ b/hygain-ir-controller.ino @@ -0,0 +1,232 @@ +// Libraries +#include +#include +#include +#include + +byte SEND_PIN = 4; +IRsend irsend(SEND_PIN); + +// WiFi network +const char* ssid = "xxxxxxxxxxxx"; +const char* password = "xxxxxxxxxxxx"; + +AsyncWebServer server(80); + +const char* input_heading = "heading"; + +char headingmap[360]; + +const uint16_t IRCodes[] = { + 0x44, // A + 0x7, // B + 0x9, // C + 0x40, // D + 0x19, // E + 0x16, // F + 0xC, // G + 0x18, // H + 0x5E, // I + 0x8, // J + 0x1C, // K -> U + 0x5A // L +}; + + +// rotate CCW: 0x43 +// rotate CW: 0x45 +// initial: 0x42 +// memory: 0x4A + +/* +const char index_html[] PROGMEM = R"rawliteral( + + Hy-Gain AR-500X + + + +

HyGain AR-500X

+
+ Enter new Heading: + +

+)rawliteral"; +*/ + +const char index_html[] PROGMEM = R"rawliteral( + + + + + +Hy-Gain AR-500X + + + +

HyGain AR-500X

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
N
WE
S
+ +

+ +)rawliteral"; + + +void notFound(AsyncWebServerRequest *request) { + request->send(404, "text/plain", "Not found"); +} + + +// Function to get value by key +const uint16_t getValueByKey(char key) { + // Convert key to uppercase for consistency + key = toupper(key); + + // Calculate index + int index = key - 'A'; + + // Return value at index + return IRCodes[index]; +} + + +int extractValidHeading(String inputString) { + int foundNumber = -1; // Default value if no valid number is found + + // Loop through each character in the string + for (int i = 0; i < inputString.length(); i++) { + // Check if the current character is a digit + if (isdigit(inputString.charAt(i))) { + // Parse the number starting from this position + foundNumber = inputString.substring(i).toInt(); + + // Check if the parsed number is within the valid range (0-360) + if (foundNumber >= 0 && foundNumber <= 360) { + return foundNumber; // Return the valid number + } else { + return -1; // Return -1 if the number is outside the valid range + } + } + } + return foundNumber; // Return -1 if no number is found in the string +} + + +void setup() { + + // Start serial + Serial.begin(9600); + delay(10); + + // Connecting to a WiFi network + Serial.println(); + Serial.println(); + Serial.print("Connecting to "); + Serial.println(ssid); + + WiFi.begin(ssid, password); + + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + + Serial.println(""); + Serial.println("WiFi connected"); + Serial.println("IP address: "); + Serial.println(WiFi.localIP()); + + + // Fill the array + char currentChar = 'A'; + for (int i = 0; i < 360; i++) { + headingmap[i] = currentChar; + if ((i + 1) % 15 == 0) { + currentChar++; + if (currentChar > 'L') + currentChar = 'A'; + } + } + + + Serial.println("OK"); + + server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ + request->send_P(200, "text/html", index_html); + }); + + server.on("/get", HTTP_GET, [] (AsyncWebServerRequest *request) { + String input_message; + String input_parameter; + + if (request->hasParam(input_heading)) { + input_message = request->getParam(input_heading)->value(); + input_parameter = input_heading; + } + else { + input_message = "No message sent"; + input_parameter = "none"; + } + Serial.println(input_message); + uint16_t val = getValueByKey(input_message[0]); + Serial.println("IR Code: " + String(val)); + irsend.sendNEC(0x0, val, 2); + delay(500); + request->send_P(200, "text/html", index_html); + }); + server.onNotFound(notFound); + server.begin(); + +} + +void loop() { + +} \ No newline at end of file