// Programmet er beregnet for å måle barometertrykk og temperatur ved hjelp av BMP180 // og vise resultatet på et display av typen SSD1306. // Inkludering av biblioteker #include #include #include #include #include // Trykkmåling // Deklarasjon av variable Adafruit_SSD1306 display(4); // Deklarasjon av enheten "display" av klassen Adafruit_SSD1306 SFE_BMP180 pressure; // Deklarasjon av enheten "pressure" av klassen SFE_BMP180 int i=0; void setup() { Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Initialiser display med adresse 0x3C pressure.begin(); } void loop() { // Hent trykk- og høydeinformasjon float P, T; // Deklarer variabler // Deklarerer variable for høydemåling float H; // Beregnet høyde over havet float H1 = 60; // Referansehøyde i meter float P1 = 1021.5; // Referansetrykk i mbar ved referansehøyde float T1 = -8.4; // Temperatur i grader C, husk at formelen krever grader Kelvin float a = 0.0065; // TMemperaturgradient i K/m float R = 287.06; // Den spesifikke gasskonstanten i J/kg K float g0 = 9.81; // Tyngdeakselerasjonen i m/s2 P = getPressure(); // Hent måleverdi av trykk T = getTemperature(); // Hent måleverdi av temperatur // Legg inn trykk og temperatur i formelen i oppgave heftet og beregn høyden H = ((T1 + 273.15) / a) * (pow((P / P1), (-(a * R) / g0)) - 1) + H1; // Klargjør display for utskrift display.clearDisplay(); // Slett informasjon på display display.setTextSize(1); // Sett størrelse på tekst display.setTextColor(WHITE); // Hvit tekst på sort bagrunn // Skriver ut lufttrykk med to desimaler display.setCursor(0,0); // Plasser markør øverst til venstre display.print("Lufttrykk: "); // Skriv "Lufttrykk display.print(P,2); // Skriv verdien til luftrykk med to desimaler display.println("mb"); // Skriv benevning mbar (mb) // Skriver ut temperatur med en desimal display.setCursor(0,10); // Flytt markør til neste linje display.print("Temp.: "); // Skriv "Temp.:", Temperatur display.print(T,1); // Skriv den målte temperaturen i ... display.println(" C"); // ... grader C // Skriv inn kode for å skrive ut høyden med en desimal på displayet display.setCursor(0,20); // Flytt markør til neste linje display.print("Høyde.: "); // Skriv "Temp.:", Temperatur display.print(H,1); // Skriv den målte temperaturen i ... display.println(" m"); // ... grader C display.display(); // Overfør informasjonen til displayet og vis display.display(); // Overfør informasjonen til displayet og vis delay(500); // Vent i 500 msek. //Serial.print(i); //Serial.print(", "); //Serial.println(P, 2); //i = i+1; //delay(10); } double getPressure() { char status; double T, P, p0, a; // Deklarer lokale variable // For å foreta en trykkmåling så trengs temperaturen status = pressure.startTemperature(); // Forespørsel om temperaturmåling if (status != 0) // Om forespørselen er vellykket, gå videre { delay(status); // Vent til målingen er klar status = pressure.getTemperature(T);// Mål temperaturen if (status != 0) // Om målingen er vellykket gå videre { status = pressure.startPressure(3); // Forespørsel om trykkmåling // Forespørsel om trykkmåling, (3) høyest presisjon if (status != 0) // Om forespørselen er vellykket, gå videre { delay(status); // Vent til målingen er klar status = pressure.getPressure(P, T); // Foreta trykk og temperaturmåling if (status != 0) { return (P); } else Serial.println("Feil ved forespørsel av trykkmåling\n"); } else Serial.println("Feil ved måling av trykk\n"); } else Serial.println("Feil ved forespørsel av temperaturmåling\n"); } else Serial.println("Feil ved måling av temperatur\n"); } double getTemperature() { char status; double T; status = pressure.startTemperature(); // Forespørsel om temperaturmåling if (status != 0) // Om forespørselen er vellykket, gå videre { delay(status); // Vent til målingen er klar status = pressure.getTemperature(T);// Mål temperaturen if (status != 0) // Om målingen er vellykket gå videre { return (T); } else Serial.println("Feil ved forespørsel av temperaturmåling\n"); } else Serial.println("Feil ved måling av temperatur\n"); }