nRF51822, BME280, SSD1306_i2c, BLE400

Dependencies:   mbed SSD1306_128x64_I2C

main.cpp

Committer:
mamont090671
Date:
2019-11-28
Revision:
0:6e40dd247a04

File content as of revision 0:6e40dd247a04:

#include "mbed.h"
#include "SSD1306.h"
#include "bme280.h"
#include "stdlib.h"
#include "mbed_logo.h"

#define D_SDA                  P0_0
#define D_SCL                  P0_1

//Functions
void triggerfall_1();//Button1 falling interrupt function
void triggerrise_1();//Button1 rising interrupt function
void triggerfall_2();//Button1 falling interrupt function
void triggerrise_2();//Button1 rising interrupt function

float t;
float pr;
int h;

uint8_t address = 0x78;

I2C i2c(D_SDA, D_SCL);

SSD1306 oled(i2c, address);
BME280 bme280;

//Initiate IO
DigitalOut led0(LED1);
DigitalOut led1(LED2);
DigitalOut led2(P0_20);
DigitalOut led3(P0_21);
DigitalOut led4(P0_22, 0);
DigitalIn  sw1(BUTTON1);
DigitalIn  sw2(BUTTON2);

//Initiate input interrupts
InterruptIn sw1Press(BUTTON1);
InterruptIn sw2Press(BUTTON2);

//bme280
void i2cWrite(uint8_t i2c_address, uint8_t *p_data, uint8_t data_size, uint8_t repeated_start)
{
// mbed uses 8-bit addresses, always confusing.
    i2c.write(i2c_address<<1,(const char *)p_data,data_size,repeated_start);
}

void i2cRead(uint8_t i2c_address, uint8_t *p_data, uint8_t data_size)
{
// mbed uses 8-bit addresses, always confusing.
    i2c.read(i2c_address<<1,(char *)p_data,data_size);
}

//ssd1306
void Start_page()
{
    int i=0;
    oled.writeString(1, 3, "Fight Robot");
    while(i<100) {
        oled.writeProgressBar(20,40,i);
        i++;
        wait_ms(10);
    }
    i = 0;
    oled.writeBitmap((uint8_t*) mbed_logo);
    while(i<100){
        i++;
        wait_ms(10);
    }
}
void Display_Meteo(float t, float pr, int h)
{
//    sprintf(buf, "%f", t);
    oled.writeString(1, 2, "T: ");
    oled.printf("%.2f",t);
    oled.printf("%s"," C");
    oled.writeString(3, 2, "P: ");
    oled.printf("%.1f",pr);
    oled.printf("%s"," mmHg");
    oled.writeString(5, 2, "H: ");
    oled.printf("%d",h);
    oled.printf("%s"," %");
}

int main()
{
    //Initialise LED output
    led0=0;
    led1=0;
    led2=0;
    led3=0;
 
    //Set falling and rising edge to apppropriate interrup function
    sw1Press.fall(&triggerfall_1);
    sw1Press.rise(&triggerrise_1);
    sw2Press.fall(&triggerfall_2);
    sw2Press.rise(&triggerrise_2);

    bme280.begin(BME280_I2C_ADDRESS1);
    // Configure for test purposes.
    bme280.writeConfigRegister(BME280_STANDBY_500_US,BME280_FILTER_OFF,0);
    bme280.writeControlRegisters(BME280_OVERSAMPLING_1X,BME280_OVERSAMPLING_1X,BME280_OVERSAMPLING_1X,BME280_MODE_NORMAL);
    Start_page();
    oled.clearDisplay();

    while(1) {
        led4=!led4;
        bme280.read();
        t = bme280.temperature();
        float p = bme280.pressure()/100;
        pr = p*0.750062;
        h = bme280.humidity();
        Display_Meteo(t, pr, h);
        wait_ms(1000);
    }
}
//Button1 falling interrupt function
void triggerfall_1()
{
//Toggle LED1
    led0=!led0;
}
 
//Button1 rising interrupt function
void triggerrise_1()
{
//Toggle LED2
    led1=!led1;
}
//Button1 falling interrupt function
void triggerfall_2()
{
//Toggle LED1
    led2=!led2;
}
 
//Button1 rising interrupt function
void triggerrise_2()
{
//Toggle LED2
    led3=!led3;
}