#include <stdio.h>
#include <string.h>
#if CONFIG_FREERTOS_UNICORE
static const BaseType_t app_cpu = 0;
#else
static const BaseType_t app_cpu = 1;
#endif
static TaskHandle_t* task_input = NULL;
static TaskHandle_t* task_led = NULL;
static QueueHandle_t delay_queue;
static QueueHandle_t count_queue;
static int led_pin=10;
char * buff =NULL;
int buff_len=0;
int delay_time=500;
int blink=0;
void input(void * parameter){
buff_len=Serial.available();
if (buff_len>0){
buff = (char*)realloc(buff , buff_len*sizeof(char));
for (int i=0;i<buff_len;i++){
buff[i]=Serial.read();
}
}
Serial.write(buff,buff_len);
int delay_time;
char delay_str[6];
// sscanf(buff,"%s %d",&delay_str,&delay_time);
// if (delay_str=="delay"){
// if(xQueueSend(delay_queue,(void*)&delay_time,10)!=pdTRUE)
// {
// Serial.println("queue is full");
// }
// }
sscanf(buff, "%5s %d", delay_str, &delay_time); // Limit to 5 characters
if (strcmp(delay_str, "delay") == 0) {
if (xQueueSend(delay_queue, (void*)&delay_time, 10) != pdTRUE) {
Serial.println("Queue is full");
}
}
char * count[7];
if (xQueueReceive(count_queue,(void*)&count,10)!=pdTRUE){
Serial.println("hi");
}
vTaskDelay(100/portTICK_PERIOD_MS);
}
void led_f(void* parameter){
if (xQueueReceive(delay_queue,(void*)&delay_time,0)!=pdTRUE){
Serial.println(delay_time);
}
digitalWrite(led_pin, HIGH);
vTaskDelay(delay_time/(2*portTICK_PERIOD_MS));
digitalWrite(led_pin, LOW);
vTaskDelay(delay_time/(2*portTICK_PERIOD_MS));
blink++;
if (blink==100){
blink=0;
char * str_send[7]={"b","l","i","n","k","e","d"};
if(xQueueSend(count_queue,(void*)&str_send,10)!=pdTRUE)
{
Serial.println("queue is full");
}
}
}
void setup() {
Serial.begin(115200);
Serial.println("started");
pinMode(led_pin, OUTPUT);
delay_queue=xQueueCreate(10, sizeof(char));
count_queue=xQueueCreate(10, sizeof(int));
xTaskCreatePinnedToCore(input, "input", 1024, NULL, 1, task_input, app_cpu);
xTaskCreatePinnedToCore(led_f, "led", 1024, NULL, 1, task_led, app_cpu);
}
void loop() {
// put your main code here, to run repeatedly:
}