Jump to content
Towhid

showing output to sharp lcd boosterpack

Recommended Posts

I have interfaced Bosch BME 280 with my launchpad which is msp432 via i2c ..I am using energia ...I can see the output which is pressure, humidity and temperature through the serial monitor...now I have to show the output through this sharp lcd boosterpack...can anyone help ??

Share this post


Link to post
Share on other sites

this is the code that i have tried ..but no output on the lcd ...

 

#include <Wire.h>
#include "cactus_io_BME280_I2C.h"
#include "SPI.h"
#include "OneMsTaskTimer.h"
#include "LCD_SharpBoosterPack_SPI.h"

// Create BME280 object
BME280_I2C bme; // I2C

// Variables
LCD_SharpBoosterPack_SPI myScreen;
uint8_t k = 0;
uint16_t count = 0;


void setup() {

Serial.begin(9600);
Serial.println("Bosch BME280 Pressure - Humidity - Temp Sensor | cactus.io");

if (!bme.begin(0X76)) {
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
myScreen.begin();
   
    myScreen.setFont(1);
    //myScreen.text(10, 10, "bme.getTemperature_C()); Serial.print(" *C\t"!");
    myScreen.flush(); 
   
    delay(1000);
    myScreen.clear();
}

Serial.println("Pressure\tHumdity\t\tTemp\ttTemp");
}

void loop() {

    double pressure_t = bme.getPressure() / 100.0F;    //save the pressure value to a variable
    double humidity_t = bme.getHumidity();
    double  temp_t = bme.getTemperature_C();

    Serial.print(pressure_t); Serial.print(" mb\t"); // Print the pressure in serial
    Serial.print(humidity_t); Serial.print(" %\t\t");
    Serial.print(temp_t); Serial.print(" *C\t");

    char buf[32];
    dtostrf(pressure_t,3,2,buf);
    String pres = String(buf) ;
 
    myScreen.clearBuffer();
    
    for(int i = 0 ; i < pres.length() ; i++)
    {
        myScreen.text(k, 10, pres);    //this should print the pressure in screen.
    }
    k++;
    myScreen.flush();
    delay(5000);    //random delay
    
        
    myScreen.println(temp_t,DEC);    //this should print the temp..
 
     myScreen.flush();
    delay(5000);    //random delay
    
    myScreen.clear();
    
}
 

 

can anyone help please?

Share this post


Link to post
Share on other sites

I think you have a misplaced bracket for the if (!bme.begin(0X76))

 

I think what you want to do is to place the closing bracket } right after the while(1);

if (!bme.begin(0X76)) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
}

  myScreen.begin();
   
  myScreen.setFont(1);
  //myScreen.text(10, 10, "bme.getTemperature_C()); Serial.print(" *C\t"!");
  myScreen.flush(); 
  delay(1000);
  myScreen.clear();

Share this post


Link to post
Share on other sites

I have been able to show my sensor output via the lcd and the code is given below :

 

#include <Wire.h>
#include "SPI.h"
#include "OneMsTaskTimer.h"
#include "LCD_SharpBoosterPack_SPI.h"
 
#define BME280_ADDRESS 0x76
unsigned long int hum_raw,temp_raw,pres_raw;
signed long int t_fine;
 
uint16_t dig_T1;
 int16_t dig_T2;
 int16_t dig_T3;
uint16_t dig_P1;
 int16_t dig_P2;
 int16_t dig_P3;
 int16_t dig_P4;
 int16_t dig_P5;
 int16_t dig_P6;
 int16_t dig_P7;
 int16_t dig_P8;
 int16_t dig_P9;
 int8_t  dig_H1;
 int16_t dig_H2;
 int8_t  dig_H3;
 int16_t dig_H4;
 int16_t dig_H5;
 int8_t  dig_H6;
 
 // Variables
LCD_SharpBoosterPack_SPI myScreen;
uint8_t myOrientation = 3;
uint16_t myCount = 0;
 
