Stap 13: De software voor de ESP8266 module - deel 4 "verschillende airco communicatie"
Meeste airco fabrikant gebruikt verschillende soorten opdrachten. Voor mij ik onderzocht hoe de IR-opdrachten worden overgedragen voor twee fabrikanten, FujiDenzo en vervoerder.
FujiDenzo airco:
- Elke opdracht bestaat uit 67 waarden van kopteksten, tekens en spaties.
- Dezelfde code wordt zelfs als een knop is ingedrukt herhaaldelijk verstuurd.
- Elke code wordt verzonden slechts eenmaal een knop is ingedrukt
Vervoerder:
- Elke opdracht bestaat uit 51 waarden van kopteksten, tekens en spaties.
- Elke opdracht heeft drie verschillende sets van IR pulsen.
- Als een knop wordt ingedrukt herhaaldelijk, is de code doorlopen van de drie verschillende sets van IR pulsen.
- Elke code is drie keer verzonden zodra een knop is ingedrukt.
Deze verschillen moeten worden weerspiegeld in de verschillende versies van de software.
De verschillende IR-pulsen worden opgeslagen in de bestanden IR-FujDenzo_0_Codes.ino en IR-Carrier_0_Codes.ino
De software voor de vervoerder airco heeft een teller die wordt gebruikt om te weten welke van de drie sets van IR pulsen moet worden gebruikt en een variabele te controleren of een opdracht moet worden herhaald.
/** Last processed command (from lan or serial connection) */ int lastCmd = 99; /** Counter to check if command is repeated */ byte cmdCnt = -1;
De routine chkCmdCnt() wordt gecontroleerd als een opdracht wordt herhaald en de teller cndCnt eventueel wijzigen
void chkCmdCnt() {<br> if (irCmd == lastCmd) { cmdCnt ++; if (cmdCnt == 3) { cmdCnt = 0; } } else { cmdCnt = 0; lastCmd = irCmd; } }
De sendCmd() functie is verschillend voor FujiDenzo en vervoerder.
FujiDenzo | Vervoerder |
case CMD_ON_OFF: // On-Off if ((acMode & AC_ON) == AC_ON) { // AC is on // set power bit to 0 acMode = acMode & AC_CLR; acMode = acMode | AC_OFF; isValidCmd = true; } else { // set power bit to 0 acMode = acMode & AC_CLR; acMode = acMode | AC_ON; isValidCmd = true; } buildBuffer(&sendBuffer[0], &POWER[0]); break; | case CMD_ON_OFF: // On-Off if ((acMode & AC_ON) == AC_ON) { // AC is on // set power bit to 0 acMode = acMode & AC_CLR; acMode = acMode | AC_OFF; isValidCmd = true; } else { // set power bit to 0 acMode = acMode & AC_CLR; acMode = acMode | AC_ON; isValidCmd = true; } chkCmdCnt(); switch (cmdCnt) { case 0: buildBuffer( &sendBuffer[0], &POWER_0[0]); break; case 1: buildBuffer( &sendBuffer[0], &POWER_1[0]); break; case 2: buildBuffer( &sendBuffer[0], &POWER_2[0]); break; } break; |
Zoals u in de software van de vervoerder die de functie chkCmdCnt() wordt aangeroepen zien kunt voordat wordt de sendBuffer gebouwd, terwijl in de Denzo software de dezelfde IR pulsen altijd gebruikt worden om te bouwen van de sendBuffer.