プログラムです。
#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秒以上押す必要があります…
シリアルモニタでの表示は成功です。
あとは持ち運び可能にするだけです。


0 件のコメント:
コメントを投稿