
08 ožu easyC BMP180 – ispisivanje temperature i vlažnosti zraka na OLED ekranu
Što ćete naučiti:
– Ispisivati temperaturu i vlažnost zraka na OLED ekranu
Zadatak
Spojite BMP180 senzor koristeći easyC priključak na nosač Arduino MKR1000 mikrokontrolera te OLED ekran na BMP180 senzor. Napravite program kojim ćete ispisivati temperaturu i vlažnost zraka na OLED ekranu.
Kako bi uspješno napravili program, potrebno je u Library Manager-u (Sketch -> Include Library -> Manage Libraries) instalirati dvije biblioteke:
- Adafruit_GFX.h
- Adafruit_SSD1306.h
Također, preuzmite biblioteku SFE_BMP180.h na svoje računalo i dodajte je u Arduino razvojno okruženje odabirom Sketch -> Include Library -> Add .ZIP Library…
Prikaz spajanja
Arduino kod
#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <SFE_BMP180.h> #define SCREEN_WIDTH 128 // sirina OLED ekrana u pikselima #define SCREEN_HEIGHT 64 // visina OLED ekrana u pikselima // Deklariranje SSD1306 ekrana spojenog na I2C sabirnicu (SDA i SCL izvodi) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); SFE_BMP180 tlak; double tlakZraka, tempZraka; void setup() { Serial.begin(115200); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // adresa OLED ekrana (0x3C) Serial.println(F("SSD1306 allocation failed")); for(;;); } delay(2000); display.clearDisplay(); if(tlak.begin()) Serial.println("BMP180 uspjesno povezan."); else { Serial.print("BMP180 nije uspjesno povezan."); while(1); } } void loop() { display.clearDisplay(); tlakZraka = ocitajTlak(); tempZraka = ocitajTemperaturu(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 10); // Display static text display.println(tlakZraka); // ispiši tlak zraka na OLED ekranu display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 20); display.println(tempZraka); // ispiši temperaturu zraka na OLED ekranu display.display(); } double ocitajTlak(){ char status; /* * definiramo varijable: * temp - temperatura zraka * Tlak - tlak zraka * tlak0 - tlak na povrsini mora * nadVisina - nadmorska visina */ double temp, Tlak, tlak0, nadVisina; status = tlak.startTemperature(); if(status != 0) { delay(status); status = tlak.getTemperature(temp); if(status != 0) { status = tlak.startPressure(3); if(status != 0) { delay(status); status = tlak.getPressure(Tlak,temp); if(status != 0) { return(Tlak); } } } } } double ocitajTemperaturu(){ char status; double temp; status = tlak.startTemperature(); if(status != 0) { delay(status); status = tlak.getTemperature(temp); if(status != 0) { return(temp); } } }