|
@@ -12,14 +12,16 @@
|
|
|
|
|
|
#define QUEUE_SIZE 3
|
|
|
|
|
|
-QueueHandle_t dataQueue = NULL;
|
|
|
+static QueueHandle_t dataQueue = NULL;
|
|
|
+static bool queueReady = false;
|
|
|
|
|
|
void displayAndSendTask(void *pvParameters) {
|
|
|
|
|
|
+ uint8_t aliveCnt = 0;
|
|
|
DisplayData data;
|
|
|
char txt[50];
|
|
|
|
|
|
- ESP_LOGI("DISPLAY", "displayAndSendTask starting");
|
|
|
+ ESP_LOGI("DISPnSND", "displayAndSendTask starting. Core:%d",xPortGetCoreID());
|
|
|
|
|
|
i2c_master_init();
|
|
|
oled_ssd1306_init();
|
|
@@ -41,38 +43,58 @@ void displayAndSendTask(void *pvParameters) {
|
|
|
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_Puts("kWh:", &Font_7x10,SSD1306_COLOR_WHITE);
|
|
|
SSD1306_UpdateScreen();
|
|
|
|
|
|
+ // Create the data input queue, now that all is setup
|
|
|
+ dataQueue = xQueueCreate( QUEUE_SIZE, sizeof( DisplayData ) );
|
|
|
+ if(dataQueue == NULL) {
|
|
|
+ ESP_LOGE("DISPnSND","Error creating the queue");
|
|
|
+ }
|
|
|
+ ESP_LOGI("DISPnSND", "Data input queue ready.");
|
|
|
+ queueReady = true;
|
|
|
+
|
|
|
while( 1 ) {
|
|
|
|
|
|
- if( xQueueReceive(dataQueue,&data,portMAX_DELAY) == pdTRUE ) {
|
|
|
+ if( xQueueReceive(dataQueue,&data, 1000 / portTICK_PERIOD_MS) == pdTRUE ) {
|
|
|
|
|
|
switch( data.type ) {
|
|
|
- case VPP: sprintf(txt,"%d",data.iData);
|
|
|
+ case type_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);
|
|
|
+ case type_TempA:
|
|
|
+ sprintf(txt,"%.2f\044C",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);
|
|
|
+ case type_TempB:
|
|
|
+ sprintf(txt,"%.2f\044C",data.dData);
|
|
|
SSD1306_SetPosition(127-(strlen(txt)*8),11);
|
|
|
SSD1306_Puts(txt, &Font_7x10,SSD1306_COLOR_WHITE);
|
|
|
SSD1306_UpdateScreen();
|
|
|
break;
|
|
|
- case Pulses:
|
|
|
+ case type_kWh:
|
|
|
+ sprintf(txt,"%.2f",data.dData);
|
|
|
+ SSD1306_SetPosition(127-(strlen(txt)*8),33);
|
|
|
+ SSD1306_Puts(txt, &Font_7x10,SSD1306_COLOR_WHITE);
|
|
|
+ SSD1306_UpdateScreen();
|
|
|
+ break;
|
|
|
+ default:
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+ else {
|
|
|
+ sprintf(txt,"%u",aliveCnt);
|
|
|
+ if( ++aliveCnt == 10 ) aliveCnt=0;
|
|
|
+ SSD1306_SetPosition(127-(strlen(txt)*8),50);
|
|
|
+ SSD1306_Puts(txt, &Font_7x10,SSD1306_COLOR_WHITE);
|
|
|
+ SSD1306_UpdateScreen();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-
|
|
|
vTaskDelete(NULL);
|
|
|
}
|
|
|
|
|
@@ -84,24 +106,19 @@ void addDataToQueue(int data_type, double dData_in, int iData_in) {
|
|
|
d.dData = dData_in;
|
|
|
d.iData = iData_in;
|
|
|
|
|
|
- if( dataQueue != NULL ) {
|
|
|
+ if( queueReady == true && dataQueue != NULL ) {
|
|
|
if( xQueueSend(dataQueue, &d, 0) != pdPASS ) {
|
|
|
- ESP_LOGE("SERIAL","Queue full");
|
|
|
+ ESP_LOGE("DISPnSND","Queue full");
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
- ESP_LOGE("SERIAL","Queue not ready for send");
|
|
|
+ ESP_LOGE("DISPnSND","Queue not ready.");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
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);
|
|
|
}
|
|
|
|