void setup()
{
    uint8_t osrs_t = 1;             //Temperature oversampling x 1
    uint8_t osrs_p = 1;             //Pressure oversampling x 1
    uint8_t osrs_h = 1;             //Humidity oversampling x 1
    uint8_t mode = 3;               //Normal mode
    uint8_t t_sb = 5;               //Tstandby 1000ms
    uint8_t filter = 0;             //Filter off 
    uint8_t spi3w_en = 0;           //3-wire SPI Disable
    
    uint8_t ctrl_meas_reg = (osrs_t << 5) | (osrs_p << 2) | mode;
    uint8_t config_reg    = (t_sb << 5) | (filter << 2) | spi3w_en;
    uint8_t ctrl_hum_reg  = osrs_h;
    
    Serial.begin(9600);
    Wire.begin();
    
    writeReg(0xF2,ctrl_hum_reg);
    writeReg(0xF4,ctrl_meas_reg);
    
    writeReg(0xF5,config_reg);
    readTrim();       
    myScreen.flush();    
 
              //LCD
    myScreen.begin();
    myScreen.clearBuffer();
    
    myScreen.setFont(1);
    myScreen.setOrientation(myOrientation);
    myScreen.text(10, 10, "TEMP : ");
//    myScreen.text(10, 10, String(temp_act));
    myScreen.flush();    //
}
 
 
void loop()
{
    double temp_act = 0.0, press_act = 0.0,hum_act=0.0;
    signed long int temp_cal;
    unsigned long int press_cal,hum_cal;
    
    readData();
    
    temp_cal = calibration_T(temp_raw);
    press_cal = calibration_P(pres_raw);
    hum_cal = calibration_H(hum_raw);
    temp_act = (double)temp_cal / 100.0;
    press_act = (double)press_cal / 100.0;
    hum_act = (double)hum_cal / 1024.0;
 
    Serial.print("TEMP : ");
    Serial.print(temp_act);
    Serial.print(" DegC  PRESS : ");
    Serial.print(press_act);
    Serial.print(" hPa  HUM : ");
    Serial.print(hum_act);
    Serial.println(" %"); 
    myScreen.setFont(0);
    myScreen.setCharXY(10, 10);
    myScreen.println(" TEMP : ");
    myScreen.println(temp_act, DEC);
    myScreen.println(" DegC : ");
    myScreen.println(press_act, DEC);
    myScreen.println(" hPa HUM : ");
    myScreen.println(hum_act, DEC);
    myScreen.flush();   
//    myScreen.setOrientation(myOrientation);
//    myScreen.clearBuffer();
//    myScreen.setFont(0);
//    myScreen.text(10, 10, " TEMP : ");
//    myScreen.text(10, 20, String(temp_act),);
//      myScreen.text(10, 30, " DegC  PRESS : ");
//    myScreen.text(10, 40, String(press_act));
//      myScreen.text(10, 50, " hPa  HUM : ");
//    myScreen.text(10, 60, String(hum_act));
//     myScreen.flush();   
    delay(1000);
}
void readTrim()
{
    uint8_t data[32],i=0;
    Wire.beginTransmission(BME280_ADDRESS);
    Wire.write(0x88);
    Wire.endTransmission();
    Wire.requestFrom(BME280_ADDRESS,24);
    while(Wire.available()){
        data = Wire.read();
        i++;
    }
    
    Wire.beginTransmission(BME280_ADDRESS);
    Wire.write(0xA1);
    Wire.endTransmission();
    Wire.requestFrom(BME280_ADDRESS,1);
    data = Wire.read();
    i++;
    
    Wire.beginTransmission(BME280_ADDRESS);
    Wire.write(0xE1);
    Wire.endTransmission();
    Wire.requestFrom(BME280_ADDRESS,7);
    while(Wire.available()){
        data = Wire.read();
        i++;    
    }
    dig_T1 = (data[1] << 8) | data[0];
    dig_T2 = (data[3] << 8) | data[2];
    dig_T3 = (data[5] << 8) | data[4];
    dig_P1 = (data[7] << 8) | data[6];
    dig_P2 = (data[9] << 8) | data[8];
    dig_P3 = (data[11]<< 8) | data[10];
    dig_P4 = (data[13]<< 8) | data[12];
    dig_P5 = (data[15]<< 8) | data[14];
    dig_P6 = (data[17]<< 8) | data[16];
    dig_P7 = (data[19]<< 8) | data[18];
    dig_P8 = (data[21]<< 8) | data[20];
    dig_P9 = (data[23]<< 8) | data[22];
    dig_H1 = data[24];
    dig_H2 = (data[26]<< 8) | data[25];
    dig_H3 = data[27];
    dig_H4 = (data[28]<< 4) | (0x0F & data[29]);
    dig_H5 = (data[30] << 4) | ((data[29] >> 4) & 0x0F);
    dig_H6 = data[31];   
}
void writeReg(uint8_t reg_address, uint8_t data)
{
    Wire.beginTransmission(BME280_ADDRESS);
    Wire.write(reg_address);
    Wire.write(data);
    Wire.endTransmission();    
}
 
 
void readData()
{
    int i = 0;
    uint32_t data[8];
    Wire.beginTransmission(BME280_ADDRESS);
    Wire.write(0xF7);
    Wire.endTransmission();
    Wire.requestFrom(BME280_ADDRESS,8);
    while(Wire.available()){
        data = Wire.read();
        i++;
    }
    pres_raw = (data[0] << 12) | (data[1] << 4) | (data[2] >> 4);
    temp_raw = (data[3] << 12) | (data[4] << 4) | (data[5] >> 4);
    hum_raw  = (data[6] << 8) | data[7];
}
 
 
signed long int calibration_T(signed long int adc_T)
{
    
    signed long int var1, var2, T;
    var1 = ((((adc_T >> 3) - ((signed long int)dig_T1<<1))) * ((signed long int)dig_T2)) >> 11;
    var2 = (((((adc_T >> 4) - ((signed long int)dig_T1)) * ((adc_T>>4) - ((signed long int)dig_T1))) >> 12) * ((signed long int)dig_T3)) >> 14;
    
    t_fine = var1 + var2;
    T = (t_fine * 5 + 128) >> 8;
    return T; 
}
 
