Moortiii

arudino 5

Apr 3rd, 2018
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.54 KB | None | 0 0
  1. #include <Arduino_FreeRTOS.h>
  2. #include <queue.h>
  3. #include <Arduino.h>
  4. #include <LiquidCrystal.h>
  5.  
  6. typedef struct {
  7.   char text[30];
  8.   int message_number;
  9. } message_t;
  10.  
  11. void TaskRead(void *queue);
  12. void TaskPerform(void *queue);
  13.  
  14. QueueHandle_t queue;
  15. message_t message;
  16. const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
  17. LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
  18.  
  19. void setup() {
  20.     pinMode(8, OUTPUT);
  21.     pinMode(9, OUTPUT);
  22.  
  23.     lcd.begin(16, 2);
  24.     lcd.print("Hello, World!");
  25.  
  26.     Serial.begin(115200);
  27.     Serial.setTimeout(2000);
  28.  
  29.     queue = xQueueCreate(5, sizeof(message_t));
  30.  
  31.     xTaskCreate(TaskRead, "UART Read Task", 256, queue, 2, NULL);
  32.     xTaskCreate(TaskPerform, "Perform Queue Task", 256, queue, 2, NULL);
  33. }
  34.  
  35. void TaskRead(void *queue){
  36.   message_t message;
  37.  
  38.   while(1){
  39.     if(Serial.available() > 0){
  40.       size_t num_read = Serial.readBytesUntil('\r', message.text, sizeof(message.text) - 1);
  41.       message.text[num_read] = '\0';
  42.       xQueueSend(queue, &message, portMAX_DELAY);
  43.       message.message_number++;
  44.  
  45.       Serial.println("Sent message to taskPerform()");
  46.       vTaskDelay(pdMS_TO_TICKS(3000));
  47.     }
  48.   }
  49. }
  50.  
  51. void TaskPerform(void *queue){
  52.     message_t message;
  53.     while(1){
  54.         xQueueReceive(queue, &message, portMAX_DELAY);
  55.         Serial.println("Received messsage from taskRead()");
  56.         if(strcmp(message.text, "set led 1 on") == 0) {
  57.           digitalWrite(8, HIGH);
  58.         } else if(strcmp(message.text, "set led 1 off") == 0) {
  59.           digitalWrite(8, LOW);
  60.         } else if(strcmp(message.text, "set led 2 on") == 0) {
  61.           digitalWrite(9, HIGH);
  62.         } else if(strcmp(message.text, "set led 2 off") == 0) {
  63.           digitalWrite(9, LOW);
  64.         } else if(strcmp(message.text, "get pot") == 0) {
  65.           Serial.println(analogRead(A0));
  66.         } else if(strstr(message.text, "set lcd") != NULL) {
  67.           lcd.clear();
  68.           char buffer[40] = { 0 };
  69.           int index = 0;
  70.  
  71.           for(int i = 8; i < strlen(message.text); i++) {
  72.               buffer[index] = message.text[i];
  73.               index++;
  74.           }
  75.  
  76.           lcd.print(buffer);
  77.         } else if(strstr(message.text, "set piezo") != NULL) {
  78.           char buffer[40] = { 0 };
  79.           int index = 0;
  80.  
  81.           for(int i = 10; i < 13; i++) {
  82.             buffer[index] = message.text[i];
  83.             index++;
  84.           }
  85.  
  86.           int frequency;
  87.           sscanf(buffer, "%d", &frequency);
  88.           tone(7, frequency, 200);
  89.         }
  90.     }
  91. }
  92.  
  93. void loop()
  94. {
  95. }
Advertisement
Add Comment
Please, Sign In to add comment