Moortiii icon

arudino 5

Moortiii | PRO | 04/03/18 10:18:13 AM UTC | 0 ⭐ | 474 👁️ | Never ⏰ | []
C++ |

2.54 KB

|

None

|

0 👍

/

0 👎

#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()
{
}

Comments