static int taskCore0 = 0;
static int taskCore1 = 1;
String taskMessage = "Изпълнена е задача стартирана на ядро ";
//temperature sensor
#include "DHTesp.h"
const int DHT_PIN = 15;
DHTesp dhtSensor;
//distance
#define PIN_TRIG 12
#define PIN_ECHO 13
void setup() {
//temperature
Serial.begin(112500);
delay(1000);
//distance
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
Serial.begin(115200);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
//
Serial.print("Начало на създаване на задача за ядро ");
Serial.println(taskCore0);
xTaskCreatePinnedToCore(
coreTask0, /* Функция за изпълнение на задачата */
"coreTask", /* Име на задачата */
10000, /* Размер на стека за думи */
NULL, /* Входен параметър за таска */
1, /* Приоритет на таска 0 до 3 3- най висок, 0-обслужващи процеси */
NULL, /* Манипулатор на задачата */
taskCore0); /* Ядро на което да стартира таска */
Serial.print("Начало на създаване на задача за ядро ");
Serial.println(taskCore1);
xTaskCreatePinnedToCore(
coreTask1, /* Функция за изпълнение на задачата */
"coreTask", /* Име на задачата */
10000, /* Размер на стека с думи */
NULL, /* Входен параметър за таска */
1, /* Приоритет на таска 0 до 3 3- най висок, 0-обслужващи процеси */
NULL, /* Манипулатор на задачата */
taskCore1); /* Ядро на което да стартира таска */
Serial.println("Задачите са създадени...");
Serial.println("Стартиранр на главната процедура..."); // Процедурата се изпълнява конкурентно с всички дефинирани таскове.
Serial.println("");
}
void loop() {
while (true) {} // Тук, този празен цилък е нужен, за да се изпълняват задачите на отделните ядра
delay(10);
}
void coreTask0( void * pvParameters ) {
String taskMessage0 = taskMessage + xPortGetCoreID();
TempAndHumidity data = dhtSensor.getTempAndHumidity();
while (true) {
delay(2000);
Serial.println(taskMessage0);
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
}
}
void coreTask1( void * pvParameters ) {
String taskMessage1 = taskMessage + xPortGetCoreID();
while (true) {
delay(2000);
Serial.println(taskMessage1);
// Start a new measurement:
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
// Read the result:
int duration = pulseIn(PIN_ECHO, HIGH);
Serial.print("Distance in CM: ");
Serial.println(duration / 58);
Serial.print("Distance in inches: ");
Serial.println(duration / 148);
delay(1000);
}
}