#include <Arduino.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_log.h"
#include "driver/uart.h"
#include "string.h"
#include "driver/gpio.h"
#define OUT_BUFFER_SIZE 50
struct data_table
{
String data1;
String data2;
};
data_table data_table_1;
//HardwareSerial COM0(0);
//HardwareSerial COM1(1);
//HardwareSerial COM2(2);
//*****************************************************************************
// Define Queues
static QueueHandle_t queue_SerialOut;
static QueueHandle_t queue_TFT;
//*****************************************************************************
// Define Tasks
void task_MCreader1(void *parameter) {
char buffer[OUT_BUFFER_SIZE];
int8_t cont = 0;
data_table_1.data1 = String(cont);
while(1){
vTaskDelay(3000 / portTICK_PERIOD_MS);
sprintf(buffer,"MCreader1!");
xQueueSend(queue_SerialOut, (void*)buffer , (TickType_t)0 );
cont++;
}
}
void task_MCreader2(void *parameter) {
char buffer[OUT_BUFFER_SIZE];
int8_t cont = 10;
data_table_1.data2 = String(cont);
while(1){
vTaskDelay(3000 / portTICK_PERIOD_MS);
sprintf(buffer,"MCreader2!");
xQueueSend(queue_SerialOut, (void*)buffer , (TickType_t)0 );
cont++;
}
}
void task_output(void *arg)
{
char buffer[OUT_BUFFER_SIZE];
while(1)
{
if(xQueueReceive(queue_SerialOut, &(buffer) , (TickType_t)5 ))
{
//COM0.printf("got a data from queue! === %s \n",buffer);
//Serial.printf("got a data from queue! === %s \n",buffer);
Serial.printf("data1= %s \n",data_table_1.data1);
Serial.printf("data2= %s \n",data_table_2.data1);
}
vTaskDelay(10 / portTICK_PERIOD_MS);
//Serial.println("up");
}
}
void setup() {
//COM0.begin(115000,SERIAL_8N1,34,33); //(BAUD, CONFIG, RX, TX )
//COM1.begin(115000,SERIAL_8N1,35,32);
//COM2.begin(115000,SERIAL_8N1,25,26);
Serial.begin(115200);
Serial.println(" Initializing");
//*****************************************************************************
// Start queue
queue_SerialOut = xQueueCreate(5, 100);
queue_TFT = xQueueCreate(5, sizeof( struct TFT_page * ));
//*****************************************************************************
// Start Task xTaskCreate(Function name of the task, Name of the task, Stack size (bytes), Parameter to pass, Task priority, Task handle )
xTaskCreate(task_MCreader1, "MCreader1" , 2048, NULL, 1, NULL );
xTaskCreate(task_MCreader2, "MCreader2" , 2048, NULL, 1, NULL );
xTaskCreate(task_output , "task_output", 2048, NULL, 1, NULL );
}
void loop() {
vTaskDelay(1 / portTICK_PERIOD_MS);
}