自作環境センサーは1時間インターバルで動作させているが、一時的に連続的な計測に切り替えて使いたいこともある。とりあえず物理スイッチをつけてしまうのも手だが、あいにく設計段階ではそこのところを考慮していなかった。で、簡易的に使えそうな技としてESP32についているタッチセンサー機能を試してみた。アナログピンにあてがわれているT0~9の10個のピンが使えるようだ。今回はA16をT6に流用してみることにする。未使用だが基板にパターンは引いてあったので、基板を直に触ることでスイッチを入れた状態を実現できる。
プログラムは至って簡単で、
int sensorPinT = T6; // select the input pin for the touch sensor double touch_default = 0; double touch_sens = 0; void setup() { touch_default = touchRead(sensorPinT); delay(10000); touch_sens = touchRead(sensorPinT)/touch_default; Serial.print("Touch sense:"); /* Set RTC alerm */ if (touch_sens < 0.6) { Serial.println(" True"); RTC.setAlarm1(RTC.now() + TimeSpan(0,0,0,5), DS3231_A1_Second); // In case of returning from sleep every 0'5" from the present time } else { Serial.println(" False"); RTC.setAlarm1(DateTime(0, 0, 0, 0, 0, 0), DS3231_A1_Minute); // Return from sleep every hour 0'0" } }
追加したところだけを抜き出すとこんな感じで、setup()の最初の方で一度センスしておいて暫く経ったところでもう一度センスし、値が下がっていればタッチしているという判定をして、インターバルを切り替えている。