Guest User

Untitled

a guest
Nov 21st, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.76 KB | None | 0 0
  1. /**
  2. * BME280-OLED
  3. *
  4. * By: Mike Klepper
  5. * Date: 31 March 2017
  6. *
  7. * This program reads data from the BMP280 and shows it on a
  8. * SSD1306 OLED display. It will alternte between British and
  9. * metric units.
  10. *
  11. * See blog post on patriot-geek.blogspot.com
  12. * for connections.
  13. */
  14.  
  15. #include "Wire.h"
  16. #include "Adafruit_Sensor.h"
  17. #include "Adafruit_BME280.h"
  18. #include "SSD1306.h"
  19.  
  20. const float SEA_LEVEL_PRESSURE_HPA = 1013.25;
  21. const int DELAY = 3000;
  22. const int STARTUP_DELAY = 500;
  23.  
  24.  
  25. Adafruit_BME280 bme;
  26.  
  27. SSD1306 display(0x3C, 4, 5);
  28.  
  29. void setup()
  30. {
  31. Serial.begin(115200);
  32.  
  33. if(!bme.begin())
  34. {
  35. Serial.println("Could not find a valid BME280 sensor, check wiring!");
  36. while (1)
  37. {
  38. yield();
  39. delay(DELAY);
  40. }
  41. }
  42. delay(STARTUP_DELAY);
  43.  
  44. display.init();
  45. display.flipScreenVertically();
  46.  
  47. }
  48.  
  49. void loop()
  50. {
  51. float tempC = bme.readTemperature();
  52. float humidity = bme.readHumidity();
  53. float pressurePascals = bme.readPressure();
  54.  
  55. // Print to serial monitor
  56. printToSerial(tempC, humidity, pressurePascals);
  57.  
  58. // Display data on screen in British units
  59. drawWithBritishUnits(tempC, humidity, pressurePascals);
  60. yield();
  61. delay(DELAY);
  62.  
  63. // Display data on screen in metric units
  64. drawWithMetricUnits(tempC, humidity, pressurePascals);
  65. yield();
  66. delay(DELAY);
  67. }
  68.  
  69.  
  70. void drawWithBritishUnits(float tempC, float humidity, float pressurePascals)
  71. {
  72. float tempF = 9.0/5.0 * tempC + 32.0;
  73. float pressureInchesOfMercury = 0.000295299830714 * pressurePascals;
  74.  
  75. display.clear();
  76.  
  77. display.drawRect(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT);
  78.  
  79. display.setFont(ArialMT_Plain_16);
  80. display.drawString(35, 3, "BME280");
  81.  
  82. display.setFont(ArialMT_Plain_10);
  83. display.drawString(5, 22, "Temperature = " + String(tempF) + " *F");
  84. display.drawString(5, 35, "Humidity = " + String(humidity) + "%");
  85. display.drawString(5, 48, "Pressure = " + String(pressureInchesOfMercury) + " inHg");
  86.  
  87. display.display();
  88. }
  89.  
  90. void drawWithMetricUnits(float tempC, float humidity, float pressurePascals)
  91. {
  92. float pressureHectoPascals = pressurePascals / 100.0;
  93.  
  94. display.clear();
  95.  
  96. display.drawRect(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT);
  97.  
  98. display.setFont(ArialMT_Plain_16);
  99. display.drawString(35, 3, "BME280");
  100.  
  101. display.setFont(ArialMT_Plain_10);
  102. display.drawString(5, 22, "Temperature = " + String(tempC) + " *C");
  103. display.drawString(5, 35, "Humidity = " + String(humidity) + "%");
  104. display.drawString(5, 48, "Pressure = " + String(pressureHectoPascals) + " h,Pa");
  105.  
  106. display.display();
  107. }
  108.  
  109. void printToSerial(float tempC, float humidity, float pressurePascals)
  110. {
  111. // Temperature
  112. float tempF = 9.0/5.0 * tempC + 32.0;
  113.  
  114. Serial.println("Temperature:");
  115. printValueAndUnits(tempC, "*C");
  116. printValueAndUnits(tempF, "*F");
  117. //printValueAndUnits(tempC, "°C");
  118. //printValueAndUnits(tempF, "°F");
  119. Serial.println("");
  120.  
  121. // Barometric pressure
  122. float pressureHectoPascals = pressurePascals / 100.0;
  123. float pressureInchesOfMercury = 0.000295299830714 * pressurePascals;
  124.  
  125. Serial.println("Pressure:");
  126. printValueAndUnits(pressurePascals, "Pa");
  127. printValueAndUnits(pressureHectoPascals, "hPa");
  128. printValueAndUnits(pressureInchesOfMercury, "inHg");
  129. Serial.println("");
  130.  
  131. // Humidity
  132. Serial.println("Humidity:");
  133. printValueAndUnits(humidity, "%");
  134. Serial.println("");
  135.  
  136. // Approximate altitude
  137. float altitudeMeters = bme.readAltitude(SEA_LEVEL_PRESSURE_HPA);
  138. float altitudeFeet = 3.28 * altitudeMeters;
  139.  
  140. Serial.println("Approx. Altitude:");
  141. printValueAndUnits(altitudeMeters, "m");
  142. printValueAndUnits(altitudeFeet, "ft");
  143. Serial.println();
  144. }
  145.  
  146. void printValueAndUnits(float value, String units)
  147. {
  148. Serial.print(" ");
  149. Serial.print(value);
  150. Serial.print(" ");
  151. Serial.println(units);
  152. }
Add Comment
Please, Sign In to add comment