display a graph of temperature from the NTC on the OLED
Dependencies: SSD1308_128x64_I2C Grove_temperature
main.cpp@0:50a79669d4e7, 2019-12-11 (annotated)
- 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?
User | Revision | Line number | New 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 | } |