#include <Arduino.h>
#include <FreeRTOS.h>
#include <task.h>

int LED1_State = 0, LED2_State = 0;

unsigned long runner = 0;
unsigned long curr1 = 0, curr2 = 0;

#define LED1 13
#define LED2 14

void blinkLED1(void * param)
{
  while(1)
  {
		runner = millis();
    if(runner - curr1 == 500)
		{
				curr1 = runner;
        if(LED1_State == 0)
        {
        	LED1_State = 1;
        }
        else
        {
        	LED1_State = 0;
        }
        digitalWrite(LED1, LED1_State);
        Serial.print("Executed on core: ");
        Serial.println(xPortGetCoreID());
    }
  }
}

void blinkLED2(void * param)
{
  while(1)
  {
		runner = millis();
    if(runner - curr2 == 2000)
		{
			curr2 = runner;
        if(LED2_State == 0)
        {
        	LED2_State = 1;
        }
        else
        {
        	LED2_State = 0;
        }
        digitalWrite(LED2, LED2_State);
        Serial.print("Executed on core: ");
        Serial.println(xPortGetCoreID());
    }
  }
}

void setup() {
	Serial.begin(115200);
	pinMode(LED1, OUTPUT);
	pinMode(LED2, OUTPUT);
}

void loop() {
  	runner = millis();
    
		initCore0();

    initCore1();

		// Serial.println("Started...");
}

void initCore0()
{
	xTaskCreatePinnedToCore(
		blinkLED1,      	// function name
		"LED blinking",   // task name
		5000,	       			// stack size
		NULL,   	    		// parameter
		1,          			// priority
		NULL,	       			// task handler
		0       	    		// core
	);
}

void initCore1()
{
	xTaskCreatePinnedToCore(
		blinkLED2,      	// function name
		"LED blinking",   // task name
		2000,       			// stack size
		NULL,       			// parameter
		1,          			// priority
		NULL,       			// task handler
		1           			// core
	);
}