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);
    }
  }
}