Temp and Pressure

Dependencies:   mbed BMP180

Committer:
srdjansimic
Date:
Sun Feb 21 02:49:43 2021 +0000
Revision:
4:fcb8cc76732b
Parent:
3:ec7bc6955531
Init

Who changed what in which revision?

UserRevisionLine numberNew contents of line
srdjansimic 0:b4b35a558b4d 1 /* mbed Microcontroller Library
srdjansimic 0:b4b35a558b4d 2 * Copyright (c) 2019 ARM Limited
srdjansimic 0:b4b35a558b4d 3 * SPDX-License-Identifier: Apache-2.0
srdjansimic 0:b4b35a558b4d 4 */
srdjansimic 0:b4b35a558b4d 5
srdjansimic 0:b4b35a558b4d 6 #include "mbed.h"
srdjansimic 0:b4b35a558b4d 7
srdjansimic 0:b4b35a558b4d 8 #include <stdio.h>
srdjansimic 0:b4b35a558b4d 9 #include "BMP180.h"
srdjansimic 0:b4b35a558b4d 10
srdjansimic 0:b4b35a558b4d 11 I2C i2c(I2C_SDA, I2C_SCL);
srdjansimic 0:b4b35a558b4d 12 BMP180 bmp180(&i2c);
srdjansimic 0:b4b35a558b4d 13
srdjansimic 0:b4b35a558b4d 14 // Blinking rate in milliseconds
srdjansimic 0:b4b35a558b4d 15 #define BLINKING_RATE_MS 2000
srdjansimic 0:b4b35a558b4d 16
srdjansimic 0:b4b35a558b4d 17 DigitalOut my_led(LED1);
srdjansimic 0:b4b35a558b4d 18 DigitalOut pin_out(D8);
srdjansimic 0:b4b35a558b4d 19 InterruptIn my_button(USER_BUTTON);
srdjansimic 0:b4b35a558b4d 20 PwmOut my_pwm(D9);
srdjansimic 0:b4b35a558b4d 21 AnalogIn adc_temp(ADC_TEMP);
srdjansimic 0:b4b35a558b4d 22
srdjansimic 0:b4b35a558b4d 23
srdjansimic 0:b4b35a558b4d 24 void pressed()
srdjansimic 0:b4b35a558b4d 25 {
srdjansimic 0:b4b35a558b4d 26 printf("SDA %d\r\n", I2C_SDA);
srdjansimic 0:b4b35a558b4d 27 printf("SDA %d\r\n", I2C_SCL);
srdjansimic 0:b4b35a558b4d 28 if (my_pwm.read() < 1.0) {
srdjansimic 0:b4b35a558b4d 29 my_pwm.write(my_pwm.read() + 0.1);
srdjansimic 0:b4b35a558b4d 30 if (my_pwm.read() > 1.0) {
srdjansimic 0:b4b35a558b4d 31 my_pwm.write(1.0);
srdjansimic 0:b4b35a558b4d 32 printf("pwm set to 100 %\n");
srdjansimic 0:b4b35a558b4d 33 } else {
srdjansimic 0:b4b35a558b4d 34 printf("pwm set to %.2f %%\n", my_pwm.read() * 100);
srdjansimic 0:b4b35a558b4d 35 }
srdjansimic 0:b4b35a558b4d 36 } else {
srdjansimic 0:b4b35a558b4d 37 my_pwm.write(0);
srdjansimic 0:b4b35a558b4d 38 printf("pwm set to 0 %\n");
srdjansimic 0:b4b35a558b4d 39 }
srdjansimic 0:b4b35a558b4d 40 wait(0.1);
srdjansimic 0:b4b35a558b4d 41 return;
srdjansimic 0:b4b35a558b4d 42 }
srdjansimic 0:b4b35a558b4d 43
srdjansimic 0:b4b35a558b4d 44 void BMP180_GetAll (int oss)
srdjansimic 0:b4b35a558b4d 45 {
srdjansimic 0:b4b35a558b4d 46 bmp180.startTemperature();
srdjansimic 0:b4b35a558b4d 47 wait_ms(5); // Wait for conversion to complete
srdjansimic 0:b4b35a558b4d 48 float temp;
srdjansimic 0:b4b35a558b4d 49 if(bmp180.getTemperature(&temp) != 0) {
srdjansimic 0:b4b35a558b4d 50 printf("Error getting temperature\n");
srdjansimic 0:b4b35a558b4d 51 return;
srdjansimic 0:b4b35a558b4d 52 }
srdjansimic 0:b4b35a558b4d 53
srdjansimic 0:b4b35a558b4d 54 // bmp180.startPressure(BMP180::ULTRA_LOW_POWER);
srdjansimic 3:ec7bc6955531 55 // bmp180.startPressure(BMP180::STANDARD);
srdjansimic 3:ec7bc6955531 56 bmp180.startPressure(BMP180::ULTRA_HIGH_RESOLUTION);
srdjansimic 3:ec7bc6955531 57 wait_ms(80); // Wait for conversion to complete
srdjansimic 0:b4b35a558b4d 58 int pressure;
srdjansimic 0:b4b35a558b4d 59 if(bmp180.getPressure(&pressure) != 0) {
srdjansimic 0:b4b35a558b4d 60 printf("Error getting pressure\n");
srdjansimic 0:b4b35a558b4d 61 return;
srdjansimic 0:b4b35a558b4d 62 }
srdjansimic 0:b4b35a558b4d 63
srdjansimic 0:b4b35a558b4d 64 float altitude;
srdjansimic 0:b4b35a558b4d 65 altitude = 44330*(1-(pow(((float)pressure/101325.0), 0.19029495718)));
srdjansimic 0:b4b35a558b4d 66
srdjansimic 0:b4b35a558b4d 67 printf("Pressure = %d Pa | Temperature = %.2f C | Altitude = %f\n", pressure, temp, altitude);
srdjansimic 0:b4b35a558b4d 68 }
srdjansimic 0:b4b35a558b4d 69
srdjansimic 0:b4b35a558b4d 70 int main()
srdjansimic 0:b4b35a558b4d 71 {
srdjansimic 0:b4b35a558b4d 72 while(1) {
srdjansimic 0:b4b35a558b4d 73 bmp180.reset();
srdjansimic 0:b4b35a558b4d 74 if (bmp180.init() != 0) {
srdjansimic 0:b4b35a558b4d 75 printf("Error communicating with BMP180\n");
srdjansimic 0:b4b35a558b4d 76 } else {
srdjansimic 0:b4b35a558b4d 77 printf("Initialized BMP180\n");
srdjansimic 0:b4b35a558b4d 78 break;
srdjansimic 0:b4b35a558b4d 79 }
srdjansimic 0:b4b35a558b4d 80 wait(1);
srdjansimic 0:b4b35a558b4d 81 }
srdjansimic 0:b4b35a558b4d 82
srdjansimic 0:b4b35a558b4d 83 // Initialise the digital pin LED1 as an output
srdjansimic 0:b4b35a558b4d 84 printf("Blinking rate %d\r\n", BLINKING_RATE_MS);
srdjansimic 0:b4b35a558b4d 85 my_pwm.period_ms(10);
srdjansimic 0:b4b35a558b4d 86 my_pwm.write(1.0);
srdjansimic 0:b4b35a558b4d 87 float fPower = my_pwm.read() * 100L;
srdjansimic 0:b4b35a558b4d 88 printf("pwm set to %.2f\r\n", fPower);
srdjansimic 0:b4b35a558b4d 89
srdjansimic 0:b4b35a558b4d 90 float f_Temperature;
srdjansimic 0:b4b35a558b4d 91
srdjansimic 0:b4b35a558b4d 92 // Set button
srdjansimic 0:b4b35a558b4d 93 my_button.rise(&pressed);
srdjansimic 0:b4b35a558b4d 94
srdjansimic 0:b4b35a558b4d 95 while (true) {
srdjansimic 0:b4b35a558b4d 96 BMP180_GetAll(0);
srdjansimic 0:b4b35a558b4d 97
srdjansimic 0:b4b35a558b4d 98 f_Temperature = (adc_temp.read()*100);
srdjansimic 0:b4b35a558b4d 99 printf("ADC Temp = %f \r\n", f_Temperature);
srdjansimic 0:b4b35a558b4d 100
srdjansimic 0:b4b35a558b4d 101
srdjansimic 0:b4b35a558b4d 102 my_led = !my_led;
srdjansimic 0:b4b35a558b4d 103 pin_out = !pin_out;
srdjansimic 0:b4b35a558b4d 104 printf("Blinking rate %d\r\n", my_led);
srdjansimic 0:b4b35a558b4d 105 wait(BLINKING_RATE_MS / 1000);
srdjansimic 0:b4b35a558b4d 106 }
srdjansimic 0:b4b35a558b4d 107 }