unsigned long int calibration_P(signed long int adc_P)
{
    signed long int var1, var2;
    unsigned long int P;
    var1 = (((signed long int)t_fine)>>1) - (signed long int)64000;
    var2 = (((var1>>2) * (var1>>2)) >> 11) * ((signed long int)dig_P6);
    var2 = var2 + ((var1*((signed long int)dig_P5))<<1);
    var2 = (var2>>2)+(((signed long int)dig_P4)<<16);
    var1 = (((dig_P3 * (((var1>>2)*(var1>>2)) >> 13)) >>3) + ((((signed long int)dig_P2) * var1)>>1))>>18;
    var1 = ((((32768+var1))*((signed long int)dig_P1))>>15);
    if (var1 == 0)
    {
        return 0;
    }    
    P = (((unsigned long int)(((signed long int)1048576)-adc_P)-(var2>>12)))*3125;
    if(P<0x80000000)
    {
       P = (P << 1) / ((unsigned long int) var1);   
    }
    else
    {
        P = (P / (unsigned long int)var1) * 2;    
    }
    var1 = (((signed long int)dig_P9) * ((signed long int)(((P>>3) * (P>>3))>>13)))>>12;
    var2 = (((signed long int)(P>>2)) * ((signed long int)dig_P8))>>13;
    P = (unsigned long int)((signed long int)P + ((var1 + var2 + dig_P7) >> 4));
    return P;
}
 
unsigned long int calibration_H(signed long int adc_H)
{
    signed long int v_x1;
    
    v_x1 = (t_fine - ((signed long int)76800));
    v_x1 = (((((adc_H << 14) -(((signed long int)dig_H4) << 20) - (((signed long int)dig_H5) * v_x1)) + 
              ((signed long int)16384)) >> 15) * (((((((v_x1 * ((signed long int)dig_H6)) >> 10) * 
              (((v_x1 * ((signed long int)dig_H3)) >> 11) + ((signed long int) 32768))) >> 10) + (( signed long int)2097152)) * 
              ((signed long int) dig_H2) + 8192) >> 14));
   v_x1 = (v_x1 - (((((v_x1 >> 15) * (v_x1 >> 15)) >> 7) * ((signed long int)dig_H1)) >> 4));
   v_x1 = (v_x1 < 0 ? 0 : v_x1);
   v_x1 = (v_x1 > 419430400 ? 419430400 : v_x1);
   return (unsigned long int)(v_x1 >> 12);   
}

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...