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