display a graph of temperature from the NTC on the OLED

Dependencies:   SSD1308_128x64_I2C Grove_temperature

Revision:
0:50a79669d4e7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Dec 11 16:38:09 2019 +0000
@@ -0,0 +1,84 @@
+#include "mbed.h"
+#include "SSD1308.h"
+#include "wave.h"
+#include "Grove_temperature.h"
+
+#define NUM_TEMP 64 //The number of points that will be displayed on the OLED
+
+AnalogIn varRes(A3);    //variable resistor
+Grove_temperature temp_obj(A1);   //Create a Crove_temperature object named "temp_obj", it's connected to Pin  A1.
+I2C i2c(PB_9,PB_8);               //The OLED uses port I2C to connect to the L073RZ
+SSD1308 oled = SSD1308(&i2c, SSD1308_SA0);
+
+void tempArrayInit(Temperature *p);         //temperature struct initialization
+void tempArrayRefresh(Temperature *p);      //temperature struct refresh
+void tempArrayDisplayOnOLED(Temperature *p);//temperature struct display the point on the OLED
+
+int main() {
+    Temperature t[NUM_TEMP];  //temperature array
+    char buffer[10];          //store a string
+    int interval;               //refresh time
+             
+    tempArrayInit(t);           //temperature array initialization
+    oled.clearDisplay();
+    while(1){
+        interval = (int)(varRes.read() * 200);  //variable resistor control the refresh speed
+        wait_ms(interval);        
+        
+        tempArrayRefresh(t);    //refresh the array
+        tempArrayDisplayOnOLED(t);      //display the pixel about the tempearture
+    
+        sprintf(buffer," T:%2dC",t[NUM_TEMP - 1].u8_temperature);     //sprintf the temperature to the buffer
+        oled.writeString(3,8,buffer);  
+//        sprintf(buffer," t:%3dms",interval);     //sprintf the temperature to the buffer
+//        oled.writeString(5,8,buffer);                
+    }
+}
+
+void tempArrayInit(Temperature *p)
+{
+    uint8_t i;
+    for(i = 0;i < NUM_TEMP;i++){
+        p[i].u8_col = i;
+        p[i].u8_temperature = i % 64;
+    }
+}
+void tempArrayRefresh(Temperature *p)
+{
+    //refresh array
+    uint8_t i;
+    for(i = 0;i < (NUM_TEMP - 1);i++){
+        p[i].u8_page = p[i + 1].u8_page;
+        //don't refresh the column
+        //p[i].u8_col = p[i + 1].u8_col;
+        p[i].u8_temperature = p[i + 1].u8_temperature;
+        p[i].u8_value = p[i + 1].u8_value;
+    }
+
+    //get new value
+    p[NUM_TEMP - 1].u8_temperature = (uint8_t)(temp_obj.getTemperature());
+    
+    //calculate value
+    p[NUM_TEMP - 1].calcPage();
+    p[NUM_TEMP - 1].calcValue();
+}
+
+void tempArrayDisplayOnOLED(Temperature *p)
+{
+    uint8_t i;
+    
+    for(i = 0;i < NUM_TEMP;i++){
+        
+        oled.writeBitmap(&p[i].u8_value,p[i].u8_page,p[i].u8_page,p[i].u8_col,p[i].u8_col);
+        /* clear the data on other pages withins the same column*/
+        for(uint8_t j = 0;j < 8;j++){
+            if(j == p[i].u8_page){
+                continue;
+            }    
+            else{
+                oled.writeBitmap(0,j,j,p[i].u8_col,p[i].u8_col);
+            }
+        }
+        
+    }
+}
\ No newline at end of file