nRF51822, BME280, SSD1306_i2c, BLE400

Dependencies:   mbed SSD1306_128x64_I2C

Revision:
0:6e40dd247a04
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Nov 28 11:43:48 2019 +0000
@@ -0,0 +1,141 @@
+#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;
+}