display a graph of temperature from the NTC on the OLED

Dependencies:   SSD1308_128x64_I2C Grove_temperature

Committer:
dcj001
Date:
Wed Dec 11 16:38:09 2019 +0000
Revision:
0:50a79669d4e7
display a graph of temperature from the NTC on the OLED

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dcj001 0:50a79669d4e7 1 #include "mbed.h"
dcj001 0:50a79669d4e7 2 #include "SSD1308.h"
dcj001 0:50a79669d4e7 3 #include "wave.h"
dcj001 0:50a79669d4e7 4 #include "Grove_temperature.h"
dcj001 0:50a79669d4e7 5
dcj001 0:50a79669d4e7 6 #define NUM_TEMP 64 //The number of points that will be displayed on the OLED
dcj001 0:50a79669d4e7 7
dcj001 0:50a79669d4e7 8 AnalogIn varRes(A3); //variable resistor
dcj001 0:50a79669d4e7 9 Grove_temperature temp_obj(A1); //Create a Crove_temperature object named "temp_obj", it's connected to Pin A1.
dcj001 0:50a79669d4e7 10 I2C i2c(PB_9,PB_8); //The OLED uses port I2C to connect to the L073RZ
dcj001 0:50a79669d4e7 11 SSD1308 oled = SSD1308(&i2c, SSD1308_SA0);
dcj001 0:50a79669d4e7 12
dcj001 0:50a79669d4e7 13 void tempArrayInit(Temperature *p); //temperature struct initialization
dcj001 0:50a79669d4e7 14 void tempArrayRefresh(Temperature *p); //temperature struct refresh
dcj001 0:50a79669d4e7 15 void tempArrayDisplayOnOLED(Temperature *p);//temperature struct display the point on the OLED
dcj001 0:50a79669d4e7 16
dcj001 0:50a79669d4e7 17 int main() {
dcj001 0:50a79669d4e7 18 Temperature t[NUM_TEMP]; //temperature array
dcj001 0:50a79669d4e7 19 char buffer[10]; //store a string
dcj001 0:50a79669d4e7 20 int interval; //refresh time
dcj001 0:50a79669d4e7 21
dcj001 0:50a79669d4e7 22 tempArrayInit(t); //temperature array initialization
dcj001 0:50a79669d4e7 23 oled.clearDisplay();
dcj001 0:50a79669d4e7 24 while(1){
dcj001 0:50a79669d4e7 25 interval = (int)(varRes.read() * 200); //variable resistor control the refresh speed
dcj001 0:50a79669d4e7 26 wait_ms(interval);
dcj001 0:50a79669d4e7 27
dcj001 0:50a79669d4e7 28 tempArrayRefresh(t); //refresh the array
dcj001 0:50a79669d4e7 29 tempArrayDisplayOnOLED(t); //display the pixel about the tempearture
dcj001 0:50a79669d4e7 30
dcj001 0:50a79669d4e7 31 sprintf(buffer," T:%2dC",t[NUM_TEMP - 1].u8_temperature); //sprintf the temperature to the buffer
dcj001 0:50a79669d4e7 32 oled.writeString(3,8,buffer);
dcj001 0:50a79669d4e7 33 // sprintf(buffer," t:%3dms",interval); //sprintf the temperature to the buffer
dcj001 0:50a79669d4e7 34 // oled.writeString(5,8,buffer);
dcj001 0:50a79669d4e7 35 }
dcj001 0:50a79669d4e7 36 }
dcj001 0:50a79669d4e7 37
dcj001 0:50a79669d4e7 38 void tempArrayInit(Temperature *p)
dcj001 0:50a79669d4e7 39 {
dcj001 0:50a79669d4e7 40 uint8_t i;
dcj001 0:50a79669d4e7 41 for(i = 0;i < NUM_TEMP;i++){
dcj001 0:50a79669d4e7 42 p[i].u8_col = i;
dcj001 0:50a79669d4e7 43 p[i].u8_temperature = i % 64;
dcj001 0:50a79669d4e7 44 }
dcj001 0:50a79669d4e7 45 }
dcj001 0:50a79669d4e7 46 void tempArrayRefresh(Temperature *p)
dcj001 0:50a79669d4e7 47 {
dcj001 0:50a79669d4e7 48 //refresh array
dcj001 0:50a79669d4e7 49 uint8_t i;
dcj001 0:50a79669d4e7 50 for(i = 0;i < (NUM_TEMP - 1);i++){
dcj001 0:50a79669d4e7 51 p[i].u8_page = p[i + 1].u8_page;
dcj001 0:50a79669d4e7 52 //don't refresh the column
dcj001 0:50a79669d4e7 53 //p[i].u8_col = p[i + 1].u8_col;
dcj001 0:50a79669d4e7 54 p[i].u8_temperature = p[i + 1].u8_temperature;
dcj001 0:50a79669d4e7 55 p[i].u8_value = p[i + 1].u8_value;
dcj001 0:50a79669d4e7 56 }
dcj001 0:50a79669d4e7 57
dcj001 0:50a79669d4e7 58 //get new value
dcj001 0:50a79669d4e7 59 p[NUM_TEMP - 1].u8_temperature = (uint8_t)(temp_obj.getTemperature());
dcj001 0:50a79669d4e7 60
dcj001 0:50a79669d4e7 61 //calculate value
dcj001 0:50a79669d4e7 62 p[NUM_TEMP - 1].calcPage();
dcj001 0:50a79669d4e7 63 p[NUM_TEMP - 1].calcValue();
dcj001 0:50a79669d4e7 64 }
dcj001 0:50a79669d4e7 65
dcj001 0:50a79669d4e7 66 void tempArrayDisplayOnOLED(Temperature *p)
dcj001 0:50a79669d4e7 67 {
dcj001 0:50a79669d4e7 68 uint8_t i;
dcj001 0:50a79669d4e7 69
dcj001 0:50a79669d4e7 70 for(i = 0;i < NUM_TEMP;i++){
dcj001 0:50a79669d4e7 71
dcj001 0:50a79669d4e7 72 oled.writeBitmap(&p[i].u8_value,p[i].u8_page,p[i].u8_page,p[i].u8_col,p[i].u8_col);
dcj001 0:50a79669d4e7 73 /* clear the data on other pages withins the same column*/
dcj001 0:50a79669d4e7 74 for(uint8_t j = 0;j < 8;j++){
dcj001 0:50a79669d4e7 75 if(j == p[i].u8_page){
dcj001 0:50a79669d4e7 76 continue;
dcj001 0:50a79669d4e7 77 }
dcj001 0:50a79669d4e7 78 else{
dcj001 0:50a79669d4e7 79 oled.writeBitmap(0,j,j,p[i].u8_col,p[i].u8_col);
dcj001 0:50a79669d4e7 80 }
dcj001 0:50a79669d4e7 81 }
dcj001 0:50a79669d4e7 82
dcj001 0:50a79669d4e7 83 }
dcj001 0:50a79669d4e7 84 }