// #if CONFIG_FREERTOS_UNICORE
// static const BaseType_t app_cpu = 0;
// #else
// static const BaseType_t app_cpu = 1;
// #endif
static const BaseType_t pro_cpu = 0;
static const BaseType_t app_cpu = 1;
//int led_pin = 48;
//const char msg[] = "RTOS is working woow";
#define in_1 42
#define in_2 41
#define in_3 40
#define out_1 7
#define out_2 6
#define out_3 5
bool cmd[3] = {0,0,0}; 
static TaskHandle_t task_readInputs = NULL;
static TaskHandle_t task_cmdOutputs = NULL;
static SemaphoreHandle_t bin_sem;
void cmd_outputs(void *paramter){  
  xSemaphoreTake(bin_sem,portMAX_DELAY);
  while(1){  
     if(cmd[0]) digitalWrite(out_1,HIGH); else digitalWrite(out_1,LOW); 
     if(cmd[1]) digitalWrite(out_2,HIGH); else digitalWrite(out_2,LOW); 
     if(cmd[2]) digitalWrite(out_3,HIGH); else digitalWrite(out_3,LOW); 
  //   Serial.println("********");
  //   Serial.print("out1 : ");
  //   Serial.print(cmd[0]);
  //   Serial.println();
  //   Serial.print("out2 : ");
  //   Serial.print(cmd[1]);
  //   Serial.println();
  //   Serial.print("out3 : ");
  //   Serial.print(cmd[2]);
  //   Serial.println();
  //  Serial.println("********");
    vTaskDelay(10/portTICK_PERIOD_MS);
  }
}

void read_inputs(void *paramter){
  bool in1=0;
  bool in2=0;
  bool in3=0;
  xSemaphoreGive(bin_sem);
  while(1){ 
   in1 = digitalRead(in_1);
   if(in1) cmd[0]=1; else cmd[0]=0;
   in2 = digitalRead(in_2);
   if(in2) cmd[1]=1; else cmd[1]=0;
   in3 = digitalRead(in_3); 
   if(in3) cmd[2]=1; else cmd[2]=0;
  //  Serial.println("********");
  //   Serial.print("in1 : ");
  //   Serial.print(in1);
  //   Serial.println();
  //   Serial.print("in2 : ");
  //   Serial.print(in2);
  //   Serial.println();
  //   Serial.print("in3 : ");
  //   Serial.print(in3);
  //   Serial.println();
  //  Serial.println("********");
  
    vTaskDelay(10/portTICK_PERIOD_MS);
  }
}
 
void setup() {
  // put your setup code here, to run once:
  // Serial.begin(115200);
  // vTaskDelay(1000/portTICK_PERIOD_MS);
  // Serial.println();
  // Serial.println("start...");
 pinMode(in_1, INPUT);
 pinMode(in_2, INPUT);
 pinMode(in_3, INPUT);
 pinMode(out_1, OUTPUT);
 pinMode(out_2, OUTPUT);
 pinMode(out_3, OUTPUT);
bin_sem = xSemaphoreCreateBinary();
 xTaskCreatePinnedToCore(cmd_outputs,"task1", 1024,NULL,1,&task_readInputs,app_cpu);
xTaskCreatePinnedToCore(read_inputs,"task2", 1024,NULL,1,&task_cmdOutputs,pro_cpu);
}

void loop() {
  // put your main code here, to run repeatedly:
 // delay(10); // this speeds up the simulation
  //  for(int i=0;i<3;i++){
  //    vTaskSuspend(task_cmdOutputs);
  //    vTaskDelay(2000/portTICK_PERIOD_MS);
  //    vTaskResume(task_cmdOutputs);
  //    vTaskDelay(2000/portTICK_PERIOD_MS);
  //   }

  //   if(task_readInputs != NULL ){
  //     vTaskDelete(task_readInputs);
  //     task_readInputs = NULL;
  //   }
}
Loading
esp32-s3-devkitc-1