Введите текст заголовка

Страница на этапе разработки

#include <Arduino_FreeRTOS.h>
#include<semphr.h>

typedef struct{
  const char *pcTaskName;
  const char *pcText;
  int SensorID;
  int DelayTicks;
} AnalogReadParam_t;

SemaphoreHandle_t xSerialSemaphore;

void TaskDigitalRead(void *pvParameters);
void TaskAnalogReadParam(void *pvParameters);

AnalogReadParam_t xParams[3], *pxParam=xParams;

void setup() {
Serial.begin(9600);
while(!Serial){;}
if(xSerialSemaphore == NULL){
  xSerialSemaphore = xSemaphoreCreateMutex();
  if((xSerialSemaphore) != NULL) {
    xSemaphoreGive((xSerialSemaphore));
  }
}
xTaskCreate(TaskDigitalRead, «DigitalRead»,128,NULL,(configMAX_PRIORITIES-3),NULL);

pxParam->pcTaskName=»TAskInutA1″;
pxParam->pcText=»Input A1″;
pxParam->SensorID = A1;
pxParam->DelayTicks = pdMS_TO_TICKS(250UL);
pxParam++;

pxParam->pcTaskName=»TAskInutA2″;
pxParam->pcText=»Input A2″;
pxParam->SensorID = A2;
pxParam->DelayTicks = 1;
pxParam++;

pxParam->pcTaskName=»TAskInutA3″;
pxParam->pcText=»Input A3″;
pxParam->SensorID = A3;
pxParam->DelayTicks = 1;
pxParam++;//???

for(pxParam = &xParams[0]; pxParam < &xParams[3]; pxParam++){
  Serial.println(«\n————————————«);
  Serial.print(«Creating «);
  Serial.println(pxParam->pcTaskName);
  xTaskCreate(TaskAnalogReadParam,pxParam->pcTaskName,128,(void *)pxParam, (configMAX_PRIORITIES-2),NULL);
}
}

void loop() {
  ;// put your main code here, to run repeatedly:
}

void SerialDebugWithSemaphore(const char *pszText){
  if(xSemaphoreTake(xSerialSemaphore,(TickType_t)5)==pdTRUE){
    Serial.print(pszText);
    xSemaphoreGive(xSerialSemaphore);
  }
}

void TaskDigitalRead(void *pvParameters __attribute__((unused))){
  uint8_t pushButton = 2;
  pinMode(pushButton, INPUT);
  for(;;){
    int buttonState = digitalRead(pushButton);
    if(xSemaphoreTake(xSerialSemaphore,(TickType_t)5)==pdTRUE){
      Serial.print(«digital input: «);
      Serial.println(buttonState);
      xSemaphoreGive(xSerialSemaphore);
    }
  vTaskDelay(1);
  }
}

void TaskAnalogReadParam(void *pvParameters){
  AnalogReadParam_t *pxParams = (AnalogReadParam_t *) pvParameters;
  for(;;){
    int sensorValue = analogRead(pxParams->SensorID);
    if(xSemaphoreTake(xSerialSemaphore,(TickType_t)5)==pdTRUE){
      Serial.print(pxParams->pcText);
      Serial.print(«: «);
      Serial.println(sensorValue);
      xSemaphoreGive(xSerialSemaphore);
    }
    vTaskDelay(pxParams->DelayTicks);
  }
}