// BMx280_I2C.ino // Nils Kr. Rossing 22.08.20 // Programmet bygger på Gregor Christandl testprogram for avlesning av BMP280 via I2C-buss #include #include #define I2C_ADDRESS 0x76 //Lag en instans bmx280 av typen BMx280I2C med I2C Address lik 0x76 BMx280I2C bmx280(I2C_ADDRESS); void setup() { Serial.begin(9600); // Initialisering av seriekommunikasjon til monitor Wire.begin(); // Initialisering av I2C-bussen bmx280.begin(); // Initialisering av BMT280 // Oversamplingsraten må settes før man kan gjennomføre målinger: bmx280.writeOversamplingPressure(BMx280MI::OSRS_P_x16); bmx280.writeOversamplingTemperature(BMx280MI::OSRS_T_x16); } void loop() { // Deklarerer to variabler for henholdsvis lufttrykk, P, og temperatur, T. float P, T; P = getPressure(); // Returnerer i mBar T = getTemperature(); // Returnerer i grader C Serial.print("Lufttrykk: "); Serial.println(P,2); // Skriv lufttrykk i mBar med to desimaler Serial.print("Temperatur: "); Serial.println(T,1); // Skriv temperatur i grader C med en desimal delay(1000); // En måling pr. sekund } float getPressure() { if (bmx280.measure() == 0) { Serial.println("Kan ikke starte maaling før forrige maaling er avsluttet"); return; } // Vent til måling er ferdig do { delay(100); } while (bmx280.hasValue() == 0); // Data kan ikke leses fra sensoren før funksjonen hasValue() varsler at data // er klare. Da kan data leses med funksjonene bmx280.getPressure() return bmx280.getPressure()/100; // Returner avlest lufttrykk i mBar } float getTemperature() { if (bmx280.measure() == 0) { Serial.println("Kan ikke starte temp. maaling før forrige maaling er avsluttet"); return; } // Vent til måling er ferdig do { delay(100); } while (bmx280.hasValue() == 0); // Data kan ikke leses fra sensoren før funksjonen hasValue() varslerat data // er klare. Da kan data leses med funksjonene bmx280.getTemperature() return bmx280.getTemperature(); }