プログラムです。
デジタルの7ピンにタクトスイッチをつけました。
- #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);
- }
相対値をゼロmにするにはタクトスイッチを5秒以上押す必要があります…
シリアルモニタでの表示は成功です。
あとは持ち運び可能にするだけです。