前提・実現したいこと
M5Stick温度センサを用いて42℃以上で10秒経過するとLED点滅+黄色文字警告,42℃以上で20秒経過するとLED点灯+赤文警告というプログラムを書きたいのですがうまくカウントが進んでくれません。どこの部分を変更したらいいか教えていただきたいです。 下記のソースコードにはM5の設定部分は省略してあります。
該当のソースコード
//セットアップ// #include<M5StickC.h> //m5StickCを使うための基本セットアップ #include<Wire.h> //I2Cを使うための基本プラグラム uint16_t result; float temperature; const int tMax = 37 ; //1度きりの処理// void setup() { M5.begin(); //M5StickCを起動 Wire.begin(0,26); //I2Cの通信を0,26で開始 Serial.begin(115200); //シリアル通信を速度15200bpsで開始 M5.Lcd.setRotation(3); //文字の表示方向を回転(90*3=27度回転) M5.Lcd.setTextColor(WHITE); //M5StickCの画面に表示する文字の色を「白」に設定 M5.Lcd.setTextSize(3); //文字の大きさを「3」に設定 M5.Lcd.setCursor(0,60); //表示場所を「0,60」に設定 pinMode(GPIO_NUM_10,OUTPUT); //10ピン出力指令 digitalWrite(GPIO_NUM_10,HIGH); //10ピンにHIGHでLED消灯 } //繰り返しの処理// void loop() { Wire.beginTransmission(0x5A); //I2C通信の初期信号と温度センサのI2Cのアドレスを送信 Wire.write(0x07); //温度データを取得するための指令を送信 Wire.endTransmission(false); //送信完了 Wire.requestFrom(0x5A,2); //アドレスが0x5Aのセンサから,2バイトのデータを送信 result=Wire.read(); //温度データは8ビットをさらに受信してから,追加,16ビット分のデータを格納 result |=Wire.read() << 8; //上記の変数に,上位8bit分をさらに追加して16ビット分のデータを格納 //温度[℃]への変換と画面表示// temperature = result * 0.02 - 273.15; //温度への変換式より計算 M5.Lcd.fillRect(0,20,120,100,BLACK); //背景塗りつぶし M5.Lcd.setCursor(0,20); //座標指定 M5.Lcd.println(temperature); //温度画面に表示 Serial.println(temperature); //パソコンよりデータを確認できるように設定 delay(500); //約0.5s間隔で温度を表示するための待機時間を設定 M5.update(); delay(10); //変数の設定// int flag = 0; float st, t; //アラートの設定// if(temperature >=42) { M5.Lcd.fillRect(0,40,120,100,BLACK); //背景塗りつぶし M5.Lcd.setCursor(0,40); //座標指定 M5.Lcd.println(st-t); Serial.println(st - t); delay(1000); if(flag == 0){ flag == 1; float st = millis(); M5.Lcd.setTextColor(WHITE); //文字の色を白に戻す digitalWrite(GPIO_NUM_10,HIGH); //LED消灯 } float t = millis(); if(t-st > 10000){ M5.Lcd.setTextColor(RED); //20s過ぎたら赤字で警告 digitalWrite(GPIO_NUM_10,LOW); //LED点灯 } else if(t-st > 20000){ M5.Lcd.setTextColor(M5.Lcd.color565(255, 255, 0)); //tが10sを超えたら黄色字で警告 digitalWrite(GPIO_NUM_10,LOW); delay(500); digitalWrite(GPIO_NUM_10,HIGH); delay(500); //LED点滅 } } else{ flag == 0; delay(100); M5.Lcd.setTextColor(WHITE); //文字の色を白に戻す digitalWrite(GPIO_NUM_10,HIGH); //LED消灯 } }
試したこと
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー