技術士をとってからの日記

一般企業に勤めている技術士(金属)の30代。技術士をとってからの日常、CPDについて書ければいいと思っています。あと競馬。

光センサモジュールにおける点滅の検知

うちの工場のシグナルタワーは、

稼働準備中=点滅

稼働中=点灯

となっているので、それを分けて記録できるようにコードを作成してみた。
光センサモジュールを1分毎に0.25秒×4回読み取って、光っていない時があれば点滅(出力0)としてみた。

#include <SD.h>

//---SDCard D4 pin
const int sd_chip_select = 4;

//---テスト用
int test_count = 0;
String test_str = "";

int val=0;
int val2=0;
int val3=0;
int val4=0;
int valsum=0;


void setup() {

    //---Serialポートを開く
    Serial.begin(9800);
     pinMode(SS, OUTPUT);

    Serial.print(F("SDCard:"));

    //---SDライブラリの初期化エラー
    if(!SD.begin(sd_chip_select)) {

        Serial.println(F(" error..."));

    }else{

        Serial.println(F(" OK"));

        //---ファイル一覧を表示
        Serial.println(F("----------------------------"));
        Serial.println(F("----------------------------"));
    }
}

void loop(){
  val=digitalRead(2);
  delay(250);
  val2=digitalRead(2);
  delay(250);
  val3=digitalRead(2);
  delay(250);
  val4=digitalRead(2);

  if(val==0 && val2==0 && val3==0 && val4==0){valsum=1;}
  else{valsum=0;}
  
  test_str += valsum;
  test_str +=",";

  SdFileWrite("SEN1.csv", test_str);
  
  Serial.print(F("SEN1:")); Serial.println(valsum);
  
  Serial.println(F("----------------------------"));

  delay(59000);
}

void SdFileWrite(String p_file_name, String p_str) {

    //---上書きモードでファイルを開く
    File file = SD.open(p_file_name , FILE_WRITE | O_TRUNC);

    if(file){

        //---書き込み
        file.print(p_str); 

    } else{

        Serial.println(F(" error..."));
    }

    //---ファイルを閉じる
    file.close();
}

プログラミング知ってる人ならば0.25秒毎とかやらずに処理できると思うけど、初心者で思いつく方法はこれが精一杯だった。もう少し詳しくなったら改造を行いたい。

ジャパンカップ
三連複的中したけど、960円では・・・
しかしコースレコード2.20.6とはすごいもんみれたなー。配当とかどうでもよくなってくるレベルで感動しました。