
{"id":6667,"date":"2017-11-09T18:21:06","date_gmt":"2017-11-09T09:21:06","guid":{"rendered":"https:\/\/okiraku-camera.tokyo\/blog\/?p=6667"},"modified":"2017-11-09T18:28:03","modified_gmt":"2017-11-09T09:28:03","slug":"%e3%82%bf%e3%83%83%e3%83%81%e3%83%91%e3%83%8d%e3%83%ab%e4%bb%98tft%e6%b6%b2%e6%99%b6%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e8%b5%a4%e5%a4%96%e7%b7%9a%e3%83%aa%e3%83%a2%e3%82%b3%e3%83%b3-%e3%81%9d-2","status":"publish","type":"post","link":"https:\/\/okiraku-camera.tokyo\/blog\/?p=6667","title":{"rendered":"\u30bf\u30c3\u30c1\u30d1\u30cd\u30eb\u4ed8TFT\u6db2\u6676\u3092\u4f7f\u3063\u305f\u8d64\u5916\u7dda\u30ea\u30e2\u30b3\u30f3 \u305d\u306e2"},"content":{"rendered":"<h1>\u6982\u8981<\/h1>\n<p>\u30bf\u30c3\u30c1\u30d1\u30cd\u30eb\u4ed8TFT\u6db2\u6676\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u4f7f\u3063\u305f\u8d64\u5916\u7dda\u30ea\u30e2\u30b3\u30f3\u306b\u95a2\u3059\u308b\u8a71\u306e2\u56de\u76ee\u3002\u4eca\u56de\u304b\u3089\u306f\u30d7\u30ed\u30b0\u30e9\u30e0(\u30b9\u30b1\u30c3\u30c1)\u306b\u3064\u3044\u3066\u3002\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u4e00\u4eba\u30bd\u30fc\u30b9\u30ec\u30d3\u30e5\u30fc\u3068\u3044\u3063\u305f\u3068\u3053\u308d\u3002<\/p>\n<p>\u30b9\u30b1\u30c3\u30c1\u5168\u4f53\u306f\u4ee5\u4e0b\u306e3\u672c\u3067\u69cb\u6210\u3057\u305f\u3002C++\u306e\u30af\u30e9\u30b9\u3092\u4f7f\u308f\u306a\u304b\u3063\u305f\u306e\u30671\u672c\u306b\u3057\u3066\u3082\u3088\u304b\u3063\u305f\u306e\u3060\u3051\u3069\u3001\u5168\u4f53\u3067950\u884c\u7a0b\u306b\u306a\u3063\u305f\u306e\u3067\u5206\u5272\u3059\u308b\u3053\u3068\u306b\u3057\u305f\u3002<\/p>\n<ul>\n<li>\u30e1\u30a4\u30f3\u30e2\u30b8\u30e5\u30fc\u30eb <strong>(A_PROMINI_TFT_IR3.ino<\/strong>)<br \/>\n\u30bf\u30c3\u30c1\u30d1\u30cd\u30eb\u3001\u8d64\u5916\u7dda\u4fe1\u53f7\u3001\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3001\u30e1\u30a4\u30f3\u30eb\u30fc\u30d7\u3002<\/li>\n<li>\u30ea\u30e2\u30b3\u30f3\u64cd\u4f5c\u30d1\u30cd\u30eb\u30e2\u30b8\u30e5\u30fc\u30eb (<strong>rcPanel.h<\/strong>)<br \/>\n\u5404\u64cd\u4f5c\u30d1\u30cd\u30eb\u3092\u63cf\u753b\u3059\u308b\u305f\u3081\u306e\u6a5f\u80fd\u3002<\/li>\n<li>\u30ea\u30e2\u30b3\u30f3\u64cd\u4f5c\u30d1\u30cd\u30eb\u30c7\u30fc\u30bf (<strong>panelData.h<\/strong>)<br \/>\n\u64cd\u4f5c\u30d1\u30cd\u30eb\u306e\u305f\u3081\u306e\u5b9a\u7fa9\u3084\u30d1\u30cd\u30eb\u63cf\u753b\u7528\u306e\u30c7\u30fc\u30bf\u306a\u3069\u3002<\/li>\n<\/ul>\n<p>\u306a\u304a\u3001\u30e1\u30a4\u30f3\u30e2\u30b8\u30e5\u30fc\u30eb\u306frcPanel.h\u306b\u4f9d\u5b58\u3057\u3066\u304a\u308a\u3001\u30d1\u30cd\u30eb\u30e2\u30b8\u30e5\u30fc\u30eb\u306fpanelData.h\u306b\u4f9d\u5b58\u3057\u3066\u3044\u308b\u3002\u4eca\u56de\u306f\u3001\u30e1\u30a4\u30f3\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u3064\u3044\u3066\u3002<\/p>\n<h1>A_PROMINI_TFT_IR3.ino<\/h1>\n<p>\u7279\u306b\u30d5\u30a1\u30a4\u30eb\u306e\u547d\u540d\u898f\u5247\u306f\u306a\u3044\u306e\u3060\u3051\u3069\u3001Arduino PRO MINI\u7528\u306e\u5834\u5408\u3001&#8221;A_PROMINI_xxxx.ino&#8221;\u3068\u3044\u3046\u540d\u524d\u306b\u3059\u308b\u3053\u3068\u304c\u591a\u3044\u3002<\/p>\n<p>\u30e1\u30a4\u30f3\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u3001\u304a\u304a\u307e\u304b\u306b\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u90e8\u5206\u304b\u3089\u6210\u308a\u7acb\u3063\u3066\u3044\u308b\u3002<\/p>\n<ul>\n<li>I\/O\u30dd\u30fc\u30c8\u95a2\u4fc2\u306e\u5b9a\u7fa9<\/li>\n<li>\u30bf\u30c3\u30c1\u30d1\u30cd\u30eb\u306e\u5236\u5fa1\u3068\u30bf\u30c3\u30c1\u4f4d\u7f6e\u306e\u8aad\u307f\u53d6\u308a<\/li>\n<li>ATMega328P\u306ePWM\u6a5f\u80fd\u3092\u4f7f\u3063\u305f\u8d64\u5916\u7dda\u4fe1\u53f7\u306e\u767a\u751f<\/li>\n<li>\u30bf\u30c3\u30c1\u691c\u51fa\u6642\u306e\u6319\u52d5\u3092\u3064\u304b\u3055\u3069\u308b\u30e1\u30a4\u30f3\u30eb\u30fc\u30d7<\/li>\n<li>\u5404\u7a2e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/li>\n<\/ul>\n<pre class=\"lang:c++ decode:true \" title=\"A_PROMINI_IR_TFT3\">#include &lt;avr\/sleep.h&gt;\r\n#include &lt;avr\/wdt.h&gt;\r\n#include &lt;Adafruit_GFX.h&gt;\r\n#include &lt;Adafruit_ILI9341.h&gt;\r\n#include \"rcPanel.h\"\r\n\r\n#define TFT_RST 6\r\n#define TFT_DC 7\r\n#define TFT_CS 5\r\n#define LED_PIN 4\r\nAdafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);\r\n#define TFT_ROTATION  3 \/\/ J2\u7aef\u5b50\u5074\u3092\u5de6\u306b\u898b\u305f\u3068\u304d\u5de6\u4e0a\u304c\u30011: (319, 239) or 3 : (0, 0)\u3002\r\n#define TSC2046_SS  8 \/\/ touch panel spi SS\r\n#define PWM_OC1A  9   \/\/ PWM \r\n#define PWM_OC1B  10  \/\/ PWM (to IrLEDs)\r\n\/\/\r\n\/\/ ------- touch-panel\r\n\/\/\r\nstatic int rx, ry, rz; \/\/ tsc2046 raw data.\r\nvoid tsc2046_read_adc(bool pd_only = false) {\r\n  SPI.beginTransaction(SPISettings(2000000, MSBFIRST, SPI_MODE0));\r\n  digitalWrite(TSC2046_SS, LOW);\r\n  if (pd_only) {  \/\/ force power-down mode.\r\n    SPI.transfer16(B11010000); \/\/ get Y and request Power down.\r\n    SPI.transfer16(0);    \/\/ dummy read.\r\n    digitalWrite(TSC2046_SS, HIGH); \/\/ \r\n    SPI.endTransaction();\r\n    return;\r\n  } else {\r\n    int z1 = 0;\r\n    int z2 = 0;  \r\n    rz = rx = ry = 0;\r\n    SPI.transfer(B10110011);  \/\/ request Z1\r\n    for(int i = 0; i &lt; 4; i++) {  \/\/ 4\u56de\u8aad\u3093\u3067\u5e73\u5747\u5024\u3092\u6c42\u3081\u308b\u3002\r\n      z1 += SPI.transfer16(B11000011) &gt;&gt; 3;  \/\/ get Z1 and request Z2\r\n      z2 += SPI.transfer16(B11010011) &gt;&gt; 3;  \/\/ get Z2 and request X\r\n      rx += SPI.transfer16(B10010011) &gt;&gt; 3;  \/\/ get X and request Y\r\n      ry += SPI.transfer16(B10110011) &gt;&gt; 3;  \/\/ get Y and request Z1.\r\n    }\r\n    SPI.transfer16(B11010000); \/\/request Power down.\r\n    SPI.transfer16(0);    \/\/ dummy read.\r\n    digitalWrite(TSC2046_SS, HIGH); \r\n    SPI.endTransaction();\r\n    z1 &gt;&gt;= 2, z2 &gt;&gt;= 2, rx &gt;&gt;= 2, ry &gt;&gt;= 2;\r\n    \/\/ \u5f37\u304f\u62bc\u3059\u307b\u3069\u62b5\u6297\u5024(\u8aad\u307f\u53d6\u308a\u5024)\u306f\u5c0f\u3055\u304f\u306a\u308b\u3002rx\u5024\u3067\u88dc\u6b63\u3057\u3066\u6700\u5927\u5024\u304b\u3089\u5f15\u304f\u3002\r\n    if (z1 &gt; 0 &amp;&amp; z2 &gt; 0) \r\n      rz = 4096 - (int)((double)(z2 \/ z1 * rx \/ 4.0 ));\r\n    else\r\n      rz = 0;\r\n  }\r\n}\r\n\r\n\/\/ \u30bf\u30c3\u30c1\u53ef\u80fd\u9818\u57df\u3002\r\n\/\/ \u5b9f\u969b\u306b\u30bf\u30c3\u30c1\u3057\u3066\u5f97\u305f\u5024\u3002\u5ea7\u6a19\u306f raw value (rx, ry)\u304b\u3089\u5f97\u3066\u3044\u308b\u3002\r\nenum { tsc_min_x = 280, tsc_min_y = 150, tsc_max_x = 4000, tsc_max_y = 3700 };\r\n\/\/ \u62bc\u5727\u304c\u6307\u5b9a\u5024\u3088\u308a\u5c0f\u3055\u3044\u3068false\r\n\/\/ \u6db2\u6676\u306e\u5ea7\u6a19\u7cfb\u306b\u5909\u63db\u3057\u305f\u5024\u3092\u623b\u3059\u3002\r\n\/\/ \u6db2\u6676\u306e\u9577\u624b\u65b9\u5411\u3092x\u3068\u3059\u308b\u3002\r\nconst bool tsc2046_read_pos(int&amp; x, int&amp; y) {\r\n  tsc2046_read_adc();\r\n  if (rz &lt; 800)\r\n    return false;\r\n  if (TFT_ROTATION &amp; 1) {\r\n    y = map(rx,  tsc_min_x, tsc_max_x, 0, ILI9341_TFTWIDTH);\r\n    x = map(ry,  tsc_min_y, tsc_max_y, 0, ILI9341_TFTHEIGHT);\r\n    if (TFT_ROTATION == 3) {  \/\/ J2\u7aef\u5b50\u5074\u3092\u5de6\u306b\u898b\u305f\u3068\u304d\u5de6\u4e0a\u304c\u30011: (319, 239) or 3 : (0, 0)\u3002\r\n      x = ILI9341_TFTHEIGHT - x;\r\n      y = ILI9341_TFTWIDTH - y;\r\n    }\r\n  }\r\n  return (x &gt;= 0 &amp;&amp; y &gt;= 0);\r\n}\r\n\/\/\r\n\/\/ --------- IR related.\r\n\/\/\r\n#define NEC_T 560\r\n#define AEHA_T  450\t\/\/ 425\r\nstatic int ir_format_T = NEC_T; \/\/ \u57fa\u6e96\u30d5\u30ec\u30fc\u30e0\u6642\u9593\r\n\/\/ system clk = 8MHz. (no prescaler)\r\n\/\/ 38KHz, duty 1:3 (25% on)\r\n\/\/ 26.3us \u00f7 0.125 = 210 : \u5468\u671f\r\n\/\/ 26.3 \u00d7 0.25 \u00f7 0.125 = 52.6 : H\u671f\u9593\r\n\/\/ FastPWM mode. WGM(13-11)=1111\r\nvoid pwm_out(int t_count) {\r\n  TCNT1 = 0;\r\n  TCCR1A = B01100011;  \/\/ Inverted, HIGH at BOTTOM, LOW on match.\r\n  TCCR1B = B00011001; \/\/ ICNC1 = 0, ICES1 = 0, no prescaler.\r\n  OCR1A = 209;  \/\/ TOP value. \r\n  OCR1B = 52;  \/\/  H period of OC1B\r\n  delayMicroseconds(ir_format_T * t_count);\r\n  TCCR1A = B00000000;  \r\n  TCCR1B = B00000000; \r\n}\r\n\r\nvoid send_bit(int value) {\r\n  pwm_out(1);\r\n  delayMicroseconds(value ? ir_format_T * 3 : ir_format_T);\r\n}\r\nvoid send_byte(byte value) {\r\n  send_bit(value &amp; 1);\r\n  send_bit(value &amp; 2);\r\n  send_bit(value &amp; 4);\r\n  send_bit(value &amp; 8);\r\n  send_bit(value &amp; 16);\r\n  send_bit(value &amp; 32);\r\n  send_bit(value &amp; 64);\r\n  send_bit(value &amp; 128);\r\n}\r\nvoid send_leader() {\r\n  if  (ir_format_T == NEC_T) {\r\n    pwm_out(16);\r\n    delayMicroseconds(ir_format_T * 8);   \r\n  } else {\r\n    pwm_out(8);\r\n    delayMicroseconds(ir_format_T * 4);   \r\n  }\r\n}\r\n\/\/ '0'\u30924\u56de\u9001\u4fe1\u3002\r\nvoid send_preframe() {\r\n    for(int i = 0; i &lt; 4; i++)\r\n      send_bit(0);\r\n}\r\nvoid send_trailer() {\r\n  send_bit(0);\r\n  delay(10);\r\n}\r\nvoid send_frame(uint8_t* p, int8_t bytes) {\r\n    send_leader();\r\n    for(int i = 0; i &lt; bytes; i++)\r\n      send_byte(p[i]);\r\n    send_trailer();\r\n}\r\nvoid send_ir_data(int8_t id) {\r\n  bool nec = false;\r\n  int8_t frames = get_ir_frame_info(nec);\r\n  if (frames &gt; 0) {\r\n    ir_format_T = nec ? NEC_T : AEHA_T;\r\n    digitalWrite(LED_PIN, 0); \/\/ back-light off\r\n    for(int8_t i = 1; i &lt;= frames; i++) {\r\n      int8_t bytes = get_ir_frame_size(i);\r\n      uint8_t* p = (uint8_t*)malloc(bytes + 1);\r\n      if (p) {\r\n        if (get_ir_data(id, p, bytes, i)) {\r\n          if (i == 1)\r\n            send_preframe();\r\n          send_frame(p, bytes);\r\n        }\r\n        free(p);\r\n      }\r\n    }\r\n    digitalWrite(LED_PIN, 1); \/\/ back-light on\r\n  }\r\n}\r\n\r\n\/\/ ------- Manipulation\r\nstatic bool action_done = 0;\r\nstatic int8_t last_touched = 0;\r\nstatic void clear_touched() {\r\n  if (last_touched) {\r\n    draw_button(last_touched, false);\r\n    last_touched = 0;\r\n  }\r\n  action_done = 0;\r\n}\r\n\r\n#define LOOP_DELAY  30\r\n#define SLEEP_COUNT (3000 \/ LOOP_DELAY)\r\n#define TOUCH_THRES (300 \/ LOOP_DELAY)\r\n#define REPEAT_THRES (600 \/ LOOP_DELAY)\r\n\r\nvoid isr() {}\r\nstatic int sleep_counter = 0;\r\nstatic int8_t touch_counter = 0;\r\nstatic bool eco = true;\r\n\r\nconst bool eco_mode() { return eco; }\r\nvoid set_eco_mode(bool flag = true) {  eco = flag; }\r\n\r\nstatic void touch_loop() {\r\n  for(;;) {\r\n    delay(LOOP_DELAY);\r\n    if (eco &amp;&amp; sleep_counter &lt; 1) {\r\n      tft.tft_sleep();\r\n      digitalWrite(LED_PIN, 0); \/\/ back-light off.\r\n      attachInterrupt(0, isr, FALLING);\r\n      set_sleep_mode(SLEEP_MODE_PWR_DOWN);\r\n      sleep_enable();\r\n      MCUCR |= 0x60;\r\n      MCUCR = (MCUCR &amp; 0xdf) | 0x40;\r\n      sleep_cpu();  \r\n      detachInterrupt(0);\r\n      digitalWrite(LED_PIN, 1); \/\/ back-light on.\r\n      tft.tft_wakeup();\r\n      sleep_counter = SLEEP_COUNT;\r\n    }\r\n    sleep_counter--;\r\n    int x, y;\r\n    if (!tsc2046_read_pos(x, y)) {\r\n      clear_touched();\r\n      continue;\r\n    }\r\n    int8_t id = button_touched(x, y);\r\n    if (id &lt; 1) {\r\n        clear_touched();\r\n        continue;\r\n    }\r\n    if (last_touched != id) {\r\n      clear_touched();\r\n      draw_button(id, true);\r\n      touch_counter = 0;\r\n      last_touched = id;\r\n      sleep_counter = SLEEP_COUNT;\r\n      continue;\r\n    }\r\n    if (++touch_counter &lt; TOUCH_THRES)\r\n      continue;\r\n    if (action_done) {  \/\/ \u9001\u4fe1\u6e08\r\n      if (!repeat(id)) {\r\n        sleep_counter = SLEEP_COUNT; \r\n        continue;\r\n      } else if (touch_counter &lt; REPEAT_THRES) \r\n        continue;\r\n    }\r\n    if (action_done = panel_action(id)) \/\/ ir \u9001\u51fa\u6642\u306b\u306ftrue\r\n      send_ir_data(id);\r\n    touch_counter = 0;\r\n    sleep_counter = SLEEP_COUNT;\r\n  }\r\n}\r\n\/\/void loop() {}\r\nvoid setup() {\r\n  ADCSRA &amp;= 0x7f;  \/\/ ADC\u7981\u6b62\u3002MSB \u3092 0\u306b\u3002\r\n  ACSR |= 0x80;    \/\/ \u30a2\u30ca\u30ed\u30b0\u30b3\u30f3\u30d1\u30ec\u30fc\u30bf\u7981\u6b62\r\n  delay(50);\r\n  SPI.begin();\r\n  pinMode(TSC2046_SS, OUTPUT);\r\n  digitalWrite(TSC2046_SS, HIGH);\r\n  tsc2046_read_adc(true);\r\n  pinMode(PWM_OC1A, OUTPUT);\r\n  pinMode(PWM_OC1B, OUTPUT);\r\n  digitalWrite(PWM_OC1A, 0);\r\n  digitalWrite(PWM_OC1B, 0);\r\n  pinMode(LED_PIN, OUTPUT);\r\n  digitalWrite(LED_PIN, 0);\r\n  pinMode(2, INPUT_PULLUP);\r\n  pinMode(TFT_RST, OUTPUT);\r\n  digitalWrite(TFT_RST, 0);  \r\n  delay(10);\r\n  digitalWrite(TFT_RST, 1);  \r\n  delay(10);\r\n  tft.begin();\r\n  tft.cp437(true);\r\n  tft.setTextWrap(false);\r\n  tft.setRotation(TFT_ROTATION);\r\n  create_panel();\r\n  digitalWrite(LED_PIN, 1); \/\/ back-light on.\r\n  wdt_disable();\r\n\r\n  touch_loop();\r\n}<\/pre>\n<h2>\u5b9a\u7fa9\u304a\u3088\u3073TFT\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u521d\u671f\u5316<\/h2>\n<p>\u3053\u306e\u3042\u305f\u308a\u306f\u3001<a href=\"https:\/\/okiraku-camera.tokyo\/blog\/?p=6487\">TFT\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u6700\u521d\u306b\u4f7f\u3063\u3066\u307f\u305f\u3068\u304d<\/a>\u3068\u3042\u307e\u308a\u5909\u308f\u3089\u306a\u3044\u3002\u6db2\u6676\u304a\u3088\u3073\u30bf\u30c3\u30c1\u30d1\u30cd\u30eb\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306eSPI\u4fe1\u53f7\u3084\u30b9\u30ec\u30fc\u30d6\u30bb\u30ec\u30af\u30c8\u7528\u30dd\u30fc\u30c8\u306e\u5b9a\u7fa9\u3068\u3001IrLED\u3092\u30c1\u30ab\u30c1\u30ab\u3059\u308b\u305f\u3081\u306ePWM\u30dd\u30fc\u30c8(PWM_OC1A\u304a\u3088\u3073PWM_OC1B)\u3092\u5b9a\u7fa9\u3057\u3066\u3044\u308b\u3002\u306a\u304a\u3001PWM_OC1A (D9)\u306f\u5916\u90e8\u306b\u306f\u63a5\u7d9a\u3057\u3066\u3044\u306a\u3044\u3002<\/p>\n<p>Adafruit_GFX.h\u3068Adafruit_ILI9341.h\u3092\u30a4\u30f3\u30af\u30eb\u30fc\u30c9\u3057\u3001<br \/>\n<span class=\"lang:default decode:true crayon-inline \">Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);<\/span><br \/>\n\u306b\u3088\u3063\u3066\u63cf\u753b\u7528\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u5f97\u3066\u3044\u308b\u3002<\/p>\n<h2>\u30bf\u30c3\u30c1\u30d1\u30cd\u30eb\u5236\u5fa1\u3068\u8aad\u307f\u53d6\u308a<\/h2>\n<p>\u4ee5\u524d\u306f\u30bf\u30c3\u30c1\u30d1\u30cd\u30eb\u95a2\u4fc2\u306e\u6a5f\u80fd\u3092\u72ec\u7acb\u3057\u305f\u30af\u30e9\u30b9\u3068\u3057\u3066\u3044\u305f\u304c\u3001\u5fc5\u8981\u306a\u90e8\u5206\u3060\u3051\u3092\u30e1\u30a4\u30f3\u30e2\u30b8\u30e5\u30fc\u30eb\u5185\u306b\u30d9\u30bf\u30c3\u3068\u66f8\u304f\u3053\u3068\u306b\u3057\u305f\u3002\u5185\u5bb9\u306b\u3064\u3044\u3066\u306f\u3001\u4e0a\u306b\u3042\u3052\u305f\u30ea\u30f3\u30af\u5148\u3092\u53c2\u7167\u3002<\/p>\n<h2>\u8d64\u5916\u7dda\u51fa\u529b\u95a2\u4fc2<\/h2>\n<p>NEC\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3068AEHA\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u308b\u3002\u306a\u304a\u3001\u4eca\u56de\u5bfe\u5fdc\u3057\u305f\u5bb6\u96fb\u7528\u30ea\u30e2\u30b3\u30f3\u306b\u5408\u308f\u305b\u3066\u3001\u3053\u306e\u30ea\u30e2\u30b3\u30f3\u3067\u306eAEHA\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u57fa\u6e96T\u6642\u9593\u306f450\u03bc\u79d2\u3068\u3057\u305f\u3002\u8d64\u5916\u7dda\u30ea\u30e2\u30b3\u30f3\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306b\u3064\u3044\u3066\u306f\u3001<a href=\"https:\/\/okiraku-camera.tokyo\/blog\/?p=4854\">\u3053\u3061\u3089\u306e\u8a18\u4e8b<\/a>\u3092\u53c2\u7167\u3002<\/p>\n<h3>pwm_out();<\/h3>\n<p>ATMega328P\u306eTC1 ( Timer Counter 1) \u306eFast PWM\u30e2\u30fc\u30c9\u306b\u3088\u3063\u3066\u30c7\u30e5\u30fc\u30c6\u30a3\u6bd41:3 (25%\u30aa\u30f3)\u306e38KHz\u3067IrLED\u3092\u30c1\u30ab\u30c1\u30ab\u3055\u305b\u308b\u3002TC1\u306eFast PWM\u306b\u3064\u3044\u3066\u306f<a href=\"https:\/\/okiraku-camera.tokyo\/blog\/?p=6352\">\u3061\u3087\u3063\u3068\u524d\u306b\u4f5c\u3063\u305f\u30ea\u30e2\u30b3\u30f3<\/a>\u3068\u540c\u3058\u306b\u3057\u305f\u3002<\/p>\n<p>\u30bd\u30fc\u30b9\u306e\u30b3\u30e1\u30f3\u30c8\u3068\u3057\u3066\u3001<\/p>\n<pre class=\"nums:false lang:default decode:true\">\/\/ 26.3us \u00f7 0.125 = 210 : \u5468\u671f\r\n\/\/ 26.3us \u00d7 0.25 \u00f7 0.125 = 52.6 : H\u671f\u9593<\/pre>\n<p>\u3068\u66f8\u3044\u3066\u3042\u308b\u304c\u3053\u306e\u610f\u5473\u306f\u3001<\/p>\n<ul>\n<li>38KHz\u4fe1\u53f7\u306e\u5468\u671f\u306f26.3\u03bc\u79d2\u3002<\/li>\n<li>8MHz\u30af\u30ed\u30c3\u30af(\u30d7\u30ea\u30b9\u30b1\u30fc\u30e9\u7121\u3057)\u306e\u5468\u671f\u306f0.125\u03bc\u79d2\u3002<\/li>\n<li>\u3057\u305f\u304c\u3063\u3066\u30011\u5468\u671f\u306f26.3us \u00f7 0.125 = 210\u30af\u30ed\u30c3\u30af\u3002<\/li>\n<li>\u305d\u306e\u3046\u3061\u3001\u30aa\u30f3\u306b\u306a\u308b\u306e\u306f25%\u306a\u306e\u3067\u300126.3us \u00d7 0.25 \u00f7 0.125 = 52.6\u30af\u30ed\u30c3\u30af\u3002<\/li>\n<\/ul>\n<p>\u3068\u3044\u3046\u3053\u3068\u3067\u3001\u3053\u308c\u3089\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3092OCR1A\/B\u306e\u5404\u30ec\u30b8\u30b9\u30bf\u306b\u30bb\u30c3\u30c8\u3057\u3066\u3044\u308b(\u30ab\u30a6\u30f3\u30c8\u30a2\u30c3\u30d7\u306f0\u304b\u3089\u958b\u59cb\u3059\u308b\u306e\u3067\u3001-1)\u3002<br \/>\n\u524d\u306b\u3082\u66f8\u3044\u305f\u306e\u3060\u3051\u3069\u3001LED\u304c\u5b9f\u969b\u306b\u70b9\u706f\u3057\u3066\u3044\u308b\u6642\u9593\u304c\u77ed\u3051\u308c\u3070\u305d\u308c\u3060\u3051\u7701\u96fb\u529b\u306b\u306a\u308b\u300225%\u30aa\u30f3\u306e\u4fe1\u53f7\u3067\u3082\u5bfe\u8c61\u306e\u5bb6\u96fb\u306f\u554f\u984c\u306a\u304f\u52d5\u4f5c\u3057\u3066\u3044\u308b\u3002<\/p>\n<p>PWM\u51fa\u529b\u3092\u958b\u59cb\u3057\u3001 <span class=\"lang:default decode:true crayon-inline\">delayMicroseconds(ir_format_T * t_count); <\/span>\u00a0\u306b\u3088\u3063\u3066\u57fa\u6e96\u6642\u9593 \u00d7 t_count \u306e\u9593\u3001PWM_OC1B\u30dd\u30fc\u30c8\u306b\u6ce2\u5f62\u3092\u51fa\u529b\u3057\u3066\u7d42\u308f\u308b\u3002PWM_OC1B\u30dd\u30fc\u30c8\u306f\u524d\u56de\u8f09\u305b\u305f\u56de\u8def\u56f3\u306e\u30c8\u30e9\u30f3\u30b8\u30b9\u30bf(2SC1815)\u306e\u30d9\u30fc\u30b9\u306b\u63a5\u7d9a\u3057\u3066\u3044\u308b\u306e\u3067\u3001\u7d50\u679c\u3068\u3057\u3066IrLED\u304c\u30c1\u30ab\u30c1\u30ab\u3059\u308b\u3002<br \/>\n1\u30d3\u30c3\u30c8\u306e\u60c5\u5831\u3092\u9001\u4fe1\u3059\u308b\u3068\u304d\u306et_count\u306f\u5e38\u306b1\u3060\u304c\u3001\u30ea\u30fc\u30c0\u30fc\u3068\u547c\u3070\u308c\u308b\u90e8\u5206\u3067\u306f\u3001\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3054\u3068\u306b\u7570\u306a\u308b\u9577\u3055\u3092\u4e0e\u3048\u308b\u5fc5\u8981\u304c\u3042\u308b\u3002<\/p>\n<h3>\u30c7\u30fc\u30bf\u30d5\u30ec\u30fc\u30e0\u9001\u4fe1\u90e8\u5206<\/h3>\n<p>\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306e <strong>send_bit(); send_byte();\u00a0send_leader();\u00a0send_trailer();\u00a0\u00a0send_frame();<\/strong> \u306b\u3088\u308a\u3001\u5bb6\u96fb\u306b\u5bfe\u3059\u308b\u30ea\u30e2\u30b3\u30f3\u306e\u4fe1\u53f7\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306b\u5408\u308f\u305b\u3066\u30b3\u30de\u30f3\u30c9\u30c7\u30fc\u30bf\u5217(\u30c7\u30fc\u30bf\u30d5\u30ec\u30fc\u30e0)\u3092\u9001\u4fe1\u3057\u3066\u3044\u308b\u3002<\/p>\n<p>\u8d64\u5916\u7dda\u30ea\u30e2\u30b3\u30f3\u306e1\u30d0\u30a4\u30c8(8\u30d3\u30c3\u30c8)\u306e\u30c7\u30fc\u30bf\u306f\u30011\u30d3\u30c3\u30c8\u305a\u3064LSB\u304b\u3089\u9806\u306b<span class=\"lang:default decode:true crayon-inline \"> pwm_out(); <\/span>\u00a0\u3068\u305d\u306e\u5f8c\u306e\u7121\u4fe1\u53f7\u671f\u9593\u306e\u7d44\u5408\u305b\u306b\u3088\u3063\u3066\u9001\u51fa\u3055\u308c\u308b\u3002\u3051\u3063\u3053\u3046\u30ce\u30f3\u30d3\u30ea\u3057\u305f\u901a\u4fe1\u3067\u3042\u308b\u3053\u3068\u304c\u5206\u304b\u308b\u3002<\/p>\n<p>\u30ea\u30fc\u30c0\u30fc\u90e8\u5206\u306e\u70b9\u6ec5\u6642\u9593\u3001\u7121\u4fe1\u53f7\u6642\u9593\u306e\u5404\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u3001\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306b\u3088\u3063\u3066\u7570\u306a\u3063\u3066\u3044\u308b\u306e\u3067\u5206\u3051\u3066\u3044\u308b\u3002<span class=\"lang:default decode:true crayon-inline \">send_trailer() <\/span>\u00a0\u5185\u306e\u7121\u4fe1\u53f7\u6642\u9593\u306fAEHA\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306b\u306e\u307f\u5fc5\u8981\u3060\u304c\u3001NEC\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u306f\u4f59\u8a08\u306a\u3060\u3051\u3067\u554f\u984c\u306f\u751f\u3058\u306a\u3044\u3088\u3046\u3060\u3063\u305f\u3002<\/p>\n<p><span class=\"lang:default decode:true crayon-inline \">send_frame(); <\/span>\u00a0\u95a2\u6570\u304c\u8907\u6570\u30d0\u30a4\u30c8\u304b\u3089\u306a\u308b\u30c7\u30fc\u30bf\u5217\u3092\u9001\u4fe1\u3059\u308b\u90e8\u5206\u306b\u306a\u3063\u3066\u304a\u308a\u3001\u5bfe\u8c61\u5bb6\u96fb\u306b\u5fdc\u3058\u3066\u5185\u5bb9\u3084\u30d0\u30a4\u30c8\u6570\u3092\u30d1\u30e9\u30e1\u30fc\u30bf\u3068\u3057\u3066\u6307\u5b9a\u3059\u308b\u3002\u4eca\u56de\u5bfe\u8c61\u306b\u3057\u305f\u30a8\u30a2\u30b3\u30f3\u306f\u8907\u6570\u306e\u30c7\u30fc\u30bf\u30d5\u30ec\u30fc\u30e0\u3092\u5fc5\u8981\u3068\u3059\u308b\u304c\u3001\u3053\u306e\u95a2\u6570\u3092\u8907\u6570\u56de\u547c\u3073\u51fa\u3059\u3053\u3068\u3067\u5bfe\u5fdc\u3057\u3066\u3044\u308b\u3002<\/p>\n<h3>void send_ir_data(int8_t id)<\/h3>\n<p>\u5f15\u6570\u3068\u3057\u3066\u3001\u30bf\u30c3\u30c1\u3055\u308c\u9078\u629e\u3055\u308c\u305f\u3068\u307f\u306a\u3059\u30dc\u30bf\u30f3\u306eID\u3092\u4e0e\u3048\u308b\u3068\u3001rcPanel.h \u304c\u4fdd\u6301\u3057\u3066\u3044\u308b\u300c\u73fe\u5728\u306e\u64cd\u4f5c\u30d1\u30cd\u30eb\u300d\u306b\u304a\u3051\u308b\u30dc\u30bf\u30f3ID\u306b\u5bfe\u5fdc\u3059\u308b\u30c7\u30fc\u30bf\u30d5\u30ec\u30fc\u30e0\u60c5\u5831\u3092\u53d6\u308a\u51fa\u3057\u3001\u9001\u4fe1\u3092\u884c\u3046\u3002<\/p>\n<p>\u30c7\u30fc\u30bf\u30d5\u30ec\u30fc\u30e0\u60c5\u5831\u306b\u306f\u3001\u30c7\u30fc\u30bf\u30d5\u30ec\u30fc\u30e0\u6570\u3001\u8d64\u5916\u7dda\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3001\u30c7\u30fc\u30bf\u30d5\u30ec\u30fc\u30e0\u306e\u30d0\u30a4\u30c8\u6570\u3001\u305d\u3057\u3066\u30c7\u30fc\u30bf\u30d5\u30ec\u30fc\u30e0\u3092\u69cb\u6210\u3059\u308b\u30d0\u30a4\u30c8\u5217\u304c\u542b\u307e\u308c\u308b\u3002\u4eca\u56de\u306e\u30a8\u30a2\u30b3\u30f3\u306e\u5834\u5408\u7b2c1\u30d5\u30ec\u30fc\u30e0\u3068\u7b2c2\u30d5\u30ec\u30fc\u30e0\u3068\u3067\u30d0\u30a4\u30c8\u6570\u3082\u7570\u306a\u308b\u306e\u3067\u3001\u3053\u306e\u3088\u3046\u306a\u5b9f\u88c5\u306b\u306a\u3063\u3066\u3044\u308b\u3002\u60c5\u5831\u3092\u8fd4\u3059\u5404\u95a2\u6570\u306b\u3064\u3044\u3066\u306frcPanel.h \u306e\u9805\u3067\u3002\u306a\u304a\u3001\u30c7\u30fc\u30bf\u30d5\u30ec\u30fc\u30e0\u6570\u304c 0 \u500b\u306e\u5834\u5408\u306f\u4f55\u3082\u3057\u306a\u3044\u3002<\/p>\n<p><span class=\"lang:default decode:true crayon-inline \">digitalWrite(LED_PIN, 0 or 1); <\/span>\u00a0\u306b\u3088\u308a\u3001\u30c7\u30fc\u30bf\u30d5\u30ec\u30fc\u30e0\u306e\u53d6\u5f97\u304b\u3089\u9001\u4fe1\u306e\u3042\u3044\u3060\u3001TFT\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30d0\u30c3\u30af\u30e9\u30a4\u30c8\u3092\u30aa\u30d5\u306b\u3057\u3001\u6d88\u8cbb\u96fb\u6d41\u3092\u6291\u3048\u308b\u3068\u3068\u3082\u306b\u3001\u64cd\u4f5c\u306b\u5bfe\u3059\u308b\u8996\u899a\u7684\u306a\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u3092\u884c\u3063\u3066\u3044\u308b\u3002\u30dc\u30bf\u30f3\u3092\u30bf\u30c3\u30c1\u3057\u305f\u3064\u3082\u308a\u306a\u306e\u306b\u5bfe\u8c61\u306e\u5bb6\u96fb\u304c\u53cd\u5fdc\u3057\u306a\u3044\u3068\u304d\u3001\u30db\u30f3\u30c8\u306b\u52d5\u3044\u3066\u3093\u306e\u304b\u306a\uff1f\u3068\u304b\u611f\u3058\u304c\u3061\u306a\u306e\u3067\u3002<\/p>\n<p>\u6bce\u5ea6\u6bce\u5ea6malloc() \u3059\u308b\u3088\u308a\u9069\u5f53\u306a\u5927\u304d\u3055\u306e\u30d0\u30c3\u30d5\u30a1\u3092\u6301\u3064\u65b9\u304c\u3088\u3055\u305d\u3046\u306a\u6c17\u3082\u3059\u308b\u304c\u3001\u30e1\u30a4\u30f3\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u5bfe\u5fdc\u3059\u308b\u5bb6\u96fb\u3054\u3068\u306e\u8a73\u7d30\u60c5\u5831(\u30c7\u30fc\u30bf\u30d5\u30ec\u30fc\u30e0\u306e\u6570\u3084\u30d0\u30a4\u30c8\u6570)\u304b\u3089\u72ec\u7acb\u3055\u305b\u308b\u305f\u3081\u306b\u3053\u306e\u3088\u3046\u306b\u3057\u305f\u3002<\/p>\n<h2>\u64cd\u4f5c\u95a2\u4fc2\u3068\u30e1\u30a4\u30f3\u30eb\u30fc\u30d7<\/h2>\n<p>TFT\u6db2\u6676\u4e0a\u306b\u63cf\u753b\u3057\u305f\u77e9\u5f62\u3084\u5186\u5f62\u306e\u9818\u57df(\u30dc\u30bf\u30f3)\u306e\u30bf\u30c3\u30c1\u3092\u691c\u51fa\u3057\u3001\u4e00\u5b9a\u6642\u9593\u305d\u306e\u9818\u57df\u5185\u3078\u306e\u30bf\u30c3\u30c1\u304c\u7d9a\u3044\u305f\u5834\u5408\u306f\u3001\u305d\u306e\u30dc\u30bf\u30f3\u304c\u9078\u629e\u3055\u308c\u305f\u3068\u307f\u306a\u3057\u3066<strong>\u30a2\u30af\u30b7\u30e7\u30f3<\/strong>\u3092\u8d77\u3053\u3059\u3002\u3053\u3053\u3067\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u3068\u306f\u3001\u8d64\u5916\u7dda\u3092\u4fe1\u53f7\u3092\u9001\u4fe1\u3057\u305f\u308a\u64cd\u4f5c\u30d1\u30cd\u30eb\u4e0a\u306e\u8868\u793a\u3092\u5909\u66f4\u3057\u305f\u308a\u3059\u308b\u3053\u3068\u3002\u4e0a\u306b\u8f09\u305b\u305f\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306e155\u884c\u76ee\u4ee5\u964d\u304c\u64cd\u4f5c\u5236\u5fa1\u3092\u884c\u3063\u3066\u3044\u308b\u90e8\u5206\u306b\u306a\u308b\u3002<\/p>\n<p>\u9818\u57df\u5185\u304c\u30bf\u30c3\u30c1\u3055\u308c\u305f\u77ac\u9593\u306b\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u8d77\u3053\u3057\u305f\u306e\u3067\u306f\u8aa4\u64cd\u4f5c\u3060\u3089\u3051\u306b\u306a\u3063\u3066\u3057\u307e\u3046\u3002\u3069\u306e\u7a0b\u5ea6\u30bf\u30c3\u30c1\u3057\u7d9a\u3051\u308c\u3070\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u8d77\u3053\u3059\u306e\u304b\u306f\u3001\u524d\u56de\u8f09\u305b\u305f\u52d5\u753b\u3067\u78ba\u8a8d\u3067\u304d\u308b\u3068\u601d\u3046\u3002<\/p>\n<p>\u64cd\u4f5c\u5236\u5fa1\u306f\u3001<span class=\"lang:default decode:true crayon-inline \">void touch_loop() <\/span>\u00a0\u3068\u3044\u3046\u7121\u9650\u30eb\u30fc\u30d7\u3092\u3082\u3064\u95a2\u6570\u3068\u305d\u306e\u5468\u8fba\u306e\u95a2\u6570\u3084\u5909\u6570\u3067\u884c\u3063\u3066\u3044\u308b\u3002Arduino \u306e\u30b9\u30b1\u30c3\u30c1\u306b\u306f void loop(); \u3068\u3044\u3046\u7121\u9650\u30eb\u30fc\u30d7\u3059\u308b\u95a2\u6570\u304c\u3042\u3089\u304b\u3058\u3081\u7528\u610f\u3055\u308c\u3066\u3044\u308b\u306e\u3060\u3051\u3069\u3001\u30eb\u30fc\u30d7\u5185\u3067 <span class=\"lang:default decode:true crayon-inline \">continue;<\/span>\u00a0 \u00a0\u3068\u66f8\u304d\u305f\u304b\u3063\u305f\u306e\u3067 for(;;) {} \u3092\u4f7f\u3063\u305f\u7121\u9650\u30eb\u30fc\u30d7\u3092\u4f5c\u308b\u3053\u3068\u306b\u3057\u305f\u3002<\/p>\n<p>\u3053\u306e\u7121\u9650\u30eb\u30fc\u30d7\u306f\u3001\u6700\u521d\u306b\u304a\u3044\u305f <span class=\"lang:default decode:true crayon-inline \">delay(LOOP_DELAY);<\/span>\u00a0\u00a0\u306b\u3088\u308a\u3001 <em>LOOP_DELAY<\/em> \u30df\u30ea\u79d2\u306b\u4e00\u5ea6\u56de\u308b\u3088\u3046\u306b\u3057\u3066\u304a\u308a\u3001\u30bf\u30c3\u30c1\u30d1\u30cd\u30eb\u304b\u3089\u306e\u8aad\u51fa\u3057\u3084\u305d\u306e\u5f8c\u306e\u30bf\u30c3\u30c1\u3055\u308c\u305f\u9818\u57df\u306e\u8a55\u4fa1\u3082\u305d\u306e\u30bf\u30a4\u30df\u30f3\u30b0\u3067\u884c\u3063\u3066\u3044\u308b\u3002\u30ad\u30fc\u30dc\u30fc\u30c9\u3067\u3044\u3048\u3070\u4e00\u5b9a\u6642\u9593\u3054\u3068\u306b\u30de\u30c8\u30ea\u30c3\u30af\u30b9\u30b9\u30ad\u30e3\u30f3\u3057\u3066\u3044\u308b\u3088\u3046\u306a\u3082\u306e\u3002<\/p>\n<h3>\u64cd\u4f5c\u95a2\u4fc2\u306e\u5909\u6570\u3068\u5b9a\u7fa9<\/h3>\n<p>SRAM\u9818\u57df\u3092\u7bc0\u7d04\u3059\u308b\u305f\u3081\u3001\u5909\u6570\u306e\u30d0\u30a4\u30c8\u6570\u3092\u30b1\u30c1\u3063\u3066\u5ba3\u8a00\u3057\u3066\u3044\u308b\u3002<\/p>\n<ul>\n<li><strong>static bool action_done<\/strong><br \/>\n\u30e1\u30a4\u30f3\u30eb\u30fc\u30d7\u3067\u30dc\u30bf\u30f3\u306e\u9078\u629e\u3092\u691c\u51fa\u3057\u305f\u5834\u5408\u3001\u305d\u306e\u30dc\u30bf\u30f3\u306b\u3088\u308b\u64cd\u4f5c\u30d1\u30cd\u30eb\u306e\u66f4\u65b0\u306e\u5b9f\u884c\u3084\u3001\u8d64\u5916\u7dda\u4fe1\u53f7\u3092\u9001\u51fa\u3059\u308b\u304b\u3069\u3046\u304b\u3092\u554f\u3044\u5408\u308f\u305b\u308b\u305f\u3081\u306b\u3001\u64cd\u4f5c\u30d1\u30cd\u30eb\u5074\u306e<span class=\"lang:default decode:true crayon-inline \"> panel_action(); <\/span>\u00a0\u3092\u547c\u3073\u51fa\u3059\u3002\u3053\u306e\u5909\u6570\u306f\u305d\u306e\u623b\u308a\u5024\u3092\u4fdd\u6301\u3059\u308b\u3002<br \/>\naction_done\u306e\u5024\u306b\u3088\u308a\u3001\u30ea\u30d4\u30fc\u30c8\u52d5\u4f5c\u3059\u308b\u304b\u3069\u3046\u304b\u3092\u6c7a\u3081\u308b\u3002<\/li>\n<li><strong>static int8_t last_touched ;<\/strong><br \/>\n\u73fe\u5728\u30bf\u30c3\u30c1\u304c\u7d9a\u3044\u3066\u3044\u308b\u30dc\u30bf\u30f3ID\u3092\u4fdd\u6301\u3059\u308b\u3002\u30dc\u30bf\u30f3ID\u306f1\u4ee5\u4e0a\u306e\u6574\u6570(int8_t)\u3067\u3042\u308a\u30010\u306e\u5834\u5408\u306f\u30bf\u30c3\u30c1\u304c\u59cb\u307e\u3063\u3066\u3044\u306a\u3044\u72b6\u614b\u3068\u3044\u3046\u3053\u3068\u306b\u306a\u308b\u3002<\/li>\n<li><strong>static int sleep_counter ;<br \/>\n<\/strong>\u3053\u306e\u5909\u6570\u306f\u3001\u30e1\u30a4\u30f3\u30eb\u30fc\u30d7\u304c\u56de\u3063\u3066\u3044\u308b\u3068\u304d\u5e38\u306b\u30c7\u30af\u30ea\u30e1\u30f3\u30c8\u3055\u308c\u7d9a\u3051\u308b\u3002eco\u30e2\u30fc\u30c9\u306e\u3068\u304d\u3001\u3053\u306e\u5909\u6570\u306e\u5024\u304c1\u672a\u6e80\u306b\u306a\u308b\u3068\u30de\u30a4\u30b3\u30f3\u3001\u6db2\u6676\u3092\u30b9\u30ea\u30fc\u30d7\u3055\u305b\u30d0\u30c3\u30af\u30e9\u30a4\u30c8\u3092\u6d88\u706f\u3059\u308b\u3002<br \/>\n\u521d\u671f\u5024\u3068\u3057\u3066<strong>\u30b9\u30ea\u30fc\u30d7\u7336\u4e88\u30ab\u30a6\u30f3\u30c8 <\/strong>(<em>SLEEP_COUNT<\/em>) \u3092\u3082\u3064\u3002\u30b9\u30ea\u30fc\u30d7\u304b\u3089\u306e\u5fa9\u5e30\u6642\u3001\u30bf\u30c3\u30c1\u306e\u691c\u51fa\u6642\u3001\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u5b9f\u884c\u6642\u306b\u521d\u671f\u5024\u304c\u30bb\u30c3\u30c8\u3055\u308c\u308b\u3002<\/li>\n<li><strong>static int8_t touch_counter ;<br \/>\n<\/strong>\u540c\u3058\u30dc\u30bf\u30f3\u304c\u30bf\u30c3\u30c1\u3055\u308c\u7d9a\u3051\u3066\u3044\u308b\u3068\u304d\u306b\u30a4\u30f3\u30af\u30ea\u30e1\u30f3\u30c8\u3055\u308c\u3001\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u8d77\u3053\u3059\u3079\u304d\u30ab\u30a6\u30f3\u30c8\u5024(<strong>TOUCH_THRES<\/strong>)\u4ee5\u4e0a\u306b\u306a\u3063\u305f\u304b\u3069\u3046\u304b\u306e\u5224\u5b9a\u306b\u4f7f\u3046\u30ab\u30a6\u30f3\u30bf\u30fc\u3002<br \/>\n\u30ea\u30d4\u30fc\u30c8\u52d5\u4f5c\u3059\u308b\u30dc\u30bf\u30f3\u304c\u30bf\u30c3\u30c1\u3055\u308c\u7d9a\u3051\u3066\u3044\u308b\u3068\u304d\u3001\u4e8c\u56de\u76ee\u4ee5\u964d\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u8d77\u3053\u3059\u305f\u3081\u306b\u306f\u3001\u3055\u3089\u306b\u5927\u304d\u306a\u30ab\u30a6\u30f3\u30c8\u5024(<strong>REPEAT_THRES<\/strong>)\u306b\u9054\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3002<strong><br \/>\n<\/strong><\/li>\n<li><strong>static bool eco ;<br \/>\n<\/strong>\u30e1\u30cb\u30e5\u30fc\u30d1\u30cd\u30eb\u306b\u304a\u3044\u3066\u30bb\u30c3\u30c8\u3059\u308b<strong>eco\u30e2\u30fc\u30c9<\/strong>\u30d5\u30e9\u30b0\u3002\u3053\u306e\u30d5\u30e9\u30b0\u304ctrue\u3067<em>sleep_counter\u00a0<\/em>\u304c1\u672a\u6e80\u306b\u306a\u308b\u3068\u3001\u5168\u4f53\u3092\u30b9\u30ea\u30fc\u30d7\u3055\u305b\u308b\u3002<\/li>\n<li><strong>#define LOOP_DELAY 30<br \/>\n<\/strong>\u30e1\u30a4\u30f3\u30eb\u30fc\u30d7\u3092\u56de\u3059\u9593\u9694\u6642\u9593(msec\u5358\u4f4d)\u3002<br \/>\n\u4ee5\u4e0b\u306e3\u3064\u306e\u5b9a\u7fa9\u306f\u3001<em>sleep_counter,\u00a0 touch_counter<\/em> \u3067\u7528\u3044\u308b\u5b9a\u6570\u306b\u306a\u308b\u304c\u3001\u6642\u9593(msec\u5358\u4f4d)\u3092 <em>LOOP_DELAY\u00a0<\/em>\u3067\u5272\u308b\u3053\u3068\u3067\u30eb\u30fc\u30d7\u306e\u56de\u6570\u3068\u3057\u3066\u3044\u308b\u3002<\/li>\n<li><strong>#define SLEEP_COUNT (3000 \/ LOOP_DELAY)<br \/>\n\u30b9\u30ea\u30fc\u30d7\u7336\u4e88\u30ab\u30a6\u30f3\u30c8<\/strong>\u3002eco\u30e2\u30fc\u30c9\u306e\u3068\u304d\u30b9\u30ea\u30fc\u30d7\u306b\u5165\u308b\u307e\u3067\u306e\u30ab\u30a6\u30f3\u30c8\u5024\u3002\u6700\u5f8c\u306e\u30bf\u30c3\u30c1\u64cd\u4f5c\u304b\u30893000msec\u5f8c\u3001\u3064\u307e\u308a\u30e1\u30a4\u30f3\u30eb\u30fc\u30d7\u304c100\u56de\u307e\u308f\u308b\u3068\u30b9\u30ea\u30fc\u30d7\u3059\u308b\u3053\u3068\u306b\u306a\u308b\u3002<\/li>\n<li><strong>#define TOUCH_THRES (300 \/ LOOP_DELAY)<br \/>\n\u9078\u629e\u9045\u5ef6\u30ab\u30a6\u30f3\u30c8<\/strong>\u3002\u30dc\u30bf\u30f3\u9818\u57df\u5185\u3092\u30bf\u30c3\u30c1\u3057\u7d9a\u3051\u305f\u3068\u304d\u3001\u305d\u306e\u30dc\u30bf\u30f3\u304c\u9078\u629e\u3055\u308c\u3066\u30a2\u30af\u30b7\u30e7\u30f3\u304c\u8d77\u304d\u308b\u307e\u3067\u306e\u30ab\u30a6\u30f3\u30c8\u5024\u3002300msec\u3067\u9078\u629e\u3068\u3057\u3066\u3044\u308b\u3002<\/li>\n<li><strong>#define REPEAT_THRES (600 \/ LOOP_DELAY)<br \/>\n\u30ea\u30d4\u30fc\u30c8\u9045\u5ef6\u30ab\u30a6\u30f3\u30c8\u3002<\/strong>\u30ea\u30d4\u30fc\u30c8\u52d5\u4f5c\u304c\u6709\u52b9\u306a\u30dc\u30bf\u30f3\u3067\u306f\u3001\u521d\u56de\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u304b\u3089600msec\u5f8c\u306b\u6b21\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u8d77\u3053\u3059\u3053\u3068\u306b\u306a\u308b\u3002<\/li>\n<\/ul>\n<p>\u3053\u306e\u3042\u305f\u308a\u306e\u6570\u5b57\u306f\u3001\u4f7f\u7528\u611f\u306b\u5fdc\u3058\u3066\u3051\u3063\u3053\u3046\u5909\u66f4\u3057\u3066\u3044\u308b\u3002\u3057\u304b\u3057\u306a\u304c\u3089\u3001\u30ab\u30a6\u30f3\u30c8\u5024\u3092\u5909\u66f4\u3059\u308b\u305f\u3081\u306e\u64cd\u4f5c\u3092\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u4f5c\u308a\u8fbc\u3080\u307b\u3069\u3067\u306f\u306a\u3044\u304b\u306a\u3068\u3044\u3063\u305f\u3068\u3053\u308d\u3002<\/p>\n<h3>void touch_loop()<\/h3>\n<p>setup() \u304b\u3089\u547c\u3070\u308c\u308b\u30e1\u30a4\u30f3\u30eb\u30fc\u30d7\u3002\u4ee5\u4e0b\u3092\u5b9f\u884c\u3059\u308b\u3002<\/p>\n<p>\u5148\u982d\u306e <span class=\"lang:default decode:true crayon-inline \"> delay(LOOP_DELAY); <\/span>\u00a0\u306b\u3088\u308a\u3001<em>LOOP_DELAY<\/em> (msec)\u3054\u3068\u306b\u30eb\u30fc\u30d7\u3092\u4e00\u5ea6\u56de\u3059\u3002<\/p>\n<p>eco\u30e2\u30fc\u30c9\u306a\u3089\u3070TFT\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u30b9\u30ea\u30fc\u30d7\u3055\u305b\u3001\u30d0\u30c3\u30af\u30e9\u30a4\u30c8\u3092\u6d88\u3057\u305f\u3042\u3068\u30de\u30a4\u30b3\u30f3\u3092\u30b9\u30ea\u30fc\u30d7 (<em>SLEEP_MODE_PWR_DOWN<\/em>) \u3055\u305b\u308b\u3002\u30bf\u30c3\u30c1\u30d1\u30cd\u30eb\u3092\u4e00\u5ea6\u30bf\u30c3\u30c1\u3059\u308b\u3053\u3068\u3067\u751f\u3058\u308b\u5272\u8fbc\u307f\u306b\u3088\u308a\u3001\u30b9\u30ea\u30fc\u30d7\u304b\u3089\u5fa9\u5e30\u3057\u3001TFT\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u56de\u5fa9\u3068\u30d0\u30c3\u30af\u30e9\u30a4\u30c8\u306e\u70b9\u706f\u3092\u884c\u3046\u3002<br \/>\n\u306a\u304a\u3001<em>tft_sleep(), tft_wakeup()<\/em> \u3068\u3044\u3046\u30e1\u30bd\u30c3\u30c9\u306f\u3001\u524d\u306b\u66f8\u3044\u305f\u3088\u3046\u306bAdafruit_ili9341.h \u306b\u52dd\u624b\u306b\u8ffd\u52a0\u3057\u305f\u3002<\/p>\n<p><span class=\"lang:default decode:true crayon-inline\">tsc2046_read_pos(x, y);<\/span>\u00a0 \u306b\u3088\u308a\u3001\u30bf\u30c3\u30c1\u30d1\u30cd\u30eb\u304b\u3089\u30bf\u30c3\u30c1\u4f4d\u7f6e\u306e\u8aad\u307f\u51fa\u3057\u3092\u884c\u3046\u3002\u62bc\u5727\u304c\u898f\u5b9a\u5024\u3088\u308a\u5c0f\u3055\u3051\u308c\u3070(\u3042\u308b\u3044\u306f\u30bf\u30c3\u30c1\u3055\u308c\u3066\u3044\u306a\u3051\u308c\u3070)\u3001\u30eb\u30fc\u30d7\u306e\u5148\u982d\u306b\u623b\u308b\u3002<\/p>\n<p>\u30bf\u30c3\u30c1\u3055\u308c\u305f\u4f4d\u7f6e\u304c\u30dc\u30bf\u30f3\u9818\u57df\u306b\u3042\u308b\u304b\u3069\u3046\u304b\u3092rcPanel.h \u306b\u3042\u308b <span class=\"lang:default decode:true crayon-inline \">button_touched(x, y);<\/span>\u00a0 \u00a0\u3092\u547c\u3093\u3067\u554f\u3044\u5408\u308f\u305b\u308b\u3002\u3044\u305a\u308c\u304b\u306e\u30dc\u30bf\u30f3\u9818\u57df\u5185\u306a\u3089\u3070\u30dc\u30bf\u30f3ID\u304c\u5f97\u3089\u308c\u308b\u3057\u3001\u9818\u57df\u5916\u306a\u3089 0 \u304c\u623b\u308b\u3002<\/p>\n<p>\u30dc\u30bf\u30f3ID\u304c\u5f97\u3089\u308c\u305f\u5834\u5408\u3001\u540c\u4e00\u306e\u30dc\u30bf\u30f3\u304c\u30bf\u30c3\u30c1\u4e2d\u304b\u3069\u3046\u304b(\u3042\u308b\u3044\u306f\u3001\u306f\u3058\u3081\u3066\u30bf\u30c3\u30c1\u3055\u308c\u305f\u304b)\u3092\u8a55\u4fa1\u3059\u308b\u3002\u6700\u521d\u306e\u30bf\u30c3\u30c1\u306a\u3089\u3070 rcPanel.h\u306e<span class=\"lang:default decode:true crayon-inline \"> draw_button(id, true);<\/span>\u00a0\u00a0\u3092\u547c\u3093\u3067\u3001\u30bf\u30c3\u30c1\u4e2d\u3068\u5206\u304b\u308b\u3088\u3046\u306b\u63cf\u753b\u3057\u76f4\u3057\u3066\u30bf\u30c3\u30c1\u7d99\u7d9a\u6642\u9593\u3092\u3082\u3064\u5909\u6570\u00a0<em>touch_counter<\/em> \u3092\u521d\u671f\u5316\u3059\u308b\u3002\u306a\u304a\u3001\u64cd\u4f5c\u30d1\u30cd\u30eb\u306e\u4e2d\u3067\u30bf\u30c3\u30c1\u4e2d\u3068\u306a\u308b\u30dc\u30bf\u30f3\u306f1\u3064\u3060\u3051\u3068\u3057\u3066\u3044\u308b\u3002<br \/>\n\u305d\u308c\u307e\u3067\u30bf\u30c3\u30c1\u3055\u308c\u3066\u3044\u305f\u30dc\u30bf\u30f3\u304b\u3089\u5916\u308c\u305f(\u5225\u306e\u30dc\u30bf\u30f3\u304c\u30bf\u30c3\u30c1\u3055\u308c\u305f\u3001\u30dc\u30bf\u30f3\u9818\u57df\u5916\u304c\u30bf\u30c3\u30c1\u3055\u308c\u305f\u3001\u4f55\u3082\u30bf\u30c3\u30c1\u3055\u308c\u3066\u3044\u306a\u3044)\u5834\u5408\u306f\u3001<span class=\"lang:default decode:true crayon-inline \">clear_touched();<\/span>\u00a0 \u3092\u547c\u3076\u3053\u3068\u3067\u3001\u30dc\u30bf\u30f3\u3092\u521d\u671f\u306e\u5916\u89b3\u306b\u63cf\u753b\u3057\u76f4\u3059\u3068\u5171\u306b\u95a2\u4fc2\u306e\u5909\u6570\u3092\u521d\u671f\u5316\u3059\u308b\u3002<\/p>\n<p>\u305d\u3057\u3066\u540c\u3058\u30dc\u30bf\u30f3\u306e\u30bf\u30c3\u30c1\u304c\u7d9a\u304d<em> touch_counter<\/em> \u306e\u5024\u304c\u9078\u629e\u9045\u5ef6\u30ab\u30a6\u30f3\u30c8\u306e<em>TOUCH_THRES<\/em> \u4ee5\u4e0a\u306b\u306a\u3063\u305f\u6642\u70b9\u3067\u3001\u305d\u306e\u30dc\u30bf\u30f3\u304c\u9078\u629e\u3055\u308c\u305f\u3001\u3042\u308b\u3044\u306f\u3001\u9078\u629e\u3055\u308c\u7d9a\u3051\u3066\u3044\u308b\u3068\u5224\u65ad\u3059\u308b\u3002\u9078\u629e\u3055\u308c\u7d9a\u3051\u3066\u3044\u308b\u5834\u5408\u306f\u3001<span class=\"lang:default decode:true crayon-inline \">repeat(id);<\/span>\u00a0\u00a0\u306b\u3088\u3063\u3066\u30ea\u30d4\u30fc\u30c8\u51e6\u7406\u3059\u3079\u304d\u304b\u3069\u3046\u304b\u3092\u554f\u3044\u5408\u308f\u305b\u308b\u3002(\u30ea\u30d4\u30fc\u30c8\u3067\u306f\u306a\u3044)\u6700\u521d\u306e\u9078\u629e\u6642\u3084\u3001<em>touch_counter<\/em>\u304c\u30ea\u30d4\u30fc\u30c8\u9045\u5ef6\u30ab\u30a6\u30f3\u30c8 ( <em>REPEAT_THRES<\/em> ) \u306b\u9054\u3057\u305f\u306a\u3089\u3070\u3001rcPanel.h\u5185\u306e <span class=\"lang:default decode:true crayon-inline\">panel_action(id)<\/span>\u00a0\u00a0\u3092\u547c\u3093\u3067\u30d1\u30cd\u30eb\u8868\u793a\u3092\u66f4\u65b0\u3059\u308b\u30bf\u30a4\u30df\u30f3\u30b0\u3092\u4e0e\u3048\u308b\u3002<\/p>\n<p><strong>panel_action(id)<\/strong> \u304c true\u3092\u8fd4\u3057\u305f\u5834\u5408\u3001\u5bfe\u5fdc\u3059\u308b\u8d64\u5916\u7dda\u30c7\u30fc\u30bf\u306e\u9001\u51fa\u3092\u884c\u3046\u305f\u3081\u306b <span class=\"lang:default decode:true crayon-inline \">send_ir_data(id);<\/span>\u00a0 \u3092\u547c\u3073\u51fa\u3059\u3002\u30dc\u30bf\u30f3\u306b\u3088\u3063\u3066\u306f\u3001\u30c7\u30fc\u30bf\u30d5\u30ec\u30fc\u30e0\u6570\u304c0\u500b\u306e\u5834\u5408\u3082\u3042\u308b\u306e\u3067\u3001true\u3092\u8fd4\u3057\u305f\u304b\u3089\u3068\u3044\u3063\u3066\u5b9f\u969b\u306b\u30c7\u30fc\u30bf\u304c\u9001\u4fe1\u3055\u308c\u308b\u3068\u306f\u9650\u3089\u306a\u3044\u3002<\/p>\n<p>\u6700\u5f8c\u306b\u5404\u30ab\u30a6\u30f3\u30bf\u30fc\u5909\u6570\u306b\u521d\u671f\u5024\u3092\u4e0e\u3048\u3066\u3001\u30eb\u30fc\u30d7\u306e\u5148\u982d\u306b\u623b\u308b\u3002<\/p>\n<p>\u306a\u304a\u3001eco\u30e2\u30fc\u30c9\u30d5\u30e9\u30b0\u3092\u30bb\u30c3\u30c8\uff0f\u30ea\u30bb\u30c3\u30c8\u3059\u308b <span class=\"lang:default decode:true crayon-inline \">void\u00a0set_eco_mode(bool flag); <\/span>\u00a0\u306f\u3001rcPanel.h \u306e panel_action(); \u5185\u304b\u3089\u547c\u3070\u308c\u308b\u3002\u5f53\u7136\u306a\u304c\u3089\u3001\u30e1\u30cb\u30e5\u30fc\u30d1\u30cd\u30eb\u306e\u8868\u793a\u4e2d\u306b\u00a0<strong>eco<\/strong> \u30dc\u30bf\u30f3\u304c\u9078\u629e\u3055\u308c\u305f\u3068\u304d\u306b\u9650\u3089\u308c\u308b\u3002<\/p>\n<h2>\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/h2>\n<p>void setup(); \u3067\u306f\u4ee5\u4e0b\u3092\u884c\u3063\u3066\u3044\u308b\u3002<\/p>\n<ul>\n<li>ATmega328P\u5185\u90e8\u306e\u30a2\u30ca\u30ed\u30b0\u5165\u529b\u30dd\u30fc\u30c8\u3084\u30a2\u30ca\u30ed\u30b0\u30b3\u30f3\u30d1\u30ec\u30fc\u30bf\u306e\u52d5\u4f5c\u7981\u6b62\u3002<br \/>\n\u30a2\u30ca\u30ed\u30b0\u5165\u529b\u306f\u4f7f\u308f\u306a\u3044\u306e\u3067\u3002\u3053\u308c\u3089\u306b\u3088\u308a\u3001100\u03bcA\u5f31\u306e\u96fb\u6d41\u3092\u7bc0\u7d04\u3002<\/li>\n<li>\u5404I\/O\u30dd\u30fc\u30c8\u306e\u5165\u51fa\u529b\u65b9\u5411\u3084\u521d\u671f\u5024\u306e\u8a2d\u5b9a<br \/>\n\u7279\u306b\u6025\u3050\u51e6\u7406\u3067\u3082\u306a\u3044\u306e\u3067\u3001\u30dd\u30fc\u30c8\u3092\u76f4\u63a5\u64cd\u4f5c\u3059\u308b\u306e\u3067\u306f\u306a\u304f\u3001\u3075\u3064\u3046\u306b\u521d\u671f\u5316\u3057\u3066\u3044\u308b\u3002<\/li>\n<li>TFT\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u660e\u793a\u7684\u306a\u30ea\u30bb\u30c3\u30c8<br \/>\nTFT\u30e2\u30b8\u30e5\u30fc\u30eb\u306eRST\u30d4\u30f3\u306b10msec\u306e\u9593L\u30ec\u30d9\u30eb\u3092\u4e0e\u3048\u3001\u521d\u671f\u5316\u7336\u4e88\u6642\u9593\u3068\u3057\u3066\u66f4\u306b10msec\u9045\u5ef6\u3055\u305b\u3066\u3044\u308b\u3002<\/li>\n<li>Adafruit_ILI9341\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9 (tft) \u3092\u4f7f\u3063\u305f\u521d\u671f\u8a2d\u5b9a\u3002<br \/>\n<span class=\"lang:default decode:true crayon-inline \">tft.cp437(true);<\/span>\u00a0 \u306b\u3064\u3044\u3066\u306f\u524d\u306b\u66f8\u3044\u305f\u3068\u304a\u308a\u3067 CP437\u306e0xB0\u306b\u5bfe\u5fdc\u3059\u308b Light Shade\u30ad\u30e3\u30e9\u30af\u30bf\u3092\u4f7f\u3046\u305f\u3081\u306b\u5fc5\u8981\u3002<br \/>\n<span class=\"lang:default decode:true crayon-inline \">tft.setTextWrap(true); <\/span>\u00a0\u306f\u6587\u5b57\u306e\u63cf\u753b\u5ea7\u6a19\u304c\u53f3\u7aef\u3092\u8d85\u3048\u305f\u3068\u304d\u3001\u6b21\u306e\u884c\u306b\u306f\u307f\u51fa\u306a\u3044\u3088\u3046\u306b\u3002<br \/>\n<span class=\"lang:default decode:true crayon-inline \">tft.setRotation(); <\/span>\u00a0\u306f\u56db\u9685\u306e\u3046\u3061\u306e\u3069\u3053\u3092\u5ea7\u6a19\u539f\u70b9(0, 0)\u3068\u3059\u308b\u304b\u3092\u6307\u5b9a\u3059\u308b\u3002<\/li>\n<li>\u64cd\u4f5c\u30d1\u30cd\u30eb\u306e\u63cf\u753b\u3068\u30d0\u30c3\u30af\u30e9\u30a4\u30c8\u306e\u70b9\u706f\u3002<br \/>\nrcPanel.h\u5185\u306e <span class=\"lang:default decode:true crayon-inline \">create_panel(); <\/span>\u00a0\u3092\u547c\u3076\u3053\u3068\u3067\u30e1\u30cb\u30e5\u30fc\u30d1\u30cd\u30eb\u3092\u8868\u793a\u3057\u3066\u3044\u308b\u3002<\/li>\n<li>\u30a6\u30a9\u30c3\u30c1\u30c9\u30c3\u30b0\u30fb\u30bf\u30a4\u30de\u30fc\u306e\u52d5\u4f5c\u7981\u6b62\u3002<br \/>\n<span class=\"lang:default decode:true crayon-inline \">wdt_disable(); <\/span>\u00a0\u3092\u547c\u3076\u3002\u30b9\u30b1\u30c3\u30c1\u304c\u5b89\u5b9a\u3059\u308b\u307e\u3067\u306f\u3001\u3053\u308c\u306f\u66f8\u304b\u306a\u3044\u65b9\u304c\u3088\u3044\u3060\u308d\u3046\u3002\u4eca\u56de\u306e\u5b9f\u88c5\u3067\u306f\u3001\u30c6\u30b9\u30bf\u30fc\u8aad\u307f\u3067\u7d0410\u03bcA\u524a\u6e1b\u306e\u52b9\u679c\u304c\u3042\u3063\u305f\u3002<\/li>\n<\/ul>\n<h1>\u304d\u3087\u3046\u306e\u307e\u3068\u3081<\/h1>\n<p>\u4eca\u56de\u306f\u30e1\u30a4\u30f3\u30e2\u30b8\u30e5\u30fc\u30eb\u3060\u3051\u306b\u306a\u3063\u3066\u3057\u307e\u3063\u305f\u3002rcPanel.h \u5185\u306e\u95a2\u6570\u3092\u547c\u3076\u90e8\u5206\u3082\u591a\u3044\u306e\u3067\u3001\u3053\u308c\u3060\u3051\u3067\u306f\u4f55\u3084\u3063\u3066\u3093\u3060\u304b\u5206\u304b\u3089\u306a\u3044\u304b\u3082\u3057\u308c\u306a\u3044\u3002<\/p>\n<p>\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u8aac\u660e\u306b\u5199\u771f\u3084\u56f3\u3092\u5165\u308c\u308b\u306e\u306f\u9762\u5012\u306a\u306e\u3067\u305a\u3089\u305a\u3089\u3068\u66f8\u304d\u9023\u306d\u3066\u3057\u307e\u3063\u305f\u304c\u3001\u307e\u3060\u307e\u3060\u7d9a\u304d\u307e\u3059\u3002<\/p>\n<p>\u305d\u3046\u3044\u3048\u3070\u3001Arduino IDE\u3067\u30d3\u30eb\u30c9\u3092\u884c\u3046\u3068\u3001\u30e1\u30c3\u30bb\u30fc\u30b8\u9818\u57df\u306e\u30b5\u30a4\u30ba\u60c5\u5831\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u305f\u3002<\/p>\n<pre class=\"nums:false lang:default decode:true\">\u6700\u592730720\u30d0\u30a4\u30c8\u306e\u30d5\u30e9\u30c3\u30b7\u30e5\u30e1\u30e2\u30ea\u306e\u3046\u3061\u3001\u30b9\u30b1\u30c3\u30c1\u304c21962\u30d0\u30a4\u30c8\uff0871%\uff09\u3092\u4f7f\u3063\u3066\u3044\u307e\u3059\u3002 \r\n\u6700\u59272048\u30d0\u30a4\u30c8\u306eRAM\u306e\u3046\u3061\u3001\u30b0\u30ed\u30fc\u30d0\u30eb\u5909\u6570\u304c674\u30d0\u30a4\u30c8\uff0832%\uff09\u3092\u4f7f\u3063\u3066\u3044\u3066\u3001\u30ed\u30fc\u30ab\u30eb\u5909\u6570\u30671374\u30d0\u30a4\u30c8\u4f7f\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/pre>\n<p>\u4eca\u5f8c\u6b8b\u308a2\u3064\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u8aac\u660e\u3092\u66f8\u3044\u3066\u3044\u304f\u3046\u3061\u306b\u4fee\u6b63\u3092\u52a0\u3048\u308b\u304b\u3082\u3057\u308c\u306a\u3044\u306e\u3067\u78ba\u5b9a\u5024\u3067\u306f\u306a\u3044\u304c\u3001\u3053\u308c\u304f\u3089\u3044\u3067\u53ce\u307e\u3063\u3066\u3044\u308b\u3001\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6982\u8981 \u30bf\u30c3\u30c1\u30d1\u30cd\u30eb\u4ed8TFT\u6db2\u6676\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u4f7f\u3063\u305f\u8d64\u5916\u7dda\u30ea\u30e2\u30b3\u30f3\u306b\u95a2\u3059\u308b\u8a71\u306e2\u56de\u76ee\u3002\u4eca\u56de\u304b\u3089\u306f\u30d7\u30ed\u30b0\u30e9\u30e0(\u30b9\u30b1\u30c3\u30c1)\u306b\u3064\u3044\u3066\u3002\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u4e00\u4eba\u30bd\u30fc\u30b9\u30ec\u30d3\u30e5\u30fc\u3068\u3044\u3063\u305f\u3068\u3053\u308d\u3002 \u30b9\u30b1\u30c3\u30c1\u5168\u4f53\u306f\u4ee5\u4e0b\u306e3\u672c\u3067\u69cb\u6210\u3057\u305f\u3002C++\u306e\u30af\u30e9 &hellip; <a href=\"https:\/\/okiraku-camera.tokyo\/blog\/?p=6667\" class=\"more-link\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"screen-reader-text\">\u30bf\u30c3\u30c1\u30d1\u30cd\u30eb\u4ed8TFT\u6db2\u6676\u3092\u4f7f\u3063\u305f\u8d64\u5916\u7dda\u30ea\u30e2\u30b3\u30f3 \u305d\u306e2<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[69],"tags":[65,86],"class_list":["post-6667","post","type-post","status-publish","format-standard","hentry","category-programming","tag-arduino","tag-remocon"],"_links":{"self":[{"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=\/wp\/v2\/posts\/6667","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6667"}],"version-history":[{"count":0,"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=\/wp\/v2\/posts\/6667\/revisions"}],"wp:attachment":[{"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6667"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6667"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/okiraku-camera.tokyo\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6667"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}