Files
TTGO_TWatch_Library/examples/BasicUnit/TouchMultitask/TouchMultitask.ino
2020-10-13 09:34:54 +08:00

74 lines
1.9 KiB
C++

/*
* The example shows that calling TTGOClass objects in multitasking must
* implement a mutex lock,otherwise it will cause panic
* Copyright 2020 Lewis he
*/
#include "config.h"
TTGOClass *ttgo = nullptr;
char buf[128];
int16_t x, y;
static SemaphoreHandle_t xSemaphores = NULL;
void touch_task(void *args)
{
for (;;) {
if ( xSemaphoreTake( xSemaphores, ( TickType_t ) 10 ) == pdTRUE ) {
if (ttgo->getTouch(x, y)) {
sprintf(buf, "[task] x:%03d y:%03d", x, y);
ttgo->tft->drawString(buf, 60, 40);
Serial.println(buf);
}
xSemaphoreGive( xSemaphores );
}
delay(20);
}
}
void touch_task1(void *args)
{
for (;;) {
if ( xSemaphoreTake( xSemaphores, ( TickType_t ) 10 ) == pdTRUE ) {
if (ttgo->getTouch(x, y)) {
sprintf(buf, "[task1] x:%03d y:%03d", x, y);
ttgo->tft->drawString(buf, 60, 60);
Serial.println(buf);
}
xSemaphoreGive( xSemaphores );
}
delay(20);
}
}
void setup()
{
Serial.begin(115200);
ttgo = TTGOClass::getWatch();
ttgo->begin();
ttgo->openBL();
ttgo->tft->fillScreen(TFT_BLACK);
ttgo->tft->setTextFont(2);
ttgo->tft->setTextColor(TFT_WHITE, TFT_BLACK);
ttgo->tft->drawString("Touch task test", 62, 20);
xSemaphores = xSemaphoreCreateMutex();
xTaskCreate(touch_task, "touch", 2048, NULL, 5, NULL);
xTaskCreate(touch_task1, "touch1", 2048, NULL, 5, NULL);
}
void loop()
{
if ( xSemaphoreTake( xSemaphores, ( TickType_t ) 10 ) == pdTRUE ) {
if (ttgo->getTouch(x, y)) {
sprintf(buf, "[loop] x:%03d y:%03d", x, y);
ttgo->tft->drawString(buf, 60, 80);
Serial.println(buf);
}
xSemaphoreGive( xSemaphores );
}
delay(20);
}