#include <Arduino_FreeRTOS.h>
#include <queue.h>
#include <LiquidCrystal.h>
const int lcd_rows = 2;
const int lcd_cols = 16;
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
const int adc_pin = A4;
QueueHandle_t adc_queue;
void AdcTask(void *pvParameters);
void LcdTask(void *pvParameters);
void setup() {
Serial.begin(9600);
lcd.begin(lcd_cols, lcd_rows);
adc_queue = xQueueCreate(10, sizeof(float));
xTaskCreate(AdcTask, "AdcTask", 128, NULL, 1, NULL);
xTaskCreate(LcdTask, "LcdTask", 128, NULL, 2, NULL);
}
void loop() {
}
void AdcTask(void *pvParameters) {
(void) pvParameters;
while (1) {
int adc_value = analogRead(adc_pin);
float adc_voltage = (adc_value * 5.0)/1023.0 ;
xQueueSend(adc_queue, &adc_voltage, portMAX_DELAY);
vTaskDelay(pdMS_TO_TICKS(100));
}
}
void LcdTask(void *pvParameters) {
(void) pvParameters;
while (1) {
float adc_voltage;
if (xQueueReceive(adc_queue, &adc_voltage, portMAX_DELAY) == pdPASS) {
lcd.clear();
lcd.print("ADC Value: ");
lcd.print(adc_voltage);
lcd.print ("V");
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
}