|
@@ -2,16 +2,22 @@
|
|
|
#include "ssd1306.h"
|
|
|
#include "ssd1306_driver.h"
|
|
|
#include "esp_log.h"
|
|
|
+#include <stdio.h>
|
|
|
+#include <string.h>
|
|
|
#include "freertos/FreeRTOS.h"
|
|
|
#include "freertos/task.h"
|
|
|
-#include "freertos/semphr.h"
|
|
|
#include "freertos/queue.h"
|
|
|
|
|
|
#ifdef ENABLE_SSD1306
|
|
|
|
|
|
-void displayAndSendTask(void *pvParameters) {
|
|
|
+#define QUEUE_SIZE 3
|
|
|
+
|
|
|
+QueueHandle_t dataQueue = NULL;
|
|
|
|
|
|
+void displayAndSendTask(void *pvParameters) {
|
|
|
|
|
|
+ DisplayData data;
|
|
|
+ char txt[50];
|
|
|
|
|
|
ESP_LOGI("DISPLAY", "displayAndSendTask starting");
|
|
|
|
|
@@ -38,13 +44,64 @@ void displayAndSendTask(void *pvParameters) {
|
|
|
SSD1306_Puts("Pulses:", &Font_7x10,SSD1306_COLOR_WHITE);
|
|
|
SSD1306_UpdateScreen();
|
|
|
|
|
|
+ while( 1 ) {
|
|
|
+
|
|
|
+ if( xQueueReceive(dataQueue,&data,portMAX_DELAY) == pdTRUE ) {
|
|
|
+
|
|
|
+ switch( data.type ) {
|
|
|
+ case VPP: sprintf(txt,"%d",data.iData);
|
|
|
+ SSD1306_SetPosition(127-(strlen(txt)*8),22);
|
|
|
+ SSD1306_Puts(txt, &Font_7x10,SSD1306_COLOR_WHITE);
|
|
|
+ SSD1306_UpdateScreen();
|
|
|
+ break;
|
|
|
+ case TempA:
|
|
|
+ sprintf(txt,"%.2f",data.dData);
|
|
|
+ SSD1306_SetPosition(127-(strlen(txt)*8),0);
|
|
|
+ SSD1306_Puts(txt, &Font_7x10,SSD1306_COLOR_WHITE);
|
|
|
+ SSD1306_UpdateScreen();
|
|
|
+ break;
|
|
|
+ case TempB:
|
|
|
+ sprintf(txt,"%.2f",data.dData);
|
|
|
+ SSD1306_SetPosition(127-(strlen(txt)*8),11);
|
|
|
+ SSD1306_Puts(txt, &Font_7x10,SSD1306_COLOR_WHITE);
|
|
|
+ SSD1306_UpdateScreen();
|
|
|
+ break;
|
|
|
+ case Pulses:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
vTaskDelete(NULL);
|
|
|
}
|
|
|
|
|
|
+void addDataToQueue(int data_type, double dData_in, int iData_in) {
|
|
|
+
|
|
|
+ DisplayData d;
|
|
|
+
|
|
|
+ d.type = data_type;
|
|
|
+ d.dData = dData_in;
|
|
|
+ d.iData = iData_in;
|
|
|
+
|
|
|
+ if( dataQueue != NULL ) {
|
|
|
+ if( xQueueSend(dataQueue, &d, 0) != pdPASS ) {
|
|
|
+ ESP_LOGE("SERIAL","Queue full");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ ESP_LOGE("SERIAL","Queue not ready for send");
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
void initDisplayAndSend() {
|
|
|
|
|
|
+ dataQueue = xQueueCreate( QUEUE_SIZE, sizeof( DisplayData ) );
|
|
|
+ if(dataQueue == NULL) {
|
|
|
+ ESP_LOGE("SERIAL","Error creating the queue");
|
|
|
+ }
|
|
|
+
|
|
|
xTaskCreate(displayAndSendTask, "MQTT-Task", 1024*10, NULL, 2, NULL);
|
|
|
}
|
|
|
|