Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
// LCD1602 to Arduino Uno connection example #include <Arduino_FreeRTOS.h> #include <LiquidCrystal.h> #include <queue.h> #include <task.h> #include <semphr.h> #include <Wire.h> LiquidCrystal lcd(12, 11, 10, 9, 8, 7); //Atuadores static void v_entra_fria( void *pvParameters ); static void v_entra_quente( void *pvParameters ); static void v_sai_quente( void *pvParameters ); static void aquecimento( void *pvParameters ); //Sensores static void vol_fria( void *pvParameters ); static void vol_quente( void *pvParameters ); static void temperatura( void *pvParameters ); int v_f; int v_q; float temp; /* semaforos utilizados */ //SemaphoreHandle_t xSerial_semaphore; // produtor //SemaphoreHandle_t xSerial_semaphore1; // consumidor void setup() { lcd.begin(16, 2); // you can now interact with the LCD, e.g.: lcd.print("Hello World!"); /* Criação dos semaforos */ //xSerial_semaphore = xSemaphoreCreateBinary(); //xSerial_semaphore1 = xSemaphoreCreateBinary(); /*if (xSerial_semaphore == NULL) { Serial.println("Erro: nao e possivel criar o semaforo"); while(1); /* Sem semaforo o funcionamento esta comprometido. Nada mais deve ser feito. }*/ xTaskCreate( v_entra_fria, /* Função que executa a tarefa */ ( const char * ) "v_entra_fria", /* String que define o nome da tarefa */ 100, /* tamanho da pilha da tarefa */ NULL, /* parametros para a tarefa */ tskIDLE_PRIORITY + 1, /* prioridade da tarefa */ NULL ); /* handle da tarefa */ xTaskCreate( v_entra_quente, /* Função que executa a tarefa */ ( const char * ) "v_entra_quente", /* String que define o nome da tarefa */ 100, /* tamanho da pilha da tarefa */ NULL, /* parametros para a tarefa */ tskIDLE_PRIORITY + 1, /* prioridade da tarefa */ NULL ); /* handle da tarefa */ xTaskCreate( v_sai_quente, /* Função que executa a tarefa */ ( const char * ) "v_sai_quente", /* String que define o nome da tarefa */ 100, /* tamanho da pilha da tarefa */ NULL, /* parametros para a tarefa */ tskIDLE_PRIORITY + 1, /* prioridade da tarefa */ NULL ); /* handle da tarefa */ xTaskCreate( aquecimento, /* Função que executa a tarefa */ ( const char * ) "aquecimento", /* String que define o nome da tarefa */ 100, /* tamanho da pilha da tarefa */ NULL, /* parametros para a tarefa */ tskIDLE_PRIORITY + 1, /* prioridade da tarefa */ NULL ); /* handle da tarefa */ xTaskCreate( vol_fria, /* Função que executa a tarefa */ ( const char * ) "vol_fria", /* String que define o nome da tarefa */ 100, /* tamanho da pilha da tarefa */ NULL, /* parametros para a tarefa */ tskIDLE_PRIORITY + 1, /* prioridade da tarefa */ NULL ); /* handle da tarefa */ xTaskCreate( vol_quente, /* Função que executa a tarefa */ ( const char * ) "vol_quente", /* String que define o nome da tarefa */ 100, /* tamanho da pilha da tarefa */ NULL, /* parametros para a tarefa */ tskIDLE_PRIORITY + 1, /* prioridade da tarefa */ NULL ); /* handle da tarefa */ xTaskCreate( temperatura, /* Função que executa a tarefa */ ( const char * ) "temperatura", /* String que define o nome da tarefa */ 100, /* tamanho da pilha da tarefa */ NULL, /* parametros para a tarefa */ tskIDLE_PRIORITY + 1, /* prioridade da tarefa */ NULL ); /* handle da tarefa */ /* Inicialização do escalonador */ vTaskStartScheduler(); return ; /* Inicialização do escalonador */ vTaskStartScheduler(); return ; /* Inicialização do escalonador */ vTaskStartScheduler(); return ; } void loop() { // ... } static void v_entra_fria( void *pvParameters ) { //xSemaphoreGive(xSerial_semaphore); while (1) { } } static void v_entra_quente( void *pvParameters ) { //xSemaphoreGive(xSerial_semaphore); while (1) { } } static void v_sai_quente( void *pvParameters ) { //xSemaphoreGive(xSerial_semaphore); while (1) { } } static void aquecimento( void *pvParameters ) { //xSemaphoreGive(xSerial_semaphore); while (1) { } } static void vol_fria( void *pvParameters ) { //Define o status de volume dos dois sensores do tanque frio int s1 = 0; //Sensor Min int s2 = 0; //Sensor MAX //xSemaphoreGive(xSerial_semaphore); v_f = 1; while (1) { // Lê sensores if (s2 == 1) { //Sensor max ativado v_f = 2; // Tanque cheio, bloquear entrada } else if (s1 == 0) { //Sensor min desativado v_f = 1; // Quase sem liquido, não pode ter saida e tem que ter entrada } } } static void vol_quente( void *pvParameters ) { //xSemaphoreGive(xSerial_semaphore); //Define o status de volume dos dois sensores do tanque quente int s1 = 0; //Sensor Min int s2 = 0; //Sensor MAX //xSemaphoreGive(xSerial_semaphore); v_q = 1; while (1) { // Lê sensores if (s2 == 1) { //Sensor max ativado v_q = 2; // Tanque cheio, bloquear entrada } else if (s1 == 0) { //Sensor min desativado v_q = 1; // Quase sem liquido, não pode ter saida e tem que ter entrada } } } static void temperatura( void *pvParameters ) { float temperatura = 0; //xSemaphoreGive(xSerial_semaphore); temperatura = 70,5; // Teste while (1) { //Lê termometro aqui temp = temperatura; } }
Compartilhar