/******************Private includes**********************/
/**************************end***************************/
/********************Private define**********************/
/**************************end***************************/
/*******************Private variables********************/
SemaphoreHandle_t xHandleSemaphoreMutex = NULL;
/**************************end***************************/
/********************Static variables********************/
/**************************end***************************/
/**********************static function*******************/
static void OLED_Task1(void *parameter);
static void OLED_Task2(void *parameter);
/**************************end***************************/
/*********************extern variables*******************/
/**************************end***************************/
#include <U8g2lib.h>
#include <Wire.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
void setup() {
BaseType_t xReturn = pdPASS;
Serial.begin(115200);
u8g2.begin();
xHandleSemaphoreMutex = xSemaphoreCreateMutex();
if (xHandleSemaphoreMutex == NULL)
{
Serial.print("Semaphore Mutex Create Error");
}
xReturn = xSemaphoreGive(xHandleSemaphoreMutex);
if (xTaskCreatePinnedToCore((TaskFunction_t)OLED_Task1,
(const char *)"OLED_Task1",
(uint32_t)2048,
(void *)NULL,
(UBaseType_t)1,
NULL,
(UBaseType_t)1) == pdPASS)
{
Serial.print( "OLED1 Task Create Sucessed\n" );
}
if (xTaskCreatePinnedToCore((TaskFunction_t)OLED_Task2,
(const char *)"OLED_Task2",
(uint32_t)2048,
(void *)NULL,
(UBaseType_t)2,
NULL,
(UBaseType_t)0) == pdPASS)
{
Serial.print( "OLED2 Task Create Sucessed\n" );
}
}
void loop() {
}
static void OLED_Task1(void *parameter)
{
BaseType_t xReturn;
uint8_t i;
while(1)
{
Serial.print("OLED1_Task 获取OLED使用权限互斥量\n");
xReturn = xSemaphoreTake(xHandleSemaphoreMutex,portMAX_DELAY);
if (xReturn == pdTRUE)
{
u8g2.clearBuffer(); // clear the internal memory
//u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font
// u8g2.drawStr(15, 10, "OLED_Task1"); // write something to the internal memory
// u8g2.setFont(u8g2_font_unifont_t_symbols);
// u8g2.drawGlyph(5, 20, 0x2603); /* dec 9731/hex 2603 Snowman */
for(i=0;i<32;i++)
{
u8g2.drawCircle(64, 32, 10+i*2, U8G2_DRAW_ALL);
u8g2.sendBuffer(); // transfer internal memory to the display
Serial.print("OLED1_Task Runing");
}
}
Serial.print("OLED1_Task 释放OLED使用权限互斥量\n");
xReturn = xSemaphoreGive(xHandleSemaphoreMutex);
vTaskDelay(500);
}
}
static void OLED_Task2(void *parameter)
{
BaseType_t xReturn;
while(1)
{
Serial.print("OLED2_Task 获取OLED使用权限互斥量\n");
xReturn = xSemaphoreTake(xHandleSemaphoreMutex,portMAX_DELAY);
if (xReturn == pdTRUE)
{
u8g2.clearBuffer(); // clear the internal memory
u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font
u8g2.drawStr(15, 10, "OLED_Task2"); // write something to the internal memory
u8g2.sendBuffer(); // transfer internal memory to the display
Serial.print("OLED2_Task Runing");
}
Serial.print("OLED2_Task 释放OLED使用权限互斥量\n");
xReturn = xSemaphoreGive(xHandleSemaphoreMutex);
vTaskDelay(500);
}
}Loading
ssd1306
ssd1306