Srdjan Simic
/
mbed-os-pwm-mbed5-blinky
Temp and Pressure
main.cpp@4:fcb8cc76732b, 2021-02-21 (annotated)
- Committer:
- srdjansimic
- Date:
- Sun Feb 21 02:49:43 2021 +0000
- Revision:
- 4:fcb8cc76732b
- Parent:
- 3:ec7bc6955531
Init
Who changed what in which revision?
User | Revision | Line number | New 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 | } |