#include <Arduino_FreeRTOS.h>
//---------------structure ----------------------------------------
//--------- Flag structure --------------------------------------
typedef struct _vFlag
{
uint8_t LEDFlag=1;
uint8_t BTFlag = 0;
uint8_t ServoFlag = 0;
} vFlag;
vFlag *flag_Ptr;
vFlag flag;
//----------uart--------------
#define LINE_BUFFER_LENGTH 64
//--------- uart structure --------------------------------------
typedef struct _vUart
{
char c;
int lineIndex = 0;
int line1Index = 0;
int BTlineIndex = 0;
bool lineIsComment;
bool lineSemiColon;
char line[128];
char BTline[20];
String inputString;
String BTinputString;
String S1inputString;
int V[16];
char ctemp[30];
char I2C_Data[80];
int DC_Spped = 50;
float Voltage[16];
int Buffer[128];
int StartCnt = 0;
int ReadCnt = 0;
int sensorValue = 0;
} vUart;
vUart *Uart_Ptr;
vUart Uart;
//------------------------------------------------
const uint8_t LED_PIN = 13;
//----relay--------
uint8_t DIO_1 = 22;
uint8_t DIO_2 = 24;
uint8_t DIO_3 = 26;
uint8_t DIO_4 = 28;
uint8_t DIO_5 = 30;
uint8_t DIO_6 = 32;
uint8_t DIO_7 = 34;
uint8_t DIO_8 = 36;
//-------------------------------------------
char ctemp[20];
//------------------------------
TaskHandle_t hled;
TaskHandle_t huart0;
//------------------------------------------------------------------------------
void initial()
{
Serial.println(F("Create Task"));
//----------------------------------------------------------------------
// create UART task
xTaskCreate(vUARTTask, "UART Task", configMINIMAL_STACK_SIZE, NULL, 1, &huart0);
// Check the results
// create blink task
xTaskCreate(vLEDFlashTask, "LED Task", configMINIMAL_STACK_SIZE, NULL, 2, &hled);
//-------------------------------------------------------------------
}
void setup()
{
Uart.inputString.reserve(60);
initial();
Serial.begin(9600);
Serial.setTimeout(2000);
Serial.println(F("init"));
//-------------------------------------
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW); // Turn LED off.
//---------------IO setting-----------------
pinMode(DIO_1, INPUT);
pinMode(DIO_2, INPUT);
pinMode(DIO_3, INPUT);
pinMode(DIO_4, INPUT);
pinMode(DIO_5, INPUT);
pinMode(DIO_6, INPUT);
pinMode(DIO_7, INPUT);
pinMode(DIO_8, INPUT);
// start FreeRTOS
Serial.println("Systom On!");
vTaskStartScheduler();
//if the scheduler start the code don't came here
Serial.println(F("Die"));
while (1)
;
}
//------------------------------------------------------------------------------
void loop()
{
}
//------------------------------------------------------------------------------
// high priority for blinking LED
void vLEDFlashTask(void *pvParameters)
{
(void)pvParameters;
pinMode(LED_PIN, OUTPUT);
for (;;)
{
digitalWrite(LED_PIN, HIGH); // Turn LED on.
vTaskDelay((150L * configTICK_RATE_HZ) / 1000L); // Sleep for 50 milliseconds.
digitalWrite(LED_PIN, LOW); // Turn LED off.
vTaskDelay((150L * configTICK_RATE_HZ) / 1000L); // Sleep for 150 milliseconds.
}
}
//------------------------------------------------------------------------------
void vUARTTask(void *pvParameters)
{
Uart.lineIsComment = false;
Uart.lineSemiColon = false;
while(1)
{
while (Serial.available() > 0)
{
Uart.c = Serial.read();
if ((Uart.c == '\n') || (Uart.c == '\r'))
{ // End of line reached
if (Uart.lineIndex > 0)
{ // Line is complete. Then execute!
Uart.line[Uart.lineIndex] = '\0'; // Terminate string
//Serial.println( F("Debug") );
//Serial.println( Uart.inputString );
processCommand(Uart.line); // do something with the command
//傳輸給藍芽
Uart.lineIndex = 0;
Uart.inputString = "";
}
else
{
// Empty or comment line. Skip block.
}
Uart.lineIsComment = false;
Uart.lineSemiColon = false;
Serial.println(F("ok>"));
}
else
{
//Serial.println( c );
if ((Uart.lineIsComment) || (Uart.lineSemiColon))
{
if (Uart.c == ')')
Uart.lineIsComment = false; // End of comment. Resume line.
}
else
{
if (Uart.c == '/')
{ // Block delete not supported. Ignore character.
}
else if (Uart.c == '~')
{ // Enable comments flag and ignore all characters until ')' or EOL.
Uart.lineIsComment = true;
}
else if (Uart.c == ';')
{
Uart.lineSemiColon = true;
}
else if (Uart.lineIndex >= LINE_BUFFER_LENGTH - 1)
{
Serial.println("ERROR - lineBuffer overflow");
Uart.lineIsComment = false;
Uart.lineSemiColon = false;
}
else if (Uart.c >= 'a' && Uart.c <= 'z')
{ // Upcase lowercase
Uart.line[Uart.lineIndex] = Uart.c - 'a' + 'A';
Uart.lineIndex = Uart.lineIndex + 1;
Uart.inputString += (char)(Uart.c - 'a' + 'A');
}
else
{
Uart.line[Uart.lineIndex] = Uart.c;
Uart.lineIndex = Uart.lineIndex + 1;
Uart.inputString += Uart.c;
}
}
}
} //while (Serial.available() > 0)
}
}
//------------------------------------------------------------------------------
//----reset-----------
void (*resetFunc)(void) = 0;
//---------------------------------------------------------
void processCommand(char *data)
{
int len, xlen, ylen, zlen, alen;
int tempDIO;
String stemp;
unsigned int i, j, Comma;
int val, maxv, minv;
unsigned long duration;
float Vpp;
len = Uart.inputString.length();
//-------------RESET---------------
if (strstr(data, "VER") != NULL)
{
//Serial.println(F("W_ATE_Board_20201021"));
Serial.println(F("Mega_SERIAL_20230723"));
}
if (strstr(data, "RESET") != NULL)
{
Serial.println(F("Reset"));
resetFunc();
}
//===-----------------DIO port 1----------------
if (strstr(data, "DIO1") != NULL)
{
//-DIO11_LOW
if (data[3] == '1')
{
for (int i = 0; i < len; i++)
{
if (data[i] == '_')
{
//Serial.println("test");
//Serial.println(i);
xlen = i;
}
//ctemp[i-4]=data[i];
}
for (int i = 4; i < xlen; i++)
{
ctemp[i - 4] = data[i];
}
ctemp[xlen - 4] = '\0';
tempDIO = atoi(ctemp);
//Serial.println(tempDIO);
for (int i = (xlen + 1); i < len; i++)
{
ctemp[i - (xlen + 1)] = data[i];
}
ctemp[len - (xlen + 1)] = '\0';
tempDIO = tempDIO * 2 + 20;
pinMode(tempDIO, OUTPUT);
//if(strstr(ctemp, "ON") != NULL)
//if(strcmp(ctemp, "ON")==0)
//if (strcmp(Uart.ctemp, "LOW") == 0)
if (strstr(ctemp, "LOW") != NULL)
{
digitalWrite(tempDIO, LOW);
}
else if (strstr(ctemp, "ON") != NULL)
{
digitalWrite(tempDIO, LOW);
}
else if (strstr(ctemp, "HIGH") != NULL)
{
digitalWrite(tempDIO, HIGH);
}
else if (strstr(ctemp, "OFF") != NULL)
{
digitalWrite(tempDIO, HIGH);
}
}
}
}
沒有留言:
張貼留言