Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Arduino_FreeRTOS.h>
- #include <queue.h>
- #include <Arduino.h>
- #include <LiquidCrystal.h>
- typedef struct {
- char text[30];
- int message_number;
- } message_t;
- void TaskRead(void *queue);
- void TaskPerform(void *queue);
- QueueHandle_t queue;
- message_t message;
- const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
- LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
- void setup() {
- pinMode(8, OUTPUT);
- pinMode(9, OUTPUT);
- lcd.begin(16, 2);
- lcd.print("Hello, World!");
- Serial.begin(115200);
- Serial.setTimeout(2000);
- queue = xQueueCreate(5, sizeof(message_t));
- xTaskCreate(TaskRead, "UART Read Task", 256, queue, 2, NULL);
- xTaskCreate(TaskPerform, "Perform Queue Task", 256, queue, 2, NULL);
- }
- void TaskRead(void *queue){
- message_t message;
- while(1){
- if(Serial.available() > 0){
- size_t num_read = Serial.readBytesUntil('\r', message.text, sizeof(message.text) - 1);
- message.text[num_read] = '\0';
- xQueueSend(queue, &message, portMAX_DELAY);
- message.message_number++;
- Serial.println("Sent message to taskPerform()");
- vTaskDelay(pdMS_TO_TICKS(3000));
- }
- }
- }
- void TaskPerform(void *queue){
- message_t message;
- while(1){
- xQueueReceive(queue, &message, portMAX_DELAY);
- Serial.println("Received messsage from taskRead()");
- if(strcmp(message.text, "set led 1 on") == 0) {
- digitalWrite(8, HIGH);
- } else if(strcmp(message.text, "set led 1 off") == 0) {
- digitalWrite(8, LOW);
- } else if(strcmp(message.text, "set led 2 on") == 0) {
- digitalWrite(9, HIGH);
- } else if(strcmp(message.text, "set led 2 off") == 0) {
- digitalWrite(9, LOW);
- } else if(strcmp(message.text, "get pot") == 0) {
- Serial.println(analogRead(A0));
- } else if(strstr(message.text, "set lcd") != NULL) {
- lcd.clear();
- char buffer[40] = { 0 };
- int index = 0;
- for(int i = 8; i < strlen(message.text); i++) {
- buffer[index] = message.text[i];
- index++;
- }
- lcd.print(buffer);
- } else if(strstr(message.text, "set piezo") != NULL) {
- char buffer[40] = { 0 };
- int index = 0;
- for(int i = 10; i < 13; i++) {
- buffer[index] = message.text[i];
- index++;
- }
- int frequency;
- sscanf(buffer, "%d", &frequency);
- tone(7, frequency, 200);
- }
- }
- }
- void loop()
- {
- }
Advertisement
Add Comment
Please, Sign In to add comment