/*
############################################################################
Autor: Engenharia entendida / Youtube
Projeto: Faça seu primeiro código usando DOIS NÚCLEOS com ESP32 | Programação para embarcados
Data: 10/01/2025
Detalhes do projeto: Vantagens de usar dois núcleos:
1️⃣ Multitarefa Real: Execute múltiplas tarefas simultaneamente,
como leitura de sensores e envio de dados pela rede, sem travamentos ou atrasos.
2️⃣ Desempenho Melhorado: Distribua a carga de trabalho entre os núcleos,
garantindo que tarefas complexas, como cálculos matemáticos, não atrasem funções mais simples,
como controle de periféricos.
3️⃣ Maior Eficiência Energética: Use um núcleo para tarefas críticas
e o outro para funções de baixa prioridade, otimizando o consumo de energia.
4️⃣ Flexibilidade para Projetos Avançados: Ideal para aplicações IoT,
automação e sistemas embarcados que exigem respostas rápidas e processamento paralelo.
############################################################################
*/
#include "freertos/FreeRTOS.h"
#define Relay1 23
#define Relay2 18
bool ledState1 = LOW;
bool ledState2 = LOW;
void setup() {
pinMode(Relay1, OUTPUT);
pinMode(Relay2, OUTPUT);
Serial.begin(115200);
//xTaskCreatePinnedToCore(funcao, nome, stackSize, parametros, prioridade, handler, core);
xTaskCreatePinnedToCore(loop1, "loop1", 1024, NULL, 1, NULL, 0); // Core 0
xTaskCreatePinnedToCore(loop2, "loop2", 1024, NULL, 1, NULL, 1); // Core 1
digitalWrite(Relay1,LOW);
digitalWrite(Relay2,LOW);
}
void loop1(void *pvParameters) {
while(1){
ledState1 = !ledState1;
digitalWrite(Relay1, ledState1);
delay(200);
Serial.println(xPortGetCoreID());
}
}
void loop2(void *pvParameters) {
while(1){
ledState2 = !ledState2;
digitalWrite(Relay2, ledState2);
delay(100);
Serial.println(xPortGetCoreID());
}
}
void loop() {
// Main loop does nothing
}