Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: Lilnija_29012017 NucleoF042K6_IRReceiver
examples/LGACSendDemo/LGACSendDemo.ino@0:70c8e56bac45, 2016-01-23 (annotated)
- 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?
| User | Revision | Line number | New 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 |