果報は寝て待て: Arduinoで高度計をつくろう その3

2020年4月19日日曜日

Arduinoで高度計をつくろう その3

次に、タクトスイッチを押すとその時の高度を記憶し、その高度との差(相対値)を表示するようにしました。
プログラムです。

#include <Wire.h>
#include <LPS.h>
#include <LiquidCrystal.h>
#define set_pin   7 //7番ピンをset_pinと命名する
LiquidCrystal lcd = LiquidCrystal(12,11,10,5,4,3,2);
LPS ps;
void setup()
{
  Serial.begin(9600);
  Wire.begin();
  lcd.begin(16, 2);
  pinMode(set_pin,INPUT_PULLUP) ;  //set_pinを入力ピンでプルアップにする
  
  if (!ps.init())
  {
    Serial.println("Failed to autodetect pressure sensor!");
    while (1);
  }
  ps.enableDefault();
  
}
void loop()
{
  int i;
  int set;                   //set_pinの状態
  float altitude = 0;        //高度
  float rel_altitude ;        //高度の相対値
  float set_altitude ;        //セットしたときの高度 
  float disp_altitude;        //表示中の絶対値高度
  float pressure = 0;        //気圧
  float pressureave = 0;     //平均気圧
  float temperature = 0;     //気温
  for (i = 0; i < 1000; i++){
   pressureave = pressureave + ps.readPressureMillibars();
   pressure =  ps.readPressureMillibars();
   altitude = altitude + ps.pressureToAltitudeMeters(pressure);
   temperature = temperature + ps.readTemperatureC();
   delay(5);
  }
  pressureave = pressureave /1000;
  disp_altitude = altitude /1000;
  temperature = temperature /1000;
  set = digitalRead(set_pin);
   if (set == LOW) {     // ボタンが押されていたら、
   set_altitude = disp_altitude;  //disp_altitudeをset_altitudeに代入する
  }
  
  rel_altitude = disp_altitude - set_altitude ; //高度の相対値を計算
  Serial.print("p: ");
  Serial.print(pressureave); 
  Serial.print(" mbar\ta: ");
  Serial.print(disp_altitude);
  Serial.print(" m\tset: ");
  Serial.print(set_altitude);
  Serial.print(" m\trel: ");
  Serial.print(rel_altitude);
  Serial.print(" m\tt: ");
  Serial.print(temperature);
  Serial.println(" deg C");
  lcd.setCursor(0,0);                   // 液晶へ表示
  //lcd.print("p: ");
  lcd.print(pressureave,0);                    
  lcd.print("mbr ");
  lcd.print(temperature,1);
  lcd.print(" deg C");

  lcd.setCursor(0,1);          //液晶の2行目に表示
  lcd.print("a:");
  lcd.print(disp_altitude,1);     
  lcd.print("m");
  lcd.print(" r:");
  lcd.print(rel_altitude,1);     
  lcd.print("m     ");



  delay(100);
}

デジタルの7ピンにタクトスイッチをつけました。
相対値をゼロmにするにはタクトスイッチを5秒以上押す必要があります…
シリアルモニタでの表示は成功です。

LCDでは、aは絶対値高度で、rが相対値高度となります。
あとは持ち運び可能にするだけです。


0 件のコメント:

コメントを投稿