Skip to content

Instantly share code, notes, and snippets.

@sp-ice
Last active August 2, 2020 07:28
Show Gist options
  • Save sp-ice/2de0f0fd6bb30c1cef10 to your computer and use it in GitHub Desktop.
Save sp-ice/2de0f0fd6bb30c1cef10 to your computer and use it in GitHub Desktop.
Arduinoで室温取得+エアコン操作
#include <avr/pgmspace.h>
//通信
char serial_recv;
//LED
char led_pin = 13;
//気温
int Analog_in = 0; // アナログ入力ピン番号
int A_val; // アナログ入力値(0~203)
double tempC = 0; // 摂氏値( ℃ )
//赤外線
int ir_out = 2;
int last = 0;
unsigned long us = micros();
PROGMEM prog_uint16_t data_on[] = {345,166,47,125,45,125,45,40,46,39,45,38,47,124,46,38,47,39,45,125,46,123,47,40,45,124,46,39,46,39,45,125,45,125,46,38,46,124,46,123,48,39,46,38,47,125,46,39,45,40,45,123,47,40,45,39,45,39,46,38,46,40,45,38,46,40,45,39,46,40,45,39,46,38,46,39,45,40,45,40,45,39,45,40,45,38,46,38,47,40,46,39,46,124,46,38,47,39,46,39,45,40,46,39,46,125,45,124,46,38,47,126,44,39,46,39,46,125,46,38,47,123,47,39,46,38,46,40,45,40,45,38,47,124,47,125,45,40,45,124,47,124,47,39,46,39,45,38,47,39,46,37,47,39,45,124,47,39,45,126,45,40,45,38,47,39,46,39,45,39,46,40,45,40,45,40,45,38,47,39,46,37,48,39,45,40,45,40,45,38,47,40,45,39,45,38,47,39,46,39,46,39,45,40,45,39,45,38,47,40,45,39,46,39,45,40,46,39,45,39,46,40,45,39,46,38,47,40,45,39,46,39,46,40,45,40,45,40,45,38,47,40,45,39,45,39,46,39,46,40,45,38,46,39,46,38,46,39,46,38,46,40,45,39,45,40,45,39,46,40,44,40,45,40,44,125,46,38,47,125,46,124,46,124,47,40,45,39,46,39,45,1322,345,167,46,123,47,124,46,39,46,39,46,40,45,124,47,38,46,40,45,124,46,125,46,38,47,125,46,39,45,39,46,124,46,125,46,38,47,125,45,125,46,39,46,39,45,124,46,40,46,38,46,125,46,39,46,39,45,40,45,40,45,40,45,40,45,40,45,39,46,39,45,39,46,39,46,39,46,39,46,39,46,39,45,40,46,39,45,39,46,39,45,40,45,120,50,38,47,39,46,39,45,40,45,39,45,125,46,124,46,38,47,124,46,40,45,40,45,125,45,40,45,125,45,40,45,40,45,40,45,38,46,40,46,124,46,125,45,40,45,125,45,125,45,39,45,40,46,39,45,39,46,39,46,39,46,125,45,39,46,118,52,39,45,41,44,40,45,40,45,39,46,38,46,38,46,40,46,39,46,39,46,39,46,40,45,40,45,38,46,39,46,39,45,40,45,39,46,39,46,38,46,39,46,39,46,39,45,40,48,36,48,36,46,40,45,40,45,40,45,39,46,39,45,40,45,39,46,40,45,39,46,40,48,36,45,40,45,40,45,38,46,40,45,40,45,40,45,40,48,37,48,35,47,38,46,38,50,36,46,39,46,39,48,36,49,36,45,40,45,38,50,36,48,36,48,122,45,39,49,121,49,120,50,121,46,41,47,37,48,35,46};
PROGMEM prog_uint16_t data_off[] = {349,164,48,122,49,122,48,36,48,36,48,37,48,122,48,36,49,36,48,121,49,122,49,36,48,121,49,36,48,38,48,121,49,121,50,35,49,122,48,122,49,38,47,36,49,121,49,36,48,37,48,121,49,36,49,36,49,36,48,36,48,36,49,36,49,36,48,36,49,36,48,36,48,37,48,36,48,36,48,37,48,36,48,36,49,38,47,37,48,36,49,36,49,36,48,36,48,37,48,35,49,36,49,36,48,122,49,121,49,38,47,121,49,36,49,36,48,122,48,36,48,122,49,36,48,36,49,36,48,36,48,36,48,121,50,121,49,36,49,121,49,121,49,37,48,36,48,36,49,36,49,36,48,36,49,121,49,37,48,121,49,36,48,36,49,36,49,36,48,37,48,36,49,36,49,36,48,36,49,37,48,37,48,38,47,37,48,36,48,36,49,36,49,36,48,36,48,36,49,36,49,36,48,37,48,37,48,36,49,36,49,36,49,36,49,36,48,36,48,37,48,36,48,36,49,38,47,36,50,37,47,38,47,37,48,36,49,37,48,35,49,35,49,36,49,36,49,36,49,37,48,36,50,35,49,38,47,37,48,36,49,36,48,36,48,36,48,36,48,36,49,37,48,45,50,111,49,36,49,121,49,121,49,121,49,121,50,122,48,122,49,1318,349,163,49,122,49,121,49,36,49,36,48,37,48,122,49,36,48,36,49,121,49,121,49,36,48,121,49,36,48,38,47,121,49,121,49,36,49,121,49,122,49,36,48,36,48,122,48,36,48,36,49,122,48,37,48,35,49,37,48,37,48,37,48,36,50,35,49,36,49,36,49,37,48,35,49,36,48,36,48,36,48,38,47,36,49,36,49,36,49,36,48,36,49,37,48,36,49,36,49,36,48,36,48,36,49,121,49,121,49,36,48,121,49,37,48,36,49,122,48,37,48,121,50,36,49,35,49,36,49,36,49,36,49,121,49,121,49,36,48,121,49,121,49,36,49,36,49,36,48,36,49,36,49,36,49,121,50,36,49,121,49,36,49,36,49,36,49,37,48,36,49,36,48,36,49,36,49,36,49,36,49,36,49,36,49,37,48,37,48,36,48,36,49,36,49,36,49,36,49,36,49,35,49,36,48,36,48,37,48,36,49,36,49,36,49,36,49,36,49,36,49,36,49,36,50,35,49,36,48,38,46,38,47,37,48,37,48,36,48,36,50,37,47,36,49,36,48,36,49,36,49,36,49,35,49,36,49,36,49,36,48,36,48,36,48,36,49,36,49,36,49,35,49,45,50,111,49,36,48,122,49,121,49,121,50,121,49,122,49,121,49};
void setup(){
pinMode(ir_out, OUTPUT);
pinMode(led_pin, OUTPUT);
Serial.begin(9600);
}
void loop(){
while(Serial.available() > 0){
serial_recv = Serial.read();
switch(serial_recv){
case 'y':
digitalWrite(led_pin, true);
sendSignal('y');
break;
case 'n':
digitalWrite(led_pin, false);
sendSignal('n');
break;
}
}
//気温
A_val = analogRead( Analog_in );
tempC = (5 * A_val) / 1024.00 * 100.00;
Serial.println( tempC );
delay(100);
}
// dataからリモコン信号を送信
void sendSignal(char com) {
int dataSize;
if(com == 'y'){
dataSize = sizeof(data_on) / sizeof(data_on[0]);
}else if(com == 'n'){
dataSize = sizeof(data_off) / sizeof(data_off[0]);
}else{
return;
}
for (int cnt = 0; cnt < dataSize; cnt++) {
// dataは10us単位でON/OFF時間を記録している
unsigned long len;
if(com == 'y'){
len = pgm_read_word_near(data_on + cnt)*10;
}else if(com == 'n'){
len = pgm_read_word_near(data_off + cnt)*10;
}else{
return;
}
unsigned long us = micros();
do {
digitalWrite(ir_out, 1 - (cnt&1)); // cntが偶数なら赤外線ON、奇数ならOFFのまま
delayMicroseconds(8); // キャリア周波数38kHzでON/OFFするよう時間調整
digitalWrite(ir_out, 0);
delayMicroseconds(7);
} while (long(us + len - micros()) > 0); // 送信時間に達するまでループ
}
return;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment