Taguchi Yuuki / IRremote

Dependents:   Lilnija_29012017 NucleoF042K6_IRReceiver

Committer:
yuhki50
Date:
Sat Jan 23 06:16:48 2016 +0000
Revision:
0:70c8e56bac45
import https://github.com/z3t0/Arduino-IRremote e3ec11d

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yuhki50 0:70c8e56bac45 1 #include <IRremote.h>
yuhki50 0:70c8e56bac45 2 #include <Wire.h>
yuhki50 0:70c8e56bac45 3
yuhki50 0:70c8e56bac45 4
yuhki50 0:70c8e56bac45 5 IRsend irsend;
yuhki50 0:70c8e56bac45 6 // not used
yuhki50 0:70c8e56bac45 7 int RECV_PIN = 11;
yuhki50 0:70c8e56bac45 8 IRrecv irrecv (RECV_PIN);
yuhki50 0:70c8e56bac45 9
yuhki50 0:70c8e56bac45 10 const int AC_TYPE = 0;
yuhki50 0:70c8e56bac45 11 // 0 : TOWER
yuhki50 0:70c8e56bac45 12 // 1 : WALL
yuhki50 0:70c8e56bac45 13 //
yuhki50 0:70c8e56bac45 14
yuhki50 0:70c8e56bac45 15 int AC_HEAT = 0;
yuhki50 0:70c8e56bac45 16 // 0 : cooling
yuhki50 0:70c8e56bac45 17 // 1 : heating
yuhki50 0:70c8e56bac45 18
yuhki50 0:70c8e56bac45 19 int AC_POWER_ON = 0;
yuhki50 0:70c8e56bac45 20 // 0 : off
yuhki50 0:70c8e56bac45 21 // 1 : on
yuhki50 0:70c8e56bac45 22
yuhki50 0:70c8e56bac45 23 int AC_AIR_ACLEAN = 0;
yuhki50 0:70c8e56bac45 24 // 0 : off
yuhki50 0:70c8e56bac45 25 // 1 : on --> power on
yuhki50 0:70c8e56bac45 26
yuhki50 0:70c8e56bac45 27 int AC_TEMPERATURE = 27;
yuhki50 0:70c8e56bac45 28 // temperature : 18 ~ 30
yuhki50 0:70c8e56bac45 29
yuhki50 0:70c8e56bac45 30 int AC_FLOW = 1;
yuhki50 0:70c8e56bac45 31 // 0 : low
yuhki50 0:70c8e56bac45 32 // 1 : mid
yuhki50 0:70c8e56bac45 33 // 2 : high
yuhki50 0:70c8e56bac45 34 // if AC_TYPE =1, 3 : change
yuhki50 0:70c8e56bac45 35 //
yuhki50 0:70c8e56bac45 36
yuhki50 0:70c8e56bac45 37
yuhki50 0:70c8e56bac45 38 const int AC_FLOW_TOWER[3] = {0, 4, 6};
yuhki50 0:70c8e56bac45 39 const int AC_FLOW_WALL[4] = {0, 2, 4, 5};
yuhki50 0:70c8e56bac45 40
yuhki50 0:70c8e56bac45 41 unsigned long AC_CODE_TO_SEND;
yuhki50 0:70c8e56bac45 42
yuhki50 0:70c8e56bac45 43 int r = LOW;
yuhki50 0:70c8e56bac45 44 int o_r = LOW;
yuhki50 0:70c8e56bac45 45
yuhki50 0:70c8e56bac45 46 byte a, b;
yuhki50 0:70c8e56bac45 47
yuhki50 0:70c8e56bac45 48 void ac_send_code(unsigned long code)
yuhki50 0:70c8e56bac45 49 {
yuhki50 0:70c8e56bac45 50 Serial.print("code to send : ");
yuhki50 0:70c8e56bac45 51 Serial.print(code, BIN);
yuhki50 0:70c8e56bac45 52 Serial.print(" : ");
yuhki50 0:70c8e56bac45 53 Serial.println(code, HEX);
yuhki50 0:70c8e56bac45 54
yuhki50 0:70c8e56bac45 55 irsend.sendLG(code, 28);
yuhki50 0:70c8e56bac45 56 }
yuhki50 0:70c8e56bac45 57
yuhki50 0:70c8e56bac45 58 void ac_activate(int temperature, int air_flow)
yuhki50 0:70c8e56bac45 59 {
yuhki50 0:70c8e56bac45 60
yuhki50 0:70c8e56bac45 61 int AC_MSBITS1 = 8;
yuhki50 0:70c8e56bac45 62 int AC_MSBITS2 = 8;
yuhki50 0:70c8e56bac45 63 int AC_MSBITS3 = 0;
yuhki50 0:70c8e56bac45 64 int AC_MSBITS4 ;
yuhki50 0:70c8e56bac45 65 if ( AC_HEAT == 1 ) {
yuhki50 0:70c8e56bac45 66 // heating
yuhki50 0:70c8e56bac45 67 AC_MSBITS4 = 4;
yuhki50 0:70c8e56bac45 68 } else {
yuhki50 0:70c8e56bac45 69 // cooling
yuhki50 0:70c8e56bac45 70 AC_MSBITS4 = 0;
yuhki50 0:70c8e56bac45 71 }
yuhki50 0:70c8e56bac45 72 int AC_MSBITS5 = temperature - 15;
yuhki50 0:70c8e56bac45 73 int AC_MSBITS6 ;
yuhki50 0:70c8e56bac45 74
yuhki50 0:70c8e56bac45 75 if ( AC_TYPE == 0) {
yuhki50 0:70c8e56bac45 76 AC_MSBITS6 = AC_FLOW_TOWER[air_flow];
yuhki50 0:70c8e56bac45 77 } else {
yuhki50 0:70c8e56bac45 78 AC_MSBITS6 = AC_FLOW_WALL[air_flow];
yuhki50 0:70c8e56bac45 79 }
yuhki50 0:70c8e56bac45 80
yuhki50 0:70c8e56bac45 81 int AC_MSBITS7 = (AC_MSBITS3 + AC_MSBITS4 + AC_MSBITS5 + AC_MSBITS6) & B00001111;
yuhki50 0:70c8e56bac45 82
yuhki50 0:70c8e56bac45 83 AC_CODE_TO_SEND = AC_MSBITS1 << 4 ;
yuhki50 0:70c8e56bac45 84 AC_CODE_TO_SEND = (AC_CODE_TO_SEND + AC_MSBITS2) << 4;
yuhki50 0:70c8e56bac45 85 AC_CODE_TO_SEND = (AC_CODE_TO_SEND + AC_MSBITS3) << 4;
yuhki50 0:70c8e56bac45 86 AC_CODE_TO_SEND = (AC_CODE_TO_SEND + AC_MSBITS4) << 4;
yuhki50 0:70c8e56bac45 87 AC_CODE_TO_SEND = (AC_CODE_TO_SEND + AC_MSBITS5) << 4;
yuhki50 0:70c8e56bac45 88 AC_CODE_TO_SEND = (AC_CODE_TO_SEND + AC_MSBITS6) << 4;
yuhki50 0:70c8e56bac45 89 AC_CODE_TO_SEND = (AC_CODE_TO_SEND + AC_MSBITS7);
yuhki50 0:70c8e56bac45 90
yuhki50 0:70c8e56bac45 91 ac_send_code(AC_CODE_TO_SEND);
yuhki50 0:70c8e56bac45 92
yuhki50 0:70c8e56bac45 93 AC_POWER_ON = 1;
yuhki50 0:70c8e56bac45 94 AC_TEMPERATURE = temperature;
yuhki50 0:70c8e56bac45 95 AC_FLOW = air_flow;
yuhki50 0:70c8e56bac45 96 }
yuhki50 0:70c8e56bac45 97
yuhki50 0:70c8e56bac45 98 void ac_change_air_swing(int air_swing)
yuhki50 0:70c8e56bac45 99 {
yuhki50 0:70c8e56bac45 100 if ( AC_TYPE == 0) {
yuhki50 0:70c8e56bac45 101 if ( air_swing == 1) {
yuhki50 0:70c8e56bac45 102 AC_CODE_TO_SEND = 0x881316B;
yuhki50 0:70c8e56bac45 103 } else {
yuhki50 0:70c8e56bac45 104 AC_CODE_TO_SEND = 0x881317C;
yuhki50 0:70c8e56bac45 105 }
yuhki50 0:70c8e56bac45 106 } else {
yuhki50 0:70c8e56bac45 107 if ( air_swing == 1) {
yuhki50 0:70c8e56bac45 108 AC_CODE_TO_SEND = 0x8813149;
yuhki50 0:70c8e56bac45 109 } else {
yuhki50 0:70c8e56bac45 110 AC_CODE_TO_SEND = 0x881315A;
yuhki50 0:70c8e56bac45 111 }
yuhki50 0:70c8e56bac45 112 }
yuhki50 0:70c8e56bac45 113
yuhki50 0:70c8e56bac45 114 ac_send_code(AC_CODE_TO_SEND);
yuhki50 0:70c8e56bac45 115 }
yuhki50 0:70c8e56bac45 116
yuhki50 0:70c8e56bac45 117 void ac_power_down()
yuhki50 0:70c8e56bac45 118 {
yuhki50 0:70c8e56bac45 119 AC_CODE_TO_SEND = 0x88C0051;
yuhki50 0:70c8e56bac45 120
yuhki50 0:70c8e56bac45 121 ac_send_code(AC_CODE_TO_SEND);
yuhki50 0:70c8e56bac45 122
yuhki50 0:70c8e56bac45 123 AC_POWER_ON = 0;
yuhki50 0:70c8e56bac45 124 }
yuhki50 0:70c8e56bac45 125
yuhki50 0:70c8e56bac45 126 void ac_air_clean(int air_clean)
yuhki50 0:70c8e56bac45 127 {
yuhki50 0:70c8e56bac45 128 if ( air_clean == 1) {
yuhki50 0:70c8e56bac45 129 AC_CODE_TO_SEND = 0x88C000C;
yuhki50 0:70c8e56bac45 130 } else {
yuhki50 0:70c8e56bac45 131 AC_CODE_TO_SEND = 0x88C0084;
yuhki50 0:70c8e56bac45 132 }
yuhki50 0:70c8e56bac45 133
yuhki50 0:70c8e56bac45 134 ac_send_code(AC_CODE_TO_SEND);
yuhki50 0:70c8e56bac45 135
yuhki50 0:70c8e56bac45 136 AC_AIR_ACLEAN = air_clean;
yuhki50 0:70c8e56bac45 137 }
yuhki50 0:70c8e56bac45 138
yuhki50 0:70c8e56bac45 139 void setup()
yuhki50 0:70c8e56bac45 140 {
yuhki50 0:70c8e56bac45 141 Serial.begin(38400);
yuhki50 0:70c8e56bac45 142 delay(1000);
yuhki50 0:70c8e56bac45 143 Wire.begin(7);
yuhki50 0:70c8e56bac45 144 Wire.onReceive(receiveEvent);
yuhki50 0:70c8e56bac45 145
yuhki50 0:70c8e56bac45 146 Serial.println(" - - - T E S T - - - ");
yuhki50 0:70c8e56bac45 147
yuhki50 0:70c8e56bac45 148 /* test
yuhki50 0:70c8e56bac45 149 ac_activate(25, 1);
yuhki50 0:70c8e56bac45 150 delay(5000);
yuhki50 0:70c8e56bac45 151 ac_activate(27, 2);
yuhki50 0:70c8e56bac45 152 delay(5000);
yuhki50 0:70c8e56bac45 153
yuhki50 0:70c8e56bac45 154 */
yuhki50 0:70c8e56bac45 155 }
yuhki50 0:70c8e56bac45 156
yuhki50 0:70c8e56bac45 157 void loop()
yuhki50 0:70c8e56bac45 158 {
yuhki50 0:70c8e56bac45 159
yuhki50 0:70c8e56bac45 160
yuhki50 0:70c8e56bac45 161 ac_activate(25, 1);
yuhki50 0:70c8e56bac45 162 delay(5000);
yuhki50 0:70c8e56bac45 163 ac_activate(27, 0);
yuhki50 0:70c8e56bac45 164 delay(5000);
yuhki50 0:70c8e56bac45 165
yuhki50 0:70c8e56bac45 166
yuhki50 0:70c8e56bac45 167 if ( r != o_r) {
yuhki50 0:70c8e56bac45 168
yuhki50 0:70c8e56bac45 169 /*
yuhki50 0:70c8e56bac45 170 # a : mode or temp b : air_flow, temp, swing, clean, cooling/heating
yuhki50 0:70c8e56bac45 171 # 18 ~ 30 : temp 0 ~ 2 : flow // on
yuhki50 0:70c8e56bac45 172 # 0 : off 0
yuhki50 0:70c8e56bac45 173 # 1 : on 0
yuhki50 0:70c8e56bac45 174 # 2 : air_swing 0 or 1
yuhki50 0:70c8e56bac45 175 # 3 : air_clean 0 or 1
yuhki50 0:70c8e56bac45 176 # 4 : air_flow 0 ~ 2 : flow
yuhki50 0:70c8e56bac45 177 # 5 : temp 18 ~ 30
yuhki50 0:70c8e56bac45 178 # + : temp + 1
yuhki50 0:70c8e56bac45 179 # - : temp - 1
yuhki50 0:70c8e56bac45 180 # m : change cooling to air clean, air clean to cooling
yuhki50 0:70c8e56bac45 181 */
yuhki50 0:70c8e56bac45 182 Serial.print("a : ");
yuhki50 0:70c8e56bac45 183 Serial.print(a);
yuhki50 0:70c8e56bac45 184 Serial.print(" b : ");
yuhki50 0:70c8e56bac45 185 Serial.println(b);
yuhki50 0:70c8e56bac45 186
yuhki50 0:70c8e56bac45 187 switch (a) {
yuhki50 0:70c8e56bac45 188 case 0: // off
yuhki50 0:70c8e56bac45 189 ac_power_down();
yuhki50 0:70c8e56bac45 190 break;
yuhki50 0:70c8e56bac45 191 case 1: // on
yuhki50 0:70c8e56bac45 192 ac_activate(AC_TEMPERATURE, AC_FLOW);
yuhki50 0:70c8e56bac45 193 break;
yuhki50 0:70c8e56bac45 194 case 2:
yuhki50 0:70c8e56bac45 195 if ( b == 0 | b == 1 ) {
yuhki50 0:70c8e56bac45 196 ac_change_air_swing(b);
yuhki50 0:70c8e56bac45 197 }
yuhki50 0:70c8e56bac45 198 break;
yuhki50 0:70c8e56bac45 199 case 3: // 1 : clean on, power on
yuhki50 0:70c8e56bac45 200 if ( b == 0 | b == 1 ) {
yuhki50 0:70c8e56bac45 201 ac_air_clean(b);
yuhki50 0:70c8e56bac45 202 }
yuhki50 0:70c8e56bac45 203 break;
yuhki50 0:70c8e56bac45 204 case 4:
yuhki50 0:70c8e56bac45 205 if ( 0 <= b && b <= 2 ) {
yuhki50 0:70c8e56bac45 206 ac_activate(AC_TEMPERATURE, b);
yuhki50 0:70c8e56bac45 207 }
yuhki50 0:70c8e56bac45 208 break;
yuhki50 0:70c8e56bac45 209 case 5:
yuhki50 0:70c8e56bac45 210 if (18 <= b && b <= 30 ) {
yuhki50 0:70c8e56bac45 211 ac_activate(b, AC_FLOW);
yuhki50 0:70c8e56bac45 212 }
yuhki50 0:70c8e56bac45 213 break;
yuhki50 0:70c8e56bac45 214 case '+':
yuhki50 0:70c8e56bac45 215 if ( 18 <= AC_TEMPERATURE && AC_TEMPERATURE <= 29 ) {
yuhki50 0:70c8e56bac45 216 ac_activate((AC_TEMPERATURE + 1), AC_FLOW);
yuhki50 0:70c8e56bac45 217 }
yuhki50 0:70c8e56bac45 218 break;
yuhki50 0:70c8e56bac45 219 case '-':
yuhki50 0:70c8e56bac45 220 if ( 19 <= AC_TEMPERATURE && AC_TEMPERATURE <= 30 ) {
yuhki50 0:70c8e56bac45 221 ac_activate((AC_TEMPERATURE - 1), AC_FLOW);
yuhki50 0:70c8e56bac45 222 }
yuhki50 0:70c8e56bac45 223 break;
yuhki50 0:70c8e56bac45 224 case 'm':
yuhki50 0:70c8e56bac45 225 /*
yuhki50 0:70c8e56bac45 226 if ac is on, 1) turn off, 2) turn on ac_air_clean(1)
yuhki50 0:70c8e56bac45 227 if ac is off, 1) turn on, 2) turn off ac_air_clean(0)
yuhki50 0:70c8e56bac45 228 */
yuhki50 0:70c8e56bac45 229 if ( AC_POWER_ON == 1 ) {
yuhki50 0:70c8e56bac45 230 ac_power_down();
yuhki50 0:70c8e56bac45 231 delay(100);
yuhki50 0:70c8e56bac45 232 ac_air_clean(1);
yuhki50 0:70c8e56bac45 233 } else {
yuhki50 0:70c8e56bac45 234 if ( AC_AIR_ACLEAN == 1) {
yuhki50 0:70c8e56bac45 235 ac_air_clean(0);
yuhki50 0:70c8e56bac45 236 delay(100);
yuhki50 0:70c8e56bac45 237 }
yuhki50 0:70c8e56bac45 238 ac_activate(AC_TEMPERATURE, AC_FLOW);
yuhki50 0:70c8e56bac45 239 }
yuhki50 0:70c8e56bac45 240 break;
yuhki50 0:70c8e56bac45 241 default:
yuhki50 0:70c8e56bac45 242 if ( 18 <= a && a <= 30 ) {
yuhki50 0:70c8e56bac45 243 if ( 0 <= b && b <= 2 ) {
yuhki50 0:70c8e56bac45 244 ac_activate(a, b);
yuhki50 0:70c8e56bac45 245 }
yuhki50 0:70c8e56bac45 246 }
yuhki50 0:70c8e56bac45 247 }
yuhki50 0:70c8e56bac45 248
yuhki50 0:70c8e56bac45 249 o_r = r ;
yuhki50 0:70c8e56bac45 250 }
yuhki50 0:70c8e56bac45 251 delay(100);
yuhki50 0:70c8e56bac45 252 }
yuhki50 0:70c8e56bac45 253
yuhki50 0:70c8e56bac45 254
yuhki50 0:70c8e56bac45 255
yuhki50 0:70c8e56bac45 256 void receiveEvent(int howMany)
yuhki50 0:70c8e56bac45 257 {
yuhki50 0:70c8e56bac45 258 a = Wire.read();
yuhki50 0:70c8e56bac45 259 b = Wire.read();
yuhki50 0:70c8e56bac45 260 r = !r ;
yuhki50 0:70c8e56bac45 261 }
yuhki50 0:70c8e56bac45 262
yuhki50 0:70c8e56bac45 263