Browse Source

Disp is showing the right text

Thomas Chef 3 năm trước cách đây
mục cha
commit
0b8148fe4d
3 tập tin đã thay đổi với 60 bổ sung15 xóa
  1. 38 5
      main/main.c
  2. 15 8
      main/ssd1306.c
  3. 7 2
      main/ssd1306.h

+ 38 - 5
main/main.c

@@ -26,6 +26,8 @@ extern void sendMQTTMessage(const char * topic, const char * data);
 
 extern void sendHTTPMessage(const double inData, const uint32_t bigCnt, const int32_t cnt);
 
+void displayTask(void *pvParameters);
+
 // Chip info:
 // This is esp32 chip with 2 CPU cores, WiFi/BT/BLE, silicon revision 1, 4MB external flash
 
@@ -57,16 +59,15 @@ void app_main(void)
     xTaskCreate(serialRxTask, "Serial_RX_Task", 10000, NULL, 10, NULL);
 #endif
 
-#ifdef ENABLE_SSD1306
-    i2c_master_init();
-    oled_ssd1306_init();
-#endif
-
     char dataStr[100];
     double kWh = 0.0;
     uint32_t bigCnt = 0;
     int32_t cnt = 0;
 
+    xTaskCreate(displayTask, "OLED-Task", 1024*10, NULL, 2, NULL);
+
+
+
     while( true ) {
 
 
@@ -89,3 +90,35 @@ void app_main(void)
     }
     esp_restart();
 }
+
+
+void displayTask(void *pvParameters) {
+
+#ifdef ENABLE_SSD1306
+
+    i2c_master_init();
+    oled_ssd1306_init();
+
+    vTaskDelay(100 / portTICK_PERIOD_MS);
+    SSD1306_SetPosition(4,18);
+    SSD1306_DrawVertLine(29,0,128);
+    SSD1306_Puts("Home Energy Meter", &Font_7x10,SSD1306_COLOR_WHITE);
+    SSD1306_SetPosition(4,31);
+    SSD1306_Puts("v1.0", &Font_7x10,SSD1306_COLOR_WHITE);
+    SSD1306_UpdateScreen();
+    vTaskDelay(3000 / portTICK_PERIOD_MS);
+
+    SSD1306_Clear();
+    SSD1306_SetPosition(0,0);
+    SSD1306_Puts("Temp A:", &Font_7x10,SSD1306_COLOR_WHITE);
+    SSD1306_SetPosition(0,11);
+    SSD1306_Puts("Temp B:", &Font_7x10,SSD1306_COLOR_WHITE);
+    SSD1306_SetPosition(0,22);
+    SSD1306_Puts("ADC Vpp:", &Font_7x10,SSD1306_COLOR_WHITE);
+    SSD1306_SetPosition(0,33);
+    SSD1306_Puts("Pulses:", &Font_7x10,SSD1306_COLOR_WHITE);
+    SSD1306_UpdateScreen();
+
+#endif
+    vTaskDelete(NULL);
+}

+ 15 - 8
main/ssd1306.c

@@ -20,6 +20,15 @@ typedef struct {
 /* Private variable */
 static SSD1306_t SSD1306;
 
+void SSD1306_SetPosition(const int x, const int y) {
+    SSD1306.CurrentX = x;
+    SSD1306.CurrentY = y;
+}
+
+void SSD1306_Clear() {
+    memset(SSD1306_Buffer,0,SSD1306_WIDTH * SSD1306_HEIGHT / 8);
+}
+
 void SSD1306_DrawPixel(uint16_t x, uint16_t y, SSD1306_COLOR_t color) {
 	if (
 		x >= SSD1306_WIDTH ||
@@ -82,6 +91,10 @@ char SSD1306_Puts(char* str, FontDef_t* Font, SSD1306_COLOR_t color) {
 	return *str;
 }
 
+void SSD1306_DrawVertLine(const uint8_t y, const uint8_t x1, const uint8_t x2) {
+    for(uint8_t x=x1; x<x2; x++) SSD1306_DrawPixel(x,y,SSD1306_COLOR_WHITE);
+}
+
 void SSD1306_UpdateScreen(void) {
 	uint8_t m;
 	
@@ -160,17 +173,11 @@ esp_err_t oled_ssd1306_init() {
     esp_err_t ret = i2c_master_cmd_begin(I2C_MASTER_NUM, cmd, 1000 / portTICK_RATE_MS);
     i2c_cmd_link_delete(cmd);
 
-    SSD1306.CurrentX = 30;
-	SSD1306.CurrentY = 10;
+    SSD1306.CurrentX = 0;
+	SSD1306.CurrentY = 0;
 	
 	SSD1306.Initialized = 1;
 
-    SSD1306_Putc('A',&Font_7x10,SSD1306_COLOR_WHITE);
-    SSD1306_DrawPixel(50,40, SSD1306_COLOR_WHITE);
-    SSD1306_Putc('X',&Font_7x10,SSD1306_COLOR_WHITE);
-    SSD1306_Puts(" THOMAS WAS\nHERE", &Font_7x10,SSD1306_COLOR_WHITE);
-    SSD1306_UpdateScreen();
-
     return ret;
 }
 

+ 7 - 2
main/ssd1306.h

@@ -4,7 +4,6 @@
 #include <driver/spi_master.h>
 #include "fonts.h"
 
-esp_err_t oled_ssd1306_init();
 
 #define READ_BIT   I2C_MASTER_READ              /*!< I2C master read */
 
@@ -64,7 +63,13 @@ typedef enum {
 #define SSD1306_HEIGHT           64
 
 
-
+esp_err_t oled_ssd1306_init();
+void SSD1306_Clear();
+void SSD1306_DrawVertLine(const uint8_t y, const uint8_t x1, const uint8_t x2);
+char SSD1306_Putc(char ch, const FontDef_t* Font, SSD1306_COLOR_t color);
+char SSD1306_Puts(char* str, FontDef_t* Font, SSD1306_COLOR_t color);
+void SSD1306_SetPosition(const int x, const int y);
+void SSD1306_UpdateScreen(void);
 
 
 /**