Sorry, have a little time to review your code. Here is my AC controller with Particle Photon. Please also mind that I’m not the best coder in the world. I just make it work and forget )
#include "blynk/blynk.h"
#include "IRTransmitter.h"
#define IR_PIN D6
#define LED_PIN D7
#define BLYNK_PRINT Serial
char auth[] = "************************";
int userTemp = 16; //initial temp
bool acState;
// Raw data can be sniffed using an IR-receiver and e.g. https://github.com/z3t0/Arduino-IRremote/blob/master/examples/IRrecvDumpV2/IRrecvDumpV2.ino
unsigned int onoff[67] = {8950, 4400, 600, 500, 650, 450, 600, 500, 650, 1600, 600, 500, 600, 500, 600, 500, 600, 500, 600,
1600, 650, 500, 600, 1600, 600, 500, 650, 1550, 650, 1600, 650, 1550, 650, 1600, 600, 1600, 600,
500, 600, 500, 650, 500, 600, 1600, 650, 450, 600, 500, 600, 500, 600, 500, 650, 1600, 600, 1600,
600, 1650, 600, 500, 600, 1600, 600, 1650, 600, 1600, 600}; // ON OFF
unsigned int up[67] = { 8900, 4450, 600, 500, 650, 450, 650, 450, 650, 1600, 600, 500, 600, 500, 600, 500, 600, 500, 650,
1600, 600, 500, 600, 1600, 600, 500, 600, 1650, 600, 1600, 600, 1600, 650, 1600, 600, 500, 600,
1600, 600, 1650, 600, 1600, 600, 500, 600, 500, 600, 500, 650, 450, 650, 1600, 600, 500, 600,
500, 600, 500, 600, 1600, 650, 1600, 600, 1600, 600, 1600, 650}; // UP
unsigned int down[67] = {8900, 4400, 600, 500, 600, 500, 600, 500, 600, 1600, 650, 450, 650, 500, 600, 500, 600, 500, 600,
1600, 650, 450, 650, 1600, 600, 500, 600, 1600, 650, 1600, 600, 1600, 600, 1600, 650, 1600, 600, 500,
600, 1600, 600, 1650, 600, 500, 600, 500, 600, 500, 600, 500, 600, 500, 600, 1650, 600, 500, 600, 500,
600, 1600, 600, 1650, 600, 1600, 600, 1600, 600}; //down
unsigned int slow[67] = { 9000, 4400, 600, 500, 600, 500, 600, 500, 600, 1600, 650,
450, 650, 450, 650, 500, 600, 500, 600, 1600, 650, 450, 650, 1600, 600, 500, 600, 1600, 600, 1600, 650, 1600, 600, 1600, 650, 450, 650, 500, 600, 1600, 600, 500, 600, 500, 600, 500, 650, 450, 650, 450, 650, 1600, 600, 1600, 650, 450, 650, 1600, 600, 1600, 600, 1600, 650, 1600, 600, 1600, 600}; //slow
unsigned int fast[67] = { 8900, 4400, 600, 500, 600, 500, 650, 450, 650, 1600, 600, 500, 600, 500, 600,
500, 600, 500, 650, 1600, 600, 500, 600, 1600, 600, 500, 650, 1600, 600, 1600, 600, 1600, 650, 1600, 600, 1600, 650, 450, 650, 450, 650, 500, 600, 500, 600, 500, 600, 500, 600, 500, 600, 500, 600, 1650, 600, 1600, 600, 1600, 650, 1600, 600, 1600, 600, 1600, 650, 1600, 600};
unsigned int cool[67] = {9000, 4350, 650, 500, 600, 500, 600, 500, 600, 1600, 650, 450, 650,
450, 650, 500, 600, 500, 600, 1600, 600, 500, 650, 1550, 650, 500, 600, 1600, 600, 1600, 650, 1600, 600, 1600, 650, 1600, 600, 500, 600, 500, 600, 1600, 650, 450, 650, 450, 650, 500, 600, 500, 600, 500, 600, 1600, 600, 1650, 600, 500, 600, 1600, 600, 1600, 650, 1600, 600, 1600, 600};
unsigned int eco[67] = {8900, 4400, 600, 500, 600, 500, 600, 500, 650, 1550, 650,
500, 600, 500, 600, 500, 600, 500, 600, 1600, 650, 450, 650, 1600, 600, 500, 600, 1600, 650, 1600, 600, 1600, 600, 1650, 600, 500, 600, 1600, 600, 500, 600, 500, 650, 450, 650, 450, 650, 500, 600, 500, 600, 1600, 650, 450, 650, 1600, 600, 1600, 600, 1600, 650, 1600, 600, 1600, 650, 1550, 650};
unsigned int fan[67] = {8900, 4400, 650, 500, 600, 500, 600, 500, 600,
1600, 650, 450, 650, 450, 650, 500, 600, 500, 600, 1600, 600, 500, 600, 1650, 600, 500, 600, 1600, 600, 1600, 650, 1600, 600, 1600, 650, 1600, 600, 1600, 600, 1600, 650, 500, 600, 500, 600, 500, 600, 500, 600, 500, 600, 500, 600, 500, 650, 450, 650, 1600, 600, 1600, 600, 1600, 650, 1600, 600, 1600, 600};
unsigned int sleep[67] = {9000, 4400, 600, 500, 650, 450, 600,
500, 650, 1550, 650, 500, 600, 500, 600, 500, 650, 450, 650, 1550, 650, 450, 650, 1600, 650, 450, 650, 1550, 650, 1600, 600, 1600, 650, 1550, 650, 500, 600, 500, 600, 500, 650, 450, 650, 450, 650, 450, 650, 450, 650, 450, 650, 1600, 650, 1550, 650, 1600, 600, 1600, 650, 1550, 650, 1600, 600, 1600, 650, 1550, 650};
unsigned int autofan[67] = {8900, 4450, 600, 500, 600, 500, 650, 450, 650,
1550, 650, 450, 650, 500, 600, 500, 600, 500, 650, 1550, 650, 450, 650, 1600, 600, 500, 650, 1550, 650, 1600, 600, 1600, 650, 1550, 700, 1550, 650, 1550, 650, 1600, 600, 1600, 650, 450, 650, 450, 650, 450, 650, 450, 650, 500, 600, 500, 600, 500, 650, 450, 650, 1550, 650, 1600, 600, 1600, 650, 1550, 650};
unsigned int ONtimer[67] = {8900, 4400, 600, 500, 600, 500, 600,
500, 600, 1650, 600, 500, 600, 500, 600, 500, 600, 500, 600, 1600, 650, 500, 600, 1600, 600, 500, 600, 1600, 650, 1600, 600, 1600, 650, 1600, 600, 500, 600, 1600, 600, 1650, 600, 500, 600, 500, 600, 500, 600, 500, 600, 500, 600, 1650, 600, 500, 600, 500, 600, 1600, 600, 1650, 600, 1600, 600, 1600, 600, 1650, 600};
IRTransmitter transmitter(IR_PIN, LED_PIN);
void setup()
{
Serial.begin(9600);
delay(5000); // Allow board to settle
Blynk.begin(auth);
}
BLYNK_CONNECTED(){
RGB.control(true);
RGB.color(80, 227, 194);
RGB.brightness(8);
}
void loop() {
Blynk.run();
}
BLYNK_WRITE(V1) {
if (param.asInt() == 1) {
transmitter.Transmit(onoff, sizeof(onoff) / sizeof(onoff[0]));
acState = true;
Blynk.virtualWrite(V17,"ON");
}
if (param.asInt() == 0) {
transmitter.Transmit(onoff, sizeof(onoff) / sizeof(onoff[0]));
acState = false;
Blynk.virtualWrite(V17,"OFF");
}
}
BLYNK_WRITE(V2) {
userTemp = param.asInt();
int delta = userTemp-16; //22-16 = 6
Blynk.virtualWrite(V6, userTemp);
for (int i = 30; i >= 16; i--){ // Since I don't know if the temperature was changed manually,
transmitter.Transmit(down, sizeof(down) / sizeof(down[0])); // I always set it to min value (16ºC) and then increase it to a
delay(50); // user defined value
}
for (int k = 16; k <= userTemp-1; k++ ){
transmitter.Transmit(up, sizeof(up) / sizeof(up[0]));
delay(50);
}
}
BLYNK_WRITE(V3) { // Temp Up
if (param.asInt()) {
transmitter.Transmit(up, sizeof(up) / sizeof(up[0]));
userTemp = userTemp+1;
if (userTemp >= 32){
userTemp = 32;
}
Blynk.virtualWrite(V2,userTemp);
}
}
BLYNK_WRITE(V4) { // Temp Down
if (param.asInt()) {
transmitter.Transmit(down, sizeof(down) / sizeof(down[0]));
userTemp = userTemp-1;
if (userTemp <= 16){
userTemp = 16;
}
Blynk.virtualWrite(V2,userTemp);
}
}
BLYNK_WRITE(V7) { // Mode
if (param[0].asInt() == 1 ) {
transmitter.Transmit(cool, sizeof(cool) / sizeof(cool[0]));
}
if (param[0].asInt() == 2 ) {
transmitter.Transmit(eco, sizeof(eco) / sizeof(eco[0]));
}
if (param[0].asInt() == 3 ) {
transmitter.Transmit(fan, sizeof(fan) / sizeof(fan[0]));
}
}
BLYNK_WRITE(V8) { // decrease fan speed
if (param.asInt()) {
transmitter.Transmit(slow, sizeof(slow) / sizeof(slow[0]));
}
}
BLYNK_WRITE(V9) { // increase fan speed
if (param.asInt()) {
transmitter.Transmit(fast, sizeof(fast) / sizeof(fast[0]));
}
}
BLYNK_WRITE(V13) { // Brightness
RGB.brightness(param.asInt());
}
BLYNK_WRITE(V14) { // trigger cool down scene
if (param.asInt()){
Blynk.virtualWrite(V1,1);
delay(100);
coolDownScene();
}
}
void coolDownScene(){
transmitter.Transmit(onoff, sizeof(onoff) / sizeof(onoff[0])); // turning AC on
delay(100);
acState = true;
Blynk.virtualWrite(V17,"ON");
Blynk.virtualWrite(V14,0); // resetting the button for Alexa
transmitter.Transmit(cool, sizeof(cool) / sizeof(cool[0])); // switching AC to COOL mode
delay(100);
for (int s = 0; s <= 3; s++){
transmitter.Transmit(fast, sizeof(fast) / sizeof(fast[0])); //setting fan speed to max
delay(50);
//Blynk.virtualWrite(V17,s);
}
delay(100);
for (int x = 32; x >= 16; x--){
transmitter.Transmit(down, sizeof(down) / sizeof(down[0]));
delay(50);
//Blynk.virtualWrite(V17,x);
}
Blynk.virtualWrite(V17,"ON");
delay(100);
Blynk.virtualWrite(V2,16);
//Blynk.virtualWrite(V2, 16); // setting the temp to 16ºC
}