bme280, nRF51822 internal temperature, oled ssd1306 128x64. Короче сборный тест.
Dependencies: mbed SSD1306_128x64_I2C BLE_API nRF51822 Buzzer
main.cpp
- Committer:
- mamont090671
- Date:
- 2019-11-30
- Revision:
- 2:4700f7e71737
- Parent:
- 1:7195b6d24cf4
- Child:
- 4:606e79b9a9ce
File content as of revision 2:4700f7e71737:
#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); //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; //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; }