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

2020年4月18日土曜日

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

次の課題は、LCDへの表示です。
 
 その前に、0.1秒ごとに表示されても見にくいだけなので、平均値を5秒にまったりと表示してくれるよう、プログラムをアベレージ表示にします。


  1. #include <Wire.h>
  2. #include <LPS.h>
  3. LPS ps;
  4. void setup()
  5. {
  6. Serial.begin(9600);
  7. Wire.begin();
  8. if (!ps.init())
  9. {
  10. Serial.println("Failed to autodetect pressure sensor!");
  11. while (1);
  12. }
  13. ps.enableDefault();
  14. }
  15. void loop()
  16. {
  17. int i;
  18. float altitude = 0;
  19. float pressure = 0;
  20. float pressureave = 0;
  21. float temperature = 0;
  22. for (i = 0; i < 1000; i++){
  23. pressureave = pressureave + ps.readPressureMillibars();
  24. pressure = ps.readPressureMillibars();
  25. altitude = altitude + ps.pressureToAltitudeMeters(pressure);
  26. temperature = temperature + ps.readTemperatureC();
  27. delay(5);
  28. }
  29. pressureave = pressureave /1000;
  30. altitude = altitude /1000;
  31. temperature = temperature /1000;
  32. Serial.print("p: ");
  33. Serial.print(pressureave);
  34. Serial.print(" mbar\ta: ");
  35. Serial.print(altitude);
  36. Serial.print(" m\tt: ");
  37. Serial.print(temperature);
  38. Serial.println(" deg C");
  39. delay(100);
  40. }
それからLCD表示です。
スケッチ→ライブラリをインクルード →ライブラリを管理 でlcdを検索します。
「LiquidCrystal」をインストールします。


#include <Wire.h>
#include <LPS.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd = LiquidCrystal(12,11,10,5,4,3,2);

LPS ps;

void setup()
{
  Serial.begin(9600);
  Wire.begin();
  lcd.begin(16, 2);
  
  
  if (!ps.init())
  {
    Serial.println("Failed to autodetect pressure sensor!");
    while (1);
  }

  ps.enableDefault();
}

void loop()
{
  int i;
  float altitude = 0;        //高度
  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;
  altitude = altitude /1000;
  temperature = temperature /1000;


  
  Serial.print("p: ");
  Serial.print(pressureave); 
  Serial.print(" mbar\ta: ");
  Serial.print(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);
  lcd.print("alt: ");
  lcd.print(altitude,2);     
  lcd.print(" m");

  delay(100);
}




温度表示での「18.2 deg  C」のところ、最後のCが桁数が足りず、表示できてませんが気にしません。

 
かなりごちゃごちゃしてきました。

0 件のコメント:

コメントを投稿