improve commands queueing

This commit is contained in:
Nicu Hodos 2022-09-23 20:54:08 +02:00
parent dc7fa37793
commit cbdc5612fc
2 changed files with 18 additions and 20 deletions

View File

@ -16,25 +16,21 @@ namespace Ir {
Task tLoop(TASK_IMMEDIATE, TASK_FOREVER, loop, &ts, true); Task tLoop(TASK_IMMEDIATE, TASK_FOREVER, loop, &ts, true);
IRrecv irrecv(IR_INPUT_PIN); IRrecv irrecv(IR_INPUT_PIN);
decode_results results;
bool avrOn = false; bool avrOn = false;
uint8_t lastCommand = 0x9F; uint8_t readCommand() {
uint8_t lastCommand = 0;
bool readCommand() { decode_results results;
bool newCommand = false;
if (irrecv.decode(&results)) { if (irrecv.decode(&results)) {
if (results.decode_type == NEC && results.command != 0) { if (results.decode_type == NEC && results.command != 0) {
Serial.print(F(" C=0x")); Serial.print(F(" C=0x"));
Serial.print(results.command, HEX); Serial.print(results.command, HEX);
Serial.println(); Serial.println();
lastCommand = results.command; lastCommand = results.command;
Mqtt::commands.push(results.command);
newCommand = true;
} }
irrecv.resume(); // Receive the next value irrecv.resume(); // Receive the next value
} }
return newCommand; return lastCommand;
} }
void command(const char c[]) { void command(const char c[]) {
@ -45,42 +41,47 @@ namespace Ir {
} }
void loop() { void loop() {
if (readCommand()) { if (uint8_t lastCommand = readCommand()) {
switch (lastCommand) switch (lastCommand)
{ {
case 0x9F: case 0x9F:
avrOn = false; avrOn = false;
tCheckWifi.restartDelayed(); tCheckWifi.restartDelayed();
Display::displayText("Off"); Display::displayText("Off");
Mqtt::commands.push(lastCommand);
break; break;
case 0x12: case 0x12:
Display::displayText("Slp"); Display::displayText("Slp");
Mqtt::commands.push(lastCommand);
break; break;
case 0xC1: case 0xC1:
Display::displayText("Mute"); Display::displayText("Mute");
Mqtt::commands.push(lastCommand);
break; break;
case 0xC4: case 0xC4:
command("Play"); command("Play");
Mqtt::commands.push(lastCommand);
break; break;
case 0xC7: case 0xC7:
avrOn ? Display::displayText(" Up") : Display::changeBrightness(true); avrOn ? Display::displayText(" Up") : Display::changeBrightness(true);
Mqtt::commands.pop();
break; break;
case 0xC8: case 0xC8:
avrOn ? Display::displayText(" Dn") : Display::changeBrightness(false); avrOn ? Display::displayText(" Dn") : Display::changeBrightness(false);
Mqtt::commands.pop();
break; break;
case 0xD0: case 0xD0:
command("Stop"); command("Stop");
Mqtt::commands.push(lastCommand);
break; break;
case 0xC0: case 0xC0:
command("On"); command("On");
Mqtt::commands.push(lastCommand);
break; break;
case 0x84: case 0x84:
Display::displayTemp(Bmp::data.readTemp()); Display::displayTemp(Bmp::data.readTemp());
break; break;
default: default:
Display::displayValue(lastCommand); Display::displayValue(lastCommand);
Mqtt::commands.push(lastCommand);
break; break;
} }
} }

View File

@ -20,7 +20,7 @@ namespace Mqtt {
return queue.empty() ? 0 : queue.front(); return queue.empty() ? 0 : queue.front();
} }
void push(uint8_t el) { void push(uint8_t el) {
queue.push(el); if (client.connected()) queue.push(el);
} }
void pop() { void pop() {
queue.pop(); queue.pop();
@ -30,9 +30,8 @@ namespace Mqtt {
const char* bmpTopic = "esp_clock/sensor/bmp280/data"; const char* bmpTopic = "esp_clock/sensor/bmp280/data";
void publishCommand() { void publishCommand() {
if (!commands.queue.empty() && client.connected()) { if (uint8_t cmd = commands.getCurrent()) {
char message[32]; char message[32];
uint8_t cmd = commands.queue.front();
sprintf(message, "%X", cmd); sprintf(message, "%X", cmd);
if (client.publish(commands.topic, 0, true, message) != 0) { if (client.publish(commands.topic, 0, true, message) != 0) {
Serial.print(cmd, HEX); Serial.print(cmd, HEX);
@ -43,12 +42,10 @@ namespace Mqtt {
} }
void publishBmp280() { void publishBmp280() {
if (client.connected()) { Bmp::data.readAll();
Bmp::data.readAll(); char message[255];
char message[255]; sprintf(message, "{\"temperature\":%.2f, \"pressure\":%.2f, \"altitude\": %.2f}", Bmp::data.temp, Bmp::data.pressure, Bmp::data.altitude);
sprintf(message, "{\"temperature\":%.2f, \"pressure\":%.2f, \"altitude\": %.2f}", Bmp::data.temp, Bmp::data.pressure, Bmp::data.altitude); client.publish(bmpTopic, 0, true, message);
client.publish(bmpTopic, 0, true, message);
}
} }
void setup() { void setup() {