Back to tech

センサーデータにてある値以上になったらなにかを一度出力し、ある値以下になったらなにかを一度出力するメモプログラム

1 min read
Table of Contents

メモ程度の記事です

よく、センサーデータにてある値以上になったら一度だけ見つけたことを出力(表示)し、ある値以下になったら一度だけどこか行ったことを出力(表示)してほしいプログラムを作るときがあります

結構初歩的なプログラムですが、意外と悩むときがあるのでメモ程度にArduino言語で書いておきます

プログラム

メモ程度なのでいきなりプログラムを書いていきます

ESP8266というマイコンを使用して組んでいます

アナログ値を取得し、ある値(例では10)以上であればいると判断しています

また、ある値以下であればいないと判断しています

あと無駄にTimer割り込みつかって書いています

#include "Ticker.h"
extern "C" {
  #include "user_interface.h"
}

Ticker ticker;

bool myFlag = false;

void SensorReadFunc(){
  int val = system_adc_read();
  Serial.println(val);


  if(val < 10){
    if(!myFlag){
      Serial.println("found");
      myFlag = true;
    }
  }else{
    if(myFlag){
      Serial.println("lost");
      myFlag = false;
  }
}

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);

  ticker.attach_ms(50, SensorReadFunc);
}

void loop() {
  // put your main code here, to run repeatedly:
}

一度だけ送るアルゴリズムですが、久しぶりに考えて書くと複雑なプログラムになりわけわからんになります

実際はそんなに複雑じゃないのになんでだろ