#include <Wire.h> // Inclui a biblioteca Wire usada para I2C
#include <Adafruit_BMP280.h> // Inclui a biblioteca do BMP280
#include <SPI.h> // Inclui a biblioteca SPI
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <freertos/semphr.h>
SemaphoreHandle_t serialMutex;
Adafruit_BMP280 bmp; //mutex acesso a serial
void task1 (void *Altitude){
while(true){
if(xSemaphoreTake(serialMutex, portMAX_DELAY)){
Serial.print("Tarefa 1 usando a serial");
float altitude = bmp.readAltitude(1013.25); // Lê a altitude do sensor
Serial.print("Altitude (m): "); //exibe os dados no monitor serial
Serial.println(altitude);
Serial.print("\n");
xSemaphoreGive(serialMutex); // Libera o mutex
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
}
void task2 (void *Pressure){
while(true){
if(xSemaphoreTake(serialMutex, portMAX_DELAY)){
Serial.print("Tarefa 2 usando a serial");
float pressure = bmp.readPressure(); // Lê a altitude do sensor
Serial.print("Pressure (hPa): ");
Serial.println(pressure);
Serial.print("\n");
xSemaphoreGive(serialMutex); // Libera o mutex
vTaskDelay(500 / portTICK_PERIOD_MS);
}
}
}
void task3 (void *Temperature){
while(true){
if(xSemaphoreTake(serialMutex, portMAX_DELAY)){
Serial.print("Tarefa 3 usando a serial");
float temperature = bmp.readTemperature(); // Lê a altitude do sensor
Serial.print("Temperature (C): ");
Serial.println(temperature);
Serial.print("\n");
xSemaphoreGive(serialMutex); // Libera o mutex
vTaskDelay(500 / portTICK_PERIOD_MS);
}
}
}
void setup() {
Serial.begin(9600);
// Inicializa o sensor BMP
if (!bmp.begin(0x76)) {//0x76 é o endereço 'genérico' para usarmos num BMP
Serial.println("Não foi possível encontrar um sensor BMP280 válido, cheque conexão");
while (1);
// Esse bloco significa: caso o BMP não inicialize ele vai travar o programa
}
Serial.println("Inicializado o BMP280");
serialMutex = xSemaphoreCreateMutex(); //cria o mutex
xTaskCreate(task1, "Task1", 1000, NULL, 1, NULL);
delay(500);
xTaskCreate(task2, "Task2", 1000, NULL, 1, NULL);
delay(500);
xTaskCreate(task3, "Task3", 1000, NULL, 1, NULL);
delay(500);
}
void loop() {
//nada aqui ;-;
}