0.参考
OLED 驱动器 SSD1309 十六、OLED实验 STM32第四课:OLED屏幕控制
0.96oled表情动画显示Demo oled表情 DIY OLED表情 OLED机器人表情
以ESP-IDF v5.5.0 Examples中的I2C OLED example为工程为基础。手搓Cozmo表情
1.显示表情位图
改动1:删除使用lvgl相关的代码,清理成使用esp_lcd_panel的方式。
改动2:使用esp_lcd_panel_draw_bitmap向屏幕输出。
改动3:画正常表情位图、画愤怒表情位图、画恶魔眼表情位图、
static uint8_t expressin_devileye_0[EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES / 8] =
{}
static uint8_t expressin_anger_0[EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES / 8] =
{};
static uint8_t expressin_normal_0[EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES / 8] =
{};
改动4:主程序中循环显示三种表情
while(1) {
do_expression_normal(panel_handle);
vTaskDelay(2000 / portTICK_PERIOD_MS);
do_expression_anger(panel_handle);
vTaskDelay(2000 / portTICK_PERIOD_MS);
do_expression_devileye(panel_handle);
vTaskDelay(2000 / portTICK_PERIOD_MS);
}
OLED显示



2.显示表情动图
改动5:正常的Cozmo表情
static void do_expression_normal(esp_lcd_panel_handle_t panel_handle)
{
uint8_t buffer[EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES / 8];
memcpy(buffer, expressin_cozmo_0, sizeof(expressin_cozmo_0));
esp_lcd_panel_draw_bitmap(panel_handle, 0, 0, EXAMPLE_LCD_H_RES, EXAMPLE_LCD_V_RES, buffer);
vTaskDelay(3000 / portTICK_PERIOD_MS);
////Draw Blink...
esp_lcd_panel_draw_bitmap(panel_handle, 0, 0, EXAMPLE_LCD_H_RES, EXAMPLE_LCD_V_RES, buffer);
vTaskDelay(200 / portTICK_PERIOD_MS);
memcpy(buffer, expressin_cozmo_0, sizeof(expressin_cozmo_0));
esp_lcd_panel_draw_bitmap(panel_handle, 0, 0, EXAMPLE_LCD_H_RES, EXAMPLE_LCD_V_RES, buffer);
}
改动6:类Cozmo表情左看
static void do_expression_lookleft(esp_lcd_panel_handle_t panel_handle)
{
uint8_t buffer[EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES / 8];
memcpy(buffer, expressin_cozmo_0, sizeof(expressin_cozmo_0));
esp_lcd_panel_draw_bitmap(panel_handle, 0, 0, EXAMPLE_LCD_H_RES, EXAMPLE_LCD_V_RES, buffer);
vTaskDelay(1000 / portTICK_PERIOD_MS);
////Draw Last Frame...
esp_lcd_panel_draw_bitmap(panel_handle, 0, 0, EXAMPLE_LCD_H_RES, EXAMPLE_LCD_V_RES, buffer);
}
改动7:类Cozmo表情右看
static void do_expression_lookright(esp_lcd_panel_handle_t panel_handle)
{
uint8_t buffer[EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES / 8];
memcpy(buffer, expressin_cozmo_0, sizeof(expressin_cozmo_0));
esp_lcd_panel_draw_bitmap(panel_handle, 0, 0, EXAMPLE_LCD_H_RES, EXAMPLE_LCD_V_RES, buffer);
vTaskDelay(1000 / portTICK_PERIOD_MS);
////Draw Last Frame...
esp_lcd_panel_draw_bitmap(panel_handle, 0, 0, EXAMPLE_LCD_H_RES, EXAMPLE_LCD_V_RES, buffer);
}
改动8:主程序中循环显示三种表情
while(1) {
do_expression_normal(panel_handle);
vTaskDelay(2000 / portTICK_PERIOD_MS);
do_expression_lookleft(panel_handle);
vTaskDelay(2000 / portTICK_PERIOD_MS);
do_expression_lookright(panel_handle);
vTaskDelay(2000 / portTICK_PERIOD_MS);
}
OLED显示,通过增加表情帧率实现流畅效果。



2681

被折叠的 条评论
为什么被折叠?



