緑の中に

緑の中に
国立天文台

2/21/2023

表示プログラムを訂正

 表示プログラムを訂正


*Cは ℃の代用です。  


0℃の表示も正しく表示しています
 
        氷点下の表示においても問題なく表示できました


 このマイコン(Arduino Uno)へ通電してからの最小温・度最大温度を常に更新します。
 マイコン(Arduino Uno)のResetスイッチにより、保持した最小温度・最大温度はクリヤされこの時点からの最小最大温度となります。

半導体温度センサー LM61 は扱いが簡単で優れものです。
  

      lcd.clear();//これが loop内の先頭に記述されていないと、
 前回の表示を引きずる場合があります(文字数の長さにより)


#include <I2CLiquidCrystal.h>
#include <mglcd.h>

/** インスタンス生成 **/
I2CLiquidCrystal  lcd;

/** メッセージ準備(Stringクラス)  **/

int Atai_1;//この位置である必要がある
int Atai_2;//この位置である必要がある

void setup() {
//  pinMode(SWITCH_13, INPUT);
  //int Atai_1; 位置 error となる
  Atai_1 = 99; //最低温度記憶用。プログラム起動時の1回だけに使用する事により、最初に取得した温度(temp)を記憶させる。
  Atai_2 = -99; //最高温度記憶用。プログラム起動時の1回だけに使用する事により、最初に取得した温度(temp)を記憶させる。
  Serial.begin(9600); // 参考 Serial.begin(115200) も可能

  /** LCD初期化(16文字2行) **/
  lcd.begin(16, 2);
  /** カーソルをhome位置へ移動 **/
  lcd.home();
  /** メッセージ表示 **/
  
  /** カーソルを2行目左端(0基数とすると1行目)へ移動 **/
   lcd.setCursor(2, 1); /** (2列,1行) **/
  /** メッセージ表示 **/
 
  lcd.print("Temperature");//敢えて下段に

  delay(3000);

}


void loop() {
  
//lcd.begin(16, 2);// この命令をこの位置に入れたことで上記表示トラブルを回避できた
lcd.clear();//これ
lcd.home();

  int val = analogRead(0); //A0 端子
  //Serial.println(val);  //1データを表示すると改行する。
  //int v = map (val, 0, 1023, 0,5100); //デジタル値と電圧の割付   int v = map (val, 0, 1023, 0,5000)  で観測してきたが
  // 4980 で 2℃ Upできると思う。 10mv/℃特性であるので.  4900 大胆に!
  // 逆であった。電圧があるように見せる必要があるので、5020だ!  5100 <<-- ok

  int v = map (val, 0, 1023, 0, 4970);// センサー部の電源端子では4.98vの電圧であった.  今回は3.3V
  int temp = map(v, 350, 1450, -25, 85);
  Serial.print(temp);  // 改行はしない。 
  Serial.print("-A0"); //Data-A の形式とする.  Data-A0 A0端子
  Serial.print(" ");  // Space 1桁入れる
  Serial.print(Atai_1);
  Serial.print(" ");  // Space 1桁入れる
  Serial.print(Atai_2);
  Serial.print(" ");  // Space 1桁入れる

  lcd.setCursor(0,0); /** (0列,0行) **/
  lcd.print(temp);
  lcd.setCursor(3,0); /** (3列,0行) **/
  lcd.print("*C");


  if ( temp <= Atai_1 )//Atai=99 最低温度記憶用。プログラム起動時の1回だけに使用する事により、最初に取得した温度(temp)を記憶させる。
  {
    Atai_1 = temp; //初回取得の温度を記憶

  }

  else {//else start

  }//else end


  if ( temp >= Atai_2 )//Atai=-99 最高温度記憶用。プログラム起動時の1回だけに使用する事により、最初に取得した温度(temp)を記憶させる。
  {
    Atai_2 = temp; //初回取得の温度を記憶

  }

  else {//else start

  }//else end


  lcd.setCursor(0, 1); /** (0列,1行) **/
  lcd.print ("Min");
  lcd.setCursor(4, 1); /** (4列,1行) **/
  lcd.print (Atai_1);

  lcd.setCursor(8, 1); /** (8列,1行) **/
  lcd.print ("Max");
  lcd.setCursor(12, 1); /** (12列,1行) **/  
  lcd.print (Atai_2);

delay(500);

}//loop


=====================================
 不確実な部分がありました

 int v = map (val, 0, 1023, 0, 4970);// センサー部の電源端子では4.98vの電圧であった.  今回は3.3V
 
ここがいまいち私は理解できていません。
ここを正しく理解しておかないと、ランニングテスト等で不正確な温度表示を示すことになると考えます。