bme280, nRF51822 internal temperature, oled ssd1306 128x64. Короче сборный тест.
Dependencies: mbed SSD1306_128x64_I2C BLE_API nRF51822 Buzzer
Diff: main.cpp
- Revision:
- 2:4700f7e71737
- Parent:
- 1:7195b6d24cf4
- Child:
- 4:606e79b9a9ce
--- a/main.cpp Tue May 23 18:39:12 2017 +0000 +++ b/main.cpp Sat Nov 30 04:49:09 2019 +0000 @@ -1,22 +1,159 @@ - #include "mbed.h" - #include "SSD1306.h" +#include "mbed.h" +#include "SSD1306.h" +#include "bme280.h" +#include "stdlib.h" +#include "mbed_logo.h" +//nrf51822 temperature +#include "nrf.h" +#include "nrf_temp.h" + +//Присваиваем пины для i2c +#define D_SDA P0_0 +#define D_SCL P0_1 + +//Функции обработки событий кнопок +void triggerfall_1(); //Button1 falling interrupt function +void triggerrise_1(); //Button1 rising interrupt function +void triggerfall_2(); //Button2 falling interrupt function +void triggerrise_2(); //Button2 rising interrupt function +//глобальные переменные для bme280 +float t; //температура градусы цельсия +float pr; //давление мм ртутного столба +int h; //влажность % +//адрес дисплея +uint8_t address = 0x78; +//инициализация i2c +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); - #define D_SDA PTE25 - #define D_SCL PTE24 - I2C i2c(D_SDA, D_SCL); - - SSD1306 oled = SSD1306(i2c, SSD1308_SA0); +//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() +{ +//nrf51822 temperature + float temp; + nrf_temp_init(); + +//Initialise LED output + led0=0; + led1=0; + led2=0; + led3=0; - int main() { - oled.writeString(0, 0, "Universidad Distrital"); - // oled.printf("Hello World !"); - wait(1); - - oled.writeString(0, 0, "2017 Digitales II"); +//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) { +//nrf51822 temperature + NRF_TEMP->TASKS_START = 1; /* Start the temperature measurement */ + while ((NRF_TEMP->EVENTS_DATARDY & TEMP_INTENSET_DATARDY_Msk) != (TEMP_INTENSET_DATARDY_Set << TEMP_INTENSET_DATARDY_Pos)){} + NRF_TEMP->EVENTS_DATARDY = 0; + temp = (nrf_temp_read()/4); + NRF_TEMP->TASKS_STOP = 1; /* Stop the temperature measurement */ + + led4=!led4; + bme280.read(); + t = bme280.temperature(); + float p = bme280.pressure()/100; + pr = p*0.750062; + h = bme280.humidity(); + Display_Meteo(t, pr, h); + oled.writeString(7, 2, "T_nRF: "); + oled.printf("%.1f",temp); + 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 LED3 + led2=!led2; +} + +//Button1 rising interrupt function +void triggerrise_2() +{ +//Toggle LED4 + led3=!led3; +}