// Prueba Multitarea(Hilos)RTOS en Diferente Nucleos ESP32
TaskHandle_t Tarea0; // Tarea0 parpadeo LED 0,3 segundos
TaskHandle_t Tarea1; // Tarea1 parpadeo LED 1 Segundo
TaskHandle_t Tarea2; // Tarea2 Giro Motor Lento
TaskHandle_t Tarea3; // Tarea3 Giro Motor Rapido
#define x_paso 15 // Define el Pin de STEP para Motor de eje X
#define x_dire 2 // Define el Pin de DIR para Motor de eje X
#define y_paso 14 // Define el Pin de STEP para Motor de eje Y
#define y_dire 27 // Define el Pin de DIR para Motor de eje Y
int x_retardo = 3000; // Menor numero el giro es mas rapido X
int y_retardo = 500; // Menor numero el giro es mas rapido Y
void setup() {
Serial.begin(115200);
xTaskCreatePinnedToCore(loop0,"Tarea_0",1000,NULL,1,&Tarea0,0); // Core 0
xTaskCreatePinnedToCore(loop1,"Tarea_1",1000,NULL,1,&Tarea1,0); // Core 0
xTaskCreatePinnedToCore(loop2,"Tarea_2",1000,NULL,1,&Tarea2,1); // Core 1
xTaskCreatePinnedToCore(loop3,"Tarea_3",1000,NULL,1,&Tarea3,1); // Core 1
pinMode(12,OUTPUT); pinMode(13,OUTPUT); // Define Salida LEDs
pinMode(x_paso,OUTPUT); pinMode(x_dire, OUTPUT); // Define Salida Motor
pinMode(y_paso,OUTPUT); pinMode(y_dire, OUTPUT); // Define Salida Motor
}
void loop() {
delay (4000);
digitalWrite(x_dire, LOW); // direccion de giro 0
digitalWrite(y_dire, LOW); // direccion de giro 0
delay (4000);
digitalWrite(x_dire, HIGH); // direccion de giro 1
digitalWrite(y_dire, HIGH); // direccion de giro 1
}
void loop0(void *parameter){ // Tarea0 parpadeo LED 0,3 segundos
while(1==1){
digitalWrite(13, HIGH);
delay(300);
digitalWrite(13, LOW);
delay(300);
}
}
void loop1(void *parameter){ // Tarea1 parpadeo LED 1 Segundo
while(1==1){
digitalWrite(12, HIGH);
delay(1000);
digitalWrite(12, LOW);
delay(1000);
}
}
void loop2(void *parameter){ // Tarea2 Giro Motor Lento
while(1==1){
digitalWrite(x_paso, HIGH);
delayMicroseconds(x_retardo);
digitalWrite(x_paso, LOW);
delayMicroseconds(x_retardo);
}
}
void loop3(void *parameter){ // Tarea3 Giro Motor Rapido
while(1==1){
digitalWrite(y_paso, HIGH);
delayMicroseconds(y_retardo);
digitalWrite(y_paso, LOW);
delayMicroseconds(y_retardo);
}
}