AlexShu

A/C Control via serial connection w/ Arduino

Apr 23rd, 2015
469
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Breeze (Whirlpool Codes) A/C Control via serial connection w/ Arduino
  2. // By Alex Shubovich - ALEXSHU.COM
  3.  
  4. #include <IRremote.h>
  5. int incomingByte = 0;
  6. IRsend irsend;
  7. //unsigned int baseCode[344] = {9000, 4240, 760, 1460, 760, 1460, 760, 360, 740, 380, 720, 400, 700, 420, 700, 420, 680, 1560, 660, 460, 660, 1560, 660, 1560, 640, 480, 620, 500, 620, 500, 640, 480, 620, 500, 620, 500, 600, 520, 600, 520, 600, 520, 580, 1640, 580, 540, 580, 1640, 580, 540, 600, 1620, 620, 1600, 580, 560, 540, 580, 520, 1680, 580, 1660, 560, 1640, 580, 580, 520, 600, 520, 600, 520, 600, 540, 560, 540, 580, 560, 560, 520, 600, 540, 580, 520, 600, 540, 580, 560, 560, 540, 580, 540, 580, 540, 580, 540, 580, 520, 600, 520, 7840, 580, 1640, 540, 1680, 580, 560, 540, 580, 520, 1680, 580, 560, 500, 620, 500, 1700, 540, 1680, 540, 1700, 540, 580, 500, 620, 520, 600, 520, 1700, 540, 580, 520, 600, 520, 600, 520, 600, 520, 600, 500, 620, 500, 620, 520, 600, 520, 600, 520, 600, 500, 620, 500, 620, 520, 600, 540, 580, 500, 620, 500, 600, 540, 580, 540, 580, 540, 580, 540, 580, 520, 600, 520, 600, 540, 580, 520, 600, 520, 600, 520, 600, 540, 580, 540, 580, 520, 600, 540, 580, 520, 600, 540, 580, 520, 580, 540, 600, 540, 580, 500, 620, 520, 600, 520, 600, 500, 620, 520, 580, 560, 560, 540, 580, 540, 1700, 540, 1660, 560, 580, 500, 620, 520, 1680, 540, 600, 520, 580, 540, 1680, 540, 7840, 560, 560, 540, 580, 540, 580, 520, 600, 540, 580, 540, 580, 520, 600, 540, 580, 520, 600, 540, 1680, 540, 580, 540, 580, 520, 600, 520, 600, 520, 600, 500, 620, 540, 580, 540, 580, 500, 620, 520, 600, 500, 620, 520, 600, 500, 620, 520, 600, 520, 600, 540, 560, 520, 600, 540, 580, 540, 580, 520, 600, 520, 600, 520, 600, 540, 580, 500, 620, 540, 580, 540, 580, 540, 580, 540, 580, 520, 600, 540, 580, 520, 600, 520, 600, 520, 600, 540, 580, 520, 600, 520, 600, 560, 560, 520, 600, 520, 600, 520, 1680, 560, 580, 520, 600, 520, 600, 520, 580, 540, 580, 520, 600, 540, };
  8.  
  9. int irHigh = 1650;
  10. int irLow = 600;
  11.  
  12. // A/C Settings
  13. int temperature = 18;
  14. int mode = 0; // 0-Cool | 1-Heat | 2-Fan | 3-Humid
  15. int fanspeed=0; //0-Auto | 1-Low | 2-Medium | 3-High
  16. //A/C Toggles
  17. boolean power = false;
  18. boolean swing = false;
  19. boolean dimmer = false;
  20.  
  21. //irsend.sendRaw(baseCode,344,38);
  22.  
  23. void airConSettingsIRSend(){
  24.     unsigned int newCode[230] = {3,2,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3};
  25.    
  26.     //Temperatue
  27.     switch (temperature){
  28.         case 18:
  29.         // do nothing
  30.         break;
  31.         case 19:
  32.         newCode[59] = 1;
  33.         break;
  34.         case 20:
  35.         newCode[61] = 1;
  36.        
  37.         break;
  38.         case 21:
  39.         newCode[59] = 1;
  40.         newCode[61] = 1;
  41.         break;
  42.         case 22:
  43.         newCode[63] = 1;
  44.         break;
  45.         case 23:
  46.         newCode[59] = 1;
  47.         newCode[63] = 1;
  48.         break;
  49.         case 24:
  50.         newCode[61] = 1;
  51.         newCode[63] = 1;
  52.         break;
  53.         case 25:
  54.         newCode[59] = 1;
  55.         newCode[61] = 1;
  56.         newCode[63] = 1;
  57.         break;
  58.         case 26:
  59.         newCode[65] = 1;
  60.         break;
  61.         case 27:
  62.         newCode[59] = 1;
  63.         newCode[65] = 1;
  64.         break;
  65.         case 28:
  66.         newCode[61] = 1;
  67.         newCode[65] = 1;
  68.         break;
  69.         case 29:
  70.         newCode[59] = 1;
  71.         newCode[61] = 1;
  72.         newCode[65] = 1;
  73.         break;
  74.         case 30:
  75.         newCode[63] = 1;
  76.         newCode[65] = 1;
  77.         break;
  78.         case 31:
  79.         newCode[59] = 1;
  80.         newCode[63] = 1;
  81.         newCode[65] = 1;
  82.         break;
  83.         case 32:
  84.         newCode[61] = 1;
  85.         newCode[63] = 1;
  86.         newCode[65] = 1;
  87.         break;
  88.     }
  89.     // END temperature
  90.     // Modes
  91.     switch (mode){
  92.         case 0: //Cool
  93.         newCode[53] = 1;
  94.         break;
  95.         case 1: // Heat
  96.         // do nothing
  97.         break;
  98.         case 2: //Fan
  99.         newCode[55] = 1;
  100.         break;
  101.         case 3: //Humid
  102.         newCode[51] = 1;
  103.         newCode[53] = 1;
  104.         break;
  105.     }
  106.     //END modes
  107.     // Fans Speeds
  108.     switch (fanspeed){
  109.         case 0: //Auto
  110.         //do nothing
  111.         break;
  112.         case 1: //LOW
  113.         newCode[35] = 1;
  114.         newCode[37] = 1;
  115.         break;
  116.         case 2: //MED
  117.         newCode[37] = 1;
  118.         break;
  119.         case 3: //HIGH
  120.         newCode[35] = 1;
  121.         break;
  122.     } //End Fan speeds
  123.     // Toggles
  124.     //power
  125.     if(power == true){
  126.         newCode[39] = 1;
  127.         power = false;
  128.     }
  129.     //swing
  130.     if(swing == true){
  131.         newCode[49] = 1;
  132.         swing = false;
  133.     }
  134.     //dimmer
  135.     if(dimmer == true){
  136.         newCode[111] = 1;
  137.         dimmer = false;
  138.     }
  139.     //Checksum
  140.     for(int i=0;i<16;i++){
  141.         int sum = 0;
  142.         for(int j=0;j<11;j++){
  143.             int pos = 35+16*j+i;
  144.             if(pos >= 99){
  145.                 pos = pos+2;
  146.             }
  147.             sum = sum + newCode[pos];
  148.             // Serial.print(pos);
  149.             // Serial.print(" ");
  150.         }
  151.        
  152.         if(sum%2!=0){
  153.             newCode[213+i] = 1;
  154.         }
  155.     }
  156.     //  Serial.println("");
  157.     // debug print code
  158.     /*for(int i=0;i<230;i++){
  159.         Serial.print(newCode[i]);
  160.         Serial.print(",");
  161.     }
  162.     Serial.println("");
  163.     */
  164.     //generate insert microseconds
  165.     for(int i=0;i<230;i++){
  166.         switch (newCode[i]){
  167.             case 0:
  168.             newCode[i] = irLow;
  169.             break;
  170.             case 1:
  171.             newCode[i] = irHigh;
  172.             break;
  173.             case 2:
  174.             newCode[i] = 4400;
  175.             break;
  176.             case 3:
  177.             newCode[i] = 8000;
  178.             break;
  179.         }
  180.     }
  181.     //Send Code
  182.     irsend.sendRaw(newCode,230,38);
  183.    
  184. }
  185.  
  186. void setup()
  187. {
  188.     Serial.begin(9600);
  189.     Serial.println("Commands: +/- Temperature | m - Mode | f- fanspeed | p - Power | s - Swing | d - dimmer");
  190.    
  191. }
  192.  
  193. void loop() {
  194.     if (Serial.available() > 0) {
  195.         Serial.write(27);  // ESC command
  196.         Serial.print("[2J");
  197.         // read the incoming byte:
  198.         incomingByte = Serial.read();
  199.        
  200.         // say what you got:
  201.         Serial.print("Command: ");
  202.         if(incomingByte == 43){
  203.             Serial.print("Temperature +");
  204.             if(temperature +1 <=32){
  205.                 temperature++;
  206.             }
  207.         }
  208.         if(incomingByte == 45){
  209.             Serial.print("Temperature -");
  210.             if(temperature -1 >=18){
  211.                 temperature--;
  212.             }
  213.         }
  214.         if(incomingByte == 109){ //mode
  215.             Serial.print("Mode");
  216.             if(mode+1 <=3){
  217.                 mode++;
  218.                 }else {
  219.                 mode=0;
  220.             }
  221.         }
  222.         if(incomingByte == 102){ //fan
  223.             Serial.print("Fan");
  224.             if(fanspeed+1 <=3){
  225.                 fanspeed++;
  226.                 }else {
  227.                 fanspeed=0;
  228.             }
  229.         }
  230.         if(incomingByte == 112){ //power
  231.             Serial.print("Power");
  232.             power = true;
  233.         }
  234.         if(incomingByte == 115){ //swing
  235.             Serial.print("Swing");
  236.             swing = true;
  237.         }
  238.         if(incomingByte == 100){ //dimmer
  239.             Serial.print("Dimmer");
  240.             dimmer = true;
  241.         }
  242.         Serial.println("");
  243.         Serial.println("A/C Control");
  244.         Serial.print("Temperature: ");
  245.         Serial.println(temperature);
  246.         Serial.print("Mode: ");
  247.         switch (mode) {
  248.             case 0:
  249.             Serial.println("Cool");
  250.             break;
  251.             case 1:
  252.             Serial.println("Heat");
  253.             break;
  254.             case 2:
  255.             Serial.println("Fan");
  256.             break;
  257.             case 3:
  258.             Serial.println("Humid");
  259.             break;
  260.         }
  261.         Serial.print("Fan Speed: ");
  262.         switch (fanspeed) {
  263.             case 0:
  264.             Serial.println("Auto");
  265.             break;
  266.             case 1:
  267.             Serial.println("Low");
  268.             break;
  269.             case 2:
  270.             Serial.println("Medium");
  271.             break;
  272.             case 3:
  273.             Serial.println("High");
  274.             break;
  275.         }
  276.         Serial.println("");
  277.         Serial.println("Commands: +/- Temperature | m - Mode | f- fanspeed | p - Power | s - Swing | d - dimmer nnn");
  278.         airConSettingsIRSend();
  279.     }
  280. }
RAW Paste Data