#define ADDTOCAR (1 << 0)
#define PURCHASE (1 << 1)
#define PAYMENT (1 << 2)
#define BUTTONPIN 23
EventGroupHandle_t xCreatedEventGroup;
const TickType_t timeout = 1000 / portTICK_PERIOD_MS;
void AddTOCAR(void *pvParams){
pinMode(BUTTONPIN, INPUT);
EventBits_t uxbit;
while(1){
if(digitalRead(BUTTONPIN) == LOW){
Serial.println("加入購物車!");
uxbit = xEventGroupSetBits(xCreatedEventGroup,ADDTOCAR);
Serial.print("event group value");
Serial.println(uxbit,BIN);
vTaskDelay(150);
xTaskCreate(PurchaseTask,"PurchaseTask",10240,NULL,1,NULL);
vTaskDelay(150);
}
}
}
void PurchaseTask(void *pvParams){
EventBits_t uxbit;
while(1){
uxbit = xEventGroupWaitBits(xCreatedEventGroup,
ADDTOCAR,
pdFALSE,
pdFALSE,
timeout);
if(uxbit & ADDTOCAR){
Serial.println("確認購買清單,準備付款!");
uxbit = xEventGroupSetBits(xCreatedEventGroup,PURCHASE);
Serial.print("event group value");
Serial.println(uxbit,BIN);
vTaskDelay(150);
vTaskDelete(NULL);
}
}
}
void PaymentTask(void *pvParams){
EventBits_t uxbit;
while(1){
uxbit = xEventGroupWaitBits(xCreatedEventGroup,
PURCHASE,
pdFALSE,
pdFALSE,
timeout);
if(uxbit & PURCHASE){
Serial.println("已付款,準備寄送"));
uxbit = xEventGroupSetBits(xCreatedEventGroup,PAYMENT);
Serial.print("event group value");
Serial.println(uxbit,BIN);
vTaskDelay(150);
vTaskDelete(NULL);
}
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
xCreatedEventGroup = xEventGroupCreate();
if(xCreatedEventGroup == NULL){
Serial.println("there was insufficient FreeRTOS heap available.");
}
else{
Serial.println("Successed created event group");
}
xTaskCreate(AddTOCAR,"ADDTOCAR",10240,NULL,1,NULL);
}
void loop() {
// put your main code here, to run repeatedly:
}