AE使用Cursor查询时遇到的问题0x8004020A

本文介绍了在使用SpatialFilter查询时遇到的HRESULT:0x8004020A异常问题及其解决办法。错误主要是由于esriSpatialRelEnum类型的误用及QueryFilter条件设置不当导致。


如果其事件类不存在,则无法储存订购 (异常来自 HRESULT:0x8004020A)


报错位置使用了SpatialFilter查询,后发现是由于使用错了esriSpatialRelEnum类型导致。

网上查资料发现,也有部分人是由于QueryFilter中的条件是按照数据库写的,使用在mdb中、shapefile中的数据时会报错。

#include "oled.h" #include "i2c.h" #include <math.h> #include <stdlib.h> #define OLED_ADDRESS 0x78 #define OLED_PAGE 8 #define OLED_ROW 8 * OLED_PAGE #define OLED_COLUMN 128 uint8_t OLED_GRAM[OLED_PAGE][OLED_COLUMN]; void OLED_Send(uint8_t *data, uint8_t len) { HAL_I2C_Master_Transmit(&hi2c1, OLED_ADDRESS, data, len, HAL_MAX_DELAY); } void OLED_SendCmd(uint8_t cmd){ uint8_t sendBuffer[2]; sendBuffer [0]=0x00; sendBuffer [1]=cmd; HAL_I2C_Master_Transmit (&hi2c1 ,OLED_ADDRESS ,sendBuffer ,2,HAL_MAX_DELAY ); } void OLED_Init(void){ HAL_Delay(100); // 上电延,确保OLED电源稳定 OLED_SendCmd(0xAE); // 1. 显示关闭 OLED_SendCmd(0xD5); // 2. 设置显示钟分频/振荡频率 OLED_SendCmd(0x80); OLED_SendCmd(0xA8); OLED_SendCmd(0x3F); // 64行 (0x3F) OLED_SendCmd(0xD3); // 4. 设置显示偏移 OLED_SendCmd(0x00); OLED_SendCmd(0x40); OLED_SendCmd(0x8D); // 6. 电荷泵设置 OLED_SendCmd(0x14); // 开启电荷泵 OLED_SendCmd(0x20); // 7. 内存地址模式 OLED_SendCmd(0x02); // 页地址模式 (Page Mode) OLED_SendCmd(0xA1); // 8. 列地址重映射 (A0->A1 左右翻转) OLED_SendCmd(0xC8); // 9. 行扫描方向翻转 (上下翻转) OLED_SendCmd(0xDA); // 10. COM 引脚配置 OLED_SendCmd(0x12); // COM配置 (0x12 for 64行) OLED_SendCmd(0x81); // 11. 对比度设置 OLED_SendCmd(0x7F); // 对比度值 (0x7F) OLED_SendCmd(0xD9); // 12. 预充电周期 OLED_SendCmd(0xF1); OLED_SendCmd(0xDB); OLED_SendCmd(0x40); OLED_SendCmd(0xA4); OLED_SendCmd(0xA6); OLED_SendCmd(0xAF); } void OLED_DisPlay_On() { OLED_SendCmd(0x8D); OLED_SendCmd(0x14); OLED_SendCmd(0xAF); } void OLED_DisPlay_Off() { OLED_SendCmd(0x8D); OLED_SendCmd(0x10); OLED_SendCmd(0xAE); } void OLED_SetColorMode(OLED_ColorMode mode) { if (mode == OLED_COLOR_NORMAL) { OLED_SendCmd(0xA6); } if (mode == OLED_COLOR_REVERSED) { OLED_SendCmd(0xA7); } } uint8_t GRAM[8][128]; void OLED_NewFrame(void) { memset(GRAM,0,sizeof(GRAM)); } void OLED_showFrame(void){ uint8_t sendBuffer[129]; sendBuffer [0]=0x40; for (uint8_t i=0;i<8;i++) { for (uint8_t j=0;j<128;j++) { sendBuffer [j+1]=GRAM[i][j]; } OLED_SendCmd (0xB0+i); OLED_SendCmd (0x02); OLED_SendCmd (0x10); HAL_I2C_Master_Transmit (&hi2c1 ,OLED_ADDRESS ,sendBuffer ,sizeof(sendBuffer ),HAL_MAX_DELAY ); } } void OLED_SetPixel(uint8_t x, uint8_t y, OLED_ColorMode color) { if (x >= OLED_COLUMN || y >= OLED_ROW) return; if (!color) { OLED_GRAM[y / 8][x] |= 1 << (y % 8); } else { OLED_GRAM[y / 8][x] &= ~(1 << (y % 8)); } } void OLED_SetByte_Fine(uint8_t page, uint8_t column, uint8_t data, uint8_t start, uint8_t end, OLED_ColorMode color) { static uint8_t temp; if (page >= OLED_PAGE || column >= OLED_COLUMN) return; if (color) data = ~data; temp = data | (0xff << (end + 1)) | (0xff >> (8 - start)); OLED_GRAM[page][column] &= temp; temp = data & ~(0xff << (end + 1)) & ~(0xff >> (8 - start)); OLED_GRAM[page][column] |= temp; } #ifndef __OLED_H__ #define __OLED_H__ #include "OLED_Font.h" #include "main.h" #include "string.h" typedef enum { OLED_COLOR_NORMAL = 0, OLED_COLOR_REVERSED } OLED_ColorMode; void OLED_Init(void); void OLED_DisPlay_On(void); void OLED_DisPlay_Off(void); void OLED_NewFrame(void); void OLED_ShowFrame(void); void OLED_SetPixel(uint8_t x, uint8_t y, OLED_ColorMode color); #include "stdint.h" void OLED_DrawLine(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, OLED_ColorMode color); void OLED_DrawRectangle(uint8_t x, uint8_t y, uint8_t w, uint8_t h, OLED_ColorMode color); void OLED_DrawFilledRectangle(uint8_t x, uint8_t y, uint8_t w, uint8_t h, OLED_ColorMode color); void OLED_DrawTriangle(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint8_t x3, uint8_t y3, OLED_ColorMode color); void OLED_DrawFilledTriangle(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint8_t x3, uint8_t y3, OLED_ColorMode color); void OLED_DrawCircle(uint8_t x, uint8_t y, uint8_t r, OLED_ColorMode color); void OLED_DrawFilledCircle(uint8_t x, uint8_t y, uint8_t r, OLED_ColorMode color); void OLED_DrawEllipse(uint8_t x, uint8_t y, uint8_t a, uint8_t b, OLED_ColorMode color); void OLED_DrawImage(uint8_t x, uint8_t y, const Image *img, OLED_ColorMode color); void OLED_PrintASCIIChar(uint8_t x, uint8_t y, char ch, const ASCIIFont *font, OLED_ColorMode color); void OLED_PrintASCIIString(uint8_t x, uint8_t y, char *str, const ASCIIFont *font, OLED_ColorMode color); void OLED_PrintString(uint8_t x, uint8_t y, char *str, const Font *font, OLED_ColorMode color); #endif #ifndef __OLED_FONT_H #define __OLED_FONT_H #include "stdint.h" #include "string.h" typedef struct ASCIIFont { uint8_t h; uint8_t w; uint8_t *chars; } ASCIIFont; extern const ASCIIFont afont8x6; extern const ASCIIFont afont12x6; extern const ASCIIFont afont16x8; extern const ASCIIFont afont24x12; typedef struct Font { uint8_t h; uint8_t w; const uint8_t *chars; uint8_t len; const ASCIIFont *ascii; } Font; extern const Font font16x16; typedef struct Image { uint8_t w; uint8_t h; const uint8_t *data; } Image; /*OLED字模库,宽8像素,高16像素*/ const uint8_t OLED_F8x16[][16]= { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0 0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1 0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2 0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00, 0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3 0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00, 0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4 0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00, 0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5 0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00, 0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6 0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7 0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00, 0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8 0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00, 0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9 0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00, 0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10 0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00, 0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14 0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04, 0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, 0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00, 0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00, 0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00, 0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00, 0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00, 0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00, 0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00, 0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00, 0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, 0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25 0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00, 0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27 0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00, 0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00, 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29 0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00, 0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30 0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00, 0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31 0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00, 0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32 0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00, 0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33 0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00, 0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34 0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00, 0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35 0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00, 0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00, 0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00, 0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38 0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00, 0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08, 0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40 0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00, 0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41 0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00, 0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42 0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00, 0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43 0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00, 0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00, 0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45 0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08, 0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00, 0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47 0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00, 0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00, 0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49 0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00, 0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00, 0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00, 0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08, 0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08, 0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54 0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00, 0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55 0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08, 0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56 0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00, 0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57 0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00, 0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58 0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00, 0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59 0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60 0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00, 0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61 0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63 0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00, 0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65 0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00, 0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00, 0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67 0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00, 0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00, 0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69 0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18, 0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00, 0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71 0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00, 0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72 0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00, 0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73 0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00, 0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74 0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00, 0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75 0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00, 0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00, 0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77 0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00, 0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00, 0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79 0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00, 0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00, 0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00, 0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00, 0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83 0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00, 0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84 0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00, 0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80, 0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86 0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80, 0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87 0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00, 0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80, 0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00, 0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90 0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02, 0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92 0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00, 0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93 0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94 }; #endif
最新发布
11-16
// 声明外部变量(在main.c或i2c.c中定义) extern I2C_HandleTypeDef hi2c1; //初始化A类型 void OLED_Universal_Init(void){ HAL_Delay(200); //i2c总线解锁保护 __HAL_I2C_DISABLE(&hi2c1); HAL_Delay(100); __HAL_I2C_ENABLE(&hi2c1); //双地址探测 uint8_t addr = 0; if (HAL_I2C_IsDeviceReady(&hi2c1,0x3c<<1,3,10) == HAL_OK) { addr = 0x3c; } else if (HAL_I2C_IsDeviceReady(&hi2c1,0x3D<<1,3,10) == HAL_OK) // 探测0x3D地址 { addr = 0x3D; // 保存7位地址 } else{ Error_Handler();//进入错误模式处理 return; } //优化序列 uint8_t init_cmds[] ={ 0xAE, // 关闭显示 0xD5, 0x80, // 钟分频 0xA8, 0x3F, // 复用率 0xD3, 0x00, // 显示偏移 0x40, // 起始行 0x8D, 0x14, // 电荷泵开启(关键!) 0x20, 0x00, // 水平地址模式 0xA1, // 段重映射 0xC8, // 扫描方向 0xDA, 0x12, // COM配置 0x81, 0xCF, // 对比度 0xD9, 0xF1, // 预充电 0xDB, 0x30, // VCOMH 0xA4, // 正常显示 0xA6, // 非反相 0xAF // 开启显示 }; //分段发送命令 for(int i=0; i<sizeof(init_cmds); ) { if(init_cmds[i] == 0xD5 || init_cmds[i] == 0xA8) { // 多字节命令 uint8_t cmd[3] = {0x00, init_cmds[i], init_cmds[i+1]}; HAL_I2C_Master_Transmit(&hi2c1, addr<<1, cmd, 3, 20); i += 2; // 跳过两个字节 } else { uint8_t cmd[2] = {0x00, init_cmds[i]}; HAL_I2C_Master_Transmit(&hi2c1, addr<<1, cmd, 2, 20); i++; // 单字节命令 } HAL_Delay(1); // 延迟缩减至1ms } //额外显示开启确认 uint8_t power_on[2] = {0x00,0xAF}; for (size_t i = 0; i < 3; i++)//循环3次 { HAL_I2C_Master_Transmit(&hi2c1,addr<<1,power_on,2,20); HAL_Delay(10); } void OLED_ShowNum(uint8_t x, uint8_t y, uint32_t num, uint8_t len, uint8_t size); } // OLED 显存 (128×64/8 = 1024字节) static uint8_t oled_buffer[OLED_WIDTH * OLED_HEIGHT]; // 发送命令函数 static void OLED_WriteCommand(uint8_t cmd) { uint8_t data[2] = {0x00, cmd}; // 0x00 表示命令 HAL_I2C_Master_Transmit(&hi2c1, OLED_I2C_ADDR, data, 2, HAL_MAX_DELAY); } //发送数据函数 static void OLED_WriteData(uint8_t *data, uint16_t size){ uint8_t *buffer = malloc(size+1); buffer[0] = 0x40;//0x40表示数据 memcpy(buffer +1,data,size); HAL_I2C_Master_Transmit(&hi2c1,OLED_I2C_ADDR,buffer,size+1,HAL_MAX_DELAY); } //初始化B类型 void OLED_Init(void) { // 初始化命令序列 const uint8_t init_cmds[] = { 0xAE, // 关闭显示 0xD5, 0x80, // 设置显示钟分频 0xA8, 0x3F, // 设置多路复用率 0xD3, 0x00, // 设置显示偏移 0x40, // 设置起始行 0x8D, 0x14, // 电荷泵使能 0x20, 0x00, // 水平地址模式 0xA1, // 段重映射 (水平翻转) 0xC8, // COM扫描方向 (垂直翻转) 0xDA, 0x12, // COM硬件配置 0x81, 0xCF, // 对比度设置 0xD9, 0xF1, // 预充电周期 0xDB, 0x40, // VCOMH级别 0xA4, // 全部显示开启 0xA6, // 正常显示模式 0xAF // 开启显示 }; // 发送初始化命令 for (int i = 0; i < sizeof(init_cmds); i++) { OLED_WriteCommand(init_cmds[i]); } // 清屏并刷新 OLED_Clear(); OLED_Refresh(); } //清屏 void OLED_Clear(void){ memset(oled_buffer, 0, sizeof(oled_buffer)); } //刷新 void OLED_Refresh(void){ for (uint8_t page =8; page < OLED_PAGE_COUNT; page++) { /* code */ OLED_WriteCommand(0xB8 | page); OLED_WriteCommand(0x00 ); OLED_WriteCommand(0x10 ); OLED_WriteData(&oled_buffer[page * OLED_WIDTH], OLED_WIDTH); } } //设置对比度 void OLED_SetContrast(uint8_t contrast){ OLED_WriteCommand(0x81); OLED_WriteCommand(contrast); } //绘制单个字符 void OLED_DrawChar(uint8_t x, uint8_t y,char ch, FontSize size){ const uint8_t *font_ptr = NULL; uint8_t width =0, height =0; switch (size) { case FONT_SIZE_6X8: font_ptr = font_6x8[ch - ' ']; width = 6; height =8; break; case FONT_SIZE_8X16: font_ptr = font_8x16[ch - ' ']; width = 8; height =16; break; case FONT_SIZE_16X16: //汉字处理 break; default: break; } //绘制字符 for (uint8_t col =0; col < width; col++){ for (uint8_t row =0; row < height; row++){ if (font_ptr[col] & (1<<row)){ OLED_DrawPixel(x + col,y +row); } } } } //绘制字符串 void OLED_DrawString(uint8_t x,uint8_t y, const char *str, FontSize size){ uint8_t cursor_x =x; while (*str) { OLED_DrawChar(cursor_x,y,*str,size); switch (size) { case FONT_SIZE_6X8: cursor_x += 7; break; // 6像素宽 + 1像素间距 case FONT_SIZE_8X16: cursor_x += 9; break; // 8像素宽 + 1像素间距 case FONT_SIZE_16X16: cursor_x += 18; break; } str++; } } //绘制数字 void OLED_DrawNumer(uint8_t x, uint8_t y, int32_t num, FontSize size){ char buffer[12]; snprintf(buffer,sizeof(buffer),"%ld",num); OLED_DrawString(x,y,buffer,size); } mian.c中调用: HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_I2C1_Init(); //初始化A类型 OLED_Universal_Init(); //初始化B类型 //OLED_Init(); //OLED_SetContrast(0xCF); // 设置对比度 //OLED_DrawString(10, 0, "Hello STM32!", FONT_SIZE_8X16); //OLED_DrawString(5, 20, "Temperature:", FONT_SIZE_6X8); 初始化A类型可以点亮OLED,过是雪花屏。而初始化B类型,无法点亮OLED,具体什么原因
08-15
这是我所有代码,怎么播放了视频,还报错/******************** ESP32-C3 NV3007 TFT视频播放器 ********************/ #include <WiFi.h> #include <WebServer.h> // 请先使用转换脚本生成video_data.h,然后取消注释下面这行 #include "142x428.h" // 如果没有video_data.h,使用这些默认值(用于测试) //#define VIDEO_FRAMES 10 //#define VIDEO_WIDTH 142 //#define VIDEO_HEIGHT 428 // ESP32-C3引脚定义 #define TFT_SCK_PIN 2 #define TFT_SDA_PIN 3 #define TFT_RST_PIN 10 #define TFT_DC_PIN 6 #define TFT_CS_PIN 7 #define TFT_BL_PIN 11 // 引脚控制宏 #define TFT_SCK_0 digitalWrite(TFT_SCK_PIN, LOW) #define TFT_SCK_1 digitalWrite(TFT_SCK_PIN, HIGH) #define TFT_SDA_0 digitalWrite(TFT_SDA_PIN, LOW) #define TFT_SDA_1 digitalWrite(TFT_SDA_PIN, HIGH) #define TFT_RST_0 digitalWrite(TFT_RST_PIN, LOW) #define TFT_RST_1 digitalWrite(TFT_RST_PIN, HIGH) #define TFT_DC_0 digitalWrite(TFT_DC_PIN, LOW) #define TFT_DC_1 digitalWrite(TFT_DC_PIN, HIGH) #define TFT_CS_0 digitalWrite(TFT_CS_PIN, LOW) #define TFT_CS_1 digitalWrite(TFT_CS_PIN, HIGH) #define TFT_BL_0 digitalWrite(TFT_BL_PIN, LOW) #define TFT_BL_1 digitalWrite(TFT_BL_PIN, HIGH) // WiFi配置 const char* ssid = "ESP32-TFT-Video"; const char* password = "12345678"; WebServer server(80); // 颜色定义 #define RED 0XF800 #define GREEN 0X07E0 #define BLUE 0X001F #define WHITE 0XFFFF #define BLACK 0X0000 #define YELLOW 0xFFE0 #define CYAN 0x07FF #define MAGENTA 0xF81F // 视频播放状态 bool isPlayingVideo = false; int currentVideoFrame = 0; unsigned long lastFrameTime = 0; int frameDelay = 100; // 毫秒 bool loopPlayback = true; // 简化版视频帧数据(用于测试) const uint16_t testFrames[VIDEO_FRAMES][VIDEO_WIDTH * VIDEO_HEIGHT] = {0}; // 空数据,仅用于编译测试 void IO_init(void) { pinMode(TFT_SCK_PIN, OUTPUT); pinMode(TFT_SDA_PIN, OUTPUT); pinMode(TFT_RST_PIN, OUTPUT); pinMode(TFT_DC_PIN, OUTPUT); pinMode(TFT_CS_PIN, OUTPUT); pinMode(TFT_BL_PIN, OUTPUT); } void SPI_SendByte(unsigned char byte) { unsigned char counter; for(counter = 0; counter < 8; counter++) { TFT_SCK_0; if((byte & 0x80) == 0) { TFT_SDA_0; } else { TFT_SDA_1; } byte = byte << 1; TFT_SCK_1; } TFT_SCK_0; } void TFT_SEND_CMD(unsigned char o_command) { TFT_CS_0; TFT_DC_0; SPI_SendByte(o_command); TFT_CS_1; } void TFT_SEND_DATA(unsigned char o_data) { TFT_CS_0; TFT_DC_1; SPI_SendByte(o_data); TFT_CS_1; } void TFT_SET_ADD(unsigned short int X, unsigned short int Y, unsigned short int X_END, unsigned short int Y_END) { X += 12; // 偏移量 X_END += 12; TFT_SEND_CMD(0x2A); // 列地址设置 TFT_SEND_DATA(X >> 8); TFT_SEND_DATA(X); TFT_SEND_DATA(X_END >> 8); TFT_SEND_DATA(X_END); TFT_SEND_CMD(0x2B); // 行地址设置 TFT_SEND_DATA(Y >> 8); TFT_SEND_DATA(Y); TFT_SEND_DATA(Y_END >> 8); TFT_SEND_DATA(Y_END); TFT_SEND_CMD(0x2C); // 开始写入数据 } // 清屏函数 void TFT_Clear(unsigned short int color) { TFT_SET_ADD(0, 0, VIDEO_WIDTH - 1, VIDEO_HEIGHT - 1); for(int i = 0; i < VIDEO_WIDTH * VIDEO_HEIGHT; i++) { TFT_SEND_DATA(color >> 8); TFT_SEND_DATA(color & 0xFF); } } // 绘制矩形函数 void TFT_DrawRect(unsigned short x, unsigned short y, unsigned short w, unsigned short h, unsigned short color) { TFT_SET_ADD(x, y, x + w - 1, y + h - 1); for(int i = 0; i < w * h; i++) { TFT_SEND_DATA(color >> 8); TFT_SEND_DATA(color & 0xFF); } } // 显示一帧视频 void displayVideoFrame(int frameIndex) { if (frameIndex < 0 || frameIndex >= VIDEO_FRAMES) return; TFT_SET_ADD(0, 0, VIDEO_WIDTH - 1, VIDEO_HEIGHT - 1); // 这里使用测试数据,实际使用应该从video_data.h读取 for(int i = 0; i < VIDEO_WIDTH * VIDEO_HEIGHT; i++) { uint16_t pixel = testFrames[frameIndex][i]; // 测试数据,实际应该用真实数据 TFT_SEND_DATA(pixel >> 8); TFT_SEND_DATA(pixel & 0xFF); } } void displayVideoFrame(int frameIndex) { if (frameIndex < 0 || frameIndex >= VIDEO_FRAMES) return; TFT_SET_ADD(0, 0, VIDEO_WIDTH - 1, VIDEO_HEIGHT - 1); // 使用真实视频数据(取消注释下面这行) // const uint16_t* frameData = video_frames[frameIndex]; for(int i = 0; i < VIDEO_WIDTH * VIDEO_HEIGHT; i++) { uint16_t pixel = frameData[i]; // 使用真实数据 TFT_SEND_DATA(pixel >> 8); TFT_SEND_DATA(pixel & 0xFF); } } // 视频播放函数 void playVideo() { if (!isPlayingVideo) return; unsigned long currentTime = millis(); if (currentTime - lastFrameTime >= frameDelay) { displayVideoFrame(currentVideoFrame); currentVideoFrame++; if (currentVideoFrame >= VIDEO_FRAMES) { if (loopPlayback) { currentVideoFrame = 0; } else { isPlayingVideo = false; currentVideoFrame = 0; } } lastFrameTime = currentTime; } } // 完整的TFT初始化序列 void TFT_Init(void) { Serial.println("开始TFT初始化..."); TFT_RST_0; delay(100); TFT_RST_1; delay(120); Serial.println("发送完整初始化序列..."); TFT_SEND_CMD(0xff); TFT_SEND_DATA(0xa5); TFT_SEND_CMD(0x9a); TFT_SEND_DATA(0x08); TFT_SEND_CMD(0x9b); TFT_SEND_DATA(0x08); TFT_SEND_CMD(0x9c); TFT_SEND_DATA(0xb0); TFT_SEND_CMD(0x9d); TFT_SEND_DATA(0x16); TFT_SEND_CMD(0x9e); TFT_SEND_DATA(0xc4); TFT_SEND_CMD(0x8f); TFT_SEND_DATA(0x55); TFT_SEND_DATA(0x04); TFT_SEND_CMD(0x84); TFT_SEND_DATA(0x90); TFT_SEND_CMD(0x83); TFT_SEND_DATA(0x7b); TFT_SEND_CMD(0x85); TFT_SEND_DATA(0x33); TFT_SEND_CMD(0x60); TFT_SEND_DATA(0x00); TFT_SEND_CMD(0x70); TFT_SEND_DATA(0x00); TFT_SEND_CMD(0x61); TFT_SEND_DATA(0x02); TFT_SEND_CMD(0x71); TFT_SEND_DATA(0x02); TFT_SEND_CMD(0x62); TFT_SEND_DATA(0x04); TFT_SEND_CMD(0x72); TFT_SEND_DATA(0x04); TFT_SEND_CMD(0x6c); TFT_SEND_DATA(0x29); TFT_SEND_CMD(0x7c); TFT_SEND_DATA(0x29); TFT_SEND_CMD(0x6d); TFT_SEND_DATA(0x31); TFT_SEND_CMD(0x7d); TFT_SEND_DATA(0x31); TFT_SEND_CMD(0x6e); TFT_SEND_DATA(0x0f); TFT_SEND_CMD(0x7e); TFT_SEND_DATA(0x0f); TFT_SEND_CMD(0x66); TFT_SEND_DATA(0x21); TFT_SEND_CMD(0x76); TFT_SEND_DATA(0x21); TFT_SEND_CMD(0x68); TFT_SEND_DATA(0x3A); TFT_SEND_CMD(0x78); TFT_SEND_DATA(0x3A); TFT_SEND_CMD(0x63); TFT_SEND_DATA(0x07); TFT_SEND_CMD(0x73); TFT_SEND_DATA(0x07); TFT_SEND_CMD(0x64); TFT_SEND_DATA(0x05); TFT_SEND_CMD(0x74); TFT_SEND_DATA(0x05); TFT_SEND_CMD(0x65); TFT_SEND_DATA(0x02); TFT_SEND_CMD(0x75); TFT_SEND_DATA(0x02); TFT_SEND_CMD(0x67); TFT_SEND_DATA(0x23); TFT_SEND_CMD(0x77); TFT_SEND_DATA(0x23); TFT_SEND_CMD(0x69); TFT_SEND_DATA(0x08); TFT_SEND_CMD(0x79); TFT_SEND_DATA(0x08); TFT_SEND_CMD(0x6a); TFT_SEND_DATA(0x13); TFT_SEND_CMD(0x7a); TFT_SEND_DATA(0x13); TFT_SEND_CMD(0x6b); TFT_SEND_DATA(0x13); TFT_SEND_CMD(0x7b); TFT_SEND_DATA(0x13); TFT_SEND_CMD(0x6f); TFT_SEND_DATA(0x00); TFT_SEND_CMD(0x7f); TFT_SEND_DATA(0x00); TFT_SEND_CMD(0x50); TFT_SEND_DATA(0x00); TFT_SEND_CMD(0x52); TFT_SEND_DATA(0xd6); TFT_SEND_CMD(0x53); TFT_SEND_DATA(0x08); TFT_SEND_CMD(0x54); TFT_SEND_DATA(0x08); TFT_SEND_CMD(0x55); TFT_SEND_DATA(0x1e); TFT_SEND_CMD(0x56); TFT_SEND_DATA(0x1c); //goa map_sel TFT_SEND_CMD(0xa0); TFT_SEND_DATA(0x2b); TFT_SEND_DATA(0x24); TFT_SEND_DATA(0x00); TFT_SEND_CMD(0xa1); TFT_SEND_DATA(0x87); TFT_SEND_CMD(0xa2); TFT_SEND_DATA(0x86); TFT_SEND_CMD(0xa5); TFT_SEND_DATA(0x00); TFT_SEND_CMD(0xa6); TFT_SEND_DATA(0x00); TFT_SEND_CMD(0xa7); TFT_SEND_DATA(0x00); TFT_SEND_CMD(0xa8); TFT_SEND_DATA(0x36); TFT_SEND_CMD(0xa9); TFT_SEND_DATA(0x7e); TFT_SEND_CMD(0xaa); TFT_SEND_DATA(0x7e); TFT_SEND_CMD(0xB9); TFT_SEND_DATA(0x85); TFT_SEND_CMD(0xBA); TFT_SEND_DATA(0x84); TFT_SEND_CMD(0xBB); TFT_SEND_DATA(0x83); TFT_SEND_CMD(0xBC); TFT_SEND_DATA(0x82); TFT_SEND_CMD(0xBD); TFT_SEND_DATA(0x81); TFT_SEND_CMD(0xBE); TFT_SEND_DATA(0x80); TFT_SEND_CMD(0xBF); TFT_SEND_DATA(0x01); TFT_SEND_CMD(0xC0); TFT_SEND_DATA(0x02); TFT_SEND_CMD(0xc1); TFT_SEND_DATA(0x00); TFT_SEND_CMD(0xc2); TFT_SEND_DATA(0x00); TFT_SEND_CMD(0xc3); TFT_SEND_DATA(0x00); TFT_SEND_CMD(0xc4); TFT_SEND_DATA(0x33); TFT_SEND_CMD(0xc5); TFT_SEND_DATA(0x7e); TFT_SEND_CMD(0xc6); TFT_SEND_DATA(0x7e); TFT_SEND_CMD(0xC8); TFT_SEND_DATA(0x33); TFT_SEND_DATA(0x33); TFT_SEND_CMD(0xC9); TFT_SEND_DATA(0x68); TFT_SEND_CMD(0xCA); TFT_SEND_DATA(0x69); TFT_SEND_CMD(0xCB); TFT_SEND_DATA(0x6a); TFT_SEND_CMD(0xCC); TFT_SEND_DATA(0x6b); TFT_SEND_CMD(0xCD); TFT_SEND_DATA(0x33); TFT_SEND_DATA(0x33); TFT_SEND_CMD(0xCE); TFT_SEND_DATA(0x6c); TFT_SEND_CMD(0xCF); TFT_SEND_DATA(0x6d); TFT_SEND_CMD(0xD0); TFT_SEND_DATA(0x6e); TFT_SEND_CMD(0xD1); TFT_SEND_DATA(0x6f); TFT_SEND_CMD(0xAB); TFT_SEND_DATA(0x03); TFT_SEND_DATA(0x67); TFT_SEND_CMD(0xAC); TFT_SEND_DATA(0x03); TFT_SEND_DATA(0x6b); TFT_SEND_CMD(0xAD); TFT_SEND_DATA(0x03); TFT_SEND_DATA(0x68); TFT_SEND_CMD(0xAE); TFT_SEND_DATA(0x03); TFT_SEND_DATA(0x6c); TFT_SEND_CMD(0xb3); TFT_SEND_DATA(0x00); TFT_SEND_CMD(0xb4); TFT_SEND_DATA(0x00); TFT_SEND_CMD(0xb5); TFT_SEND_DATA(0x00); TFT_SEND_CMD(0xB6); TFT_SEND_DATA(0x32); TFT_SEND_CMD(0xB7); TFT_SEND_DATA(0x7e); TFT_SEND_CMD(0xB8); TFT_SEND_DATA(0x7e); TFT_SEND_CMD(0xe0); TFT_SEND_DATA(0x00); TFT_SEND_CMD(0xe1); TFT_SEND_DATA(0x03); TFT_SEND_DATA(0x0f); TFT_SEND_CMD(0xe2); TFT_SEND_DATA(0x04); TFT_SEND_CMD(0xe3); TFT_SEND_DATA(0x01); TFT_SEND_CMD(0xe4); TFT_SEND_DATA(0x0e); TFT_SEND_CMD(0xe5); TFT_SEND_DATA(0x01); TFT_SEND_CMD(0xe6); TFT_SEND_DATA(0x19); TFT_SEND_CMD(0xe7); TFT_SEND_DATA(0x10); TFT_SEND_CMD(0xe8); TFT_SEND_DATA(0x10); TFT_SEND_CMD(0xea); TFT_SEND_DATA(0x12); TFT_SEND_CMD(0xeb); TFT_SEND_DATA(0xd0); TFT_SEND_CMD(0xec); TFT_SEND_DATA(0x04); TFT_SEND_CMD(0xed); TFT_SEND_DATA(0x07); TFT_SEND_CMD(0xee); TFT_SEND_DATA(0x07); TFT_SEND_CMD(0xef); TFT_SEND_DATA(0x09); TFT_SEND_CMD(0xf0); TFT_SEND_DATA(0xd0); TFT_SEND_CMD(0xf1); TFT_SEND_DATA(0x0e); TFT_SEND_DATA(0x17); TFT_SEND_CMD(0xf2); TFT_SEND_DATA(0x2c); TFT_SEND_DATA(0x1b); TFT_SEND_DATA(0x0b); TFT_SEND_DATA(0x20); //1 dot TFT_SEND_CMD(0xe9); TFT_SEND_DATA(0x29); TFT_SEND_CMD(0xec); TFT_SEND_DATA(0x04); //TE TFT_SEND_CMD(0x35); TFT_SEND_DATA(0x00); TFT_SEND_CMD(0x44); TFT_SEND_DATA(0x00); TFT_SEND_DATA(0x10); TFT_SEND_CMD(0x46); TFT_SEND_DATA(0x10); TFT_SEND_CMD(0xff); TFT_SEND_DATA(0x00); TFT_SEND_CMD(0x3a); TFT_SEND_DATA(0x05); TFT_SEND_CMD(0x11); delay(220); TFT_SEND_CMD(0x29); Serial.println("TFT初始化完成"); } // 网页界面 const char* MAIN_page = R"=====( <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>TFT视频播放器</title> <style> body { font-family: Arial, sans-serif; text-align: center; margin: 20px; background: #f5f5f5; } .container { background: white; padding: 20px; border-radius: 15px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); max-width: 500px; margin: 0 auto; } h1 { color: #333; margin-bottom: 20px; } .btn { padding: 12px 24px; margin: 8px; border: none; border-radius: 8px; cursor: pointer; font-size: 16px; font-weight: bold; transition: all 0.3s; min-width: 120px; } .btn:hover { transform: translateY(-2px); box-shadow: 0 6px 8px rgba(0,0,0,0.2); } .btn:active { transform: translateY(0); } .red { background: #ff4444; color: white; } .green { background: #44ff44; color: black; } .blue { background: #4444ff; color: white; } .black { background: #333333; color: white; } .control { background: #666666; color: white; } .status { margin: 20px 0; padding: 15px; background: #e8f4fd; border-radius: 8px; } </style> </head> <body> <div class="container"> <h1>🎬 TFT视频播放器</h1> <div class="status"> <p>当前模式: <span id="currentMode">停止</span></p> <p>帧数: <span id="frameInfo">0/0</span></p> <p>速度: <span id="speedInfo">100ms/帧</span></p> </div> <div> <h3>颜色测试</h3> <button class="btn red" onclick="setColor('red')">红色</button> <button class="btn green" onclick="setColor('green')">绿色</button> <button class="btn blue" onclick="setColor('blue')">蓝色</button> <button class="btn black" onclick="setColor('black')">黑色</button> </div> <div style="margin-top: 20px;"> <h3>视频控制</h3> <button class="btn control" onclick="controlVideo('play')">播放视频</button> <button class="btn control" onclick="controlVideo('stop')">停止</button> <button class="btn control" onclick="controlVideo('restart')">重新开始</button> </div> <div style="margin-top: 20px;"> <label>帧延迟: <input type="range" id="frameDelay" min="50" max="500" value="100" onchange="updateSpeed()"> <span id="delayValue">100ms</span> </label> </div> </div> <script> function setColor(color) { fetch('/color?c=' + color) .then(response => response.text()) .then(data => { document.getElementById('currentMode').textContent = '颜色: ' + color; alert('设置为: ' + color); }); } function controlVideo(action) { fetch('/control?action=' + action) .then(response => response.text()) .then(data => { if (action === 'play') { document.getElementById('currentMode').textContent = '视频播放中'; } else { document.getElementById('currentMode').textContent = '停止'; } alert('操作: ' + action); }); } function updateSpeed() { const delay = document.getElementById('frameDelay').value; document.getElementById('delayValue').textContent = delay + 'ms'; document.getElementById('speedInfo').textContent = delay + 'ms/帧'; fetch('/control?action=speed&value=' + delay); } // 初始化 fetch('/videoinfo') .then(response => response.json()) .then(data => { document.getElementById('frameInfo').textContent = '0/' + data.frames; }); </script> </body> </html> )====="; void setup() { Serial.begin(115200); delay(2000); Serial.println("=== ESP32-C3 TFT视频播放器 ==="); Serial.printf("视频设置: %d帧, %dx%d分辨率\n", VIDEO_FRAMES, VIDEO_WIDTH, VIDEO_HEIGHT); // 初始化硬件 IO_init(); TFT_BL_1; TFT_Init(); // 清屏 TFT_Clear(BLACK); // 设置WiFi WiFi.softAP(ssid, password); IPAddress myIP = WiFi.softAPIP(); Serial.print("AP IP地址: "); Serial.println(myIP); // 设置网页路由 server.on("/", HTTP_GET, []() { server.send(200, "text/html", MAIN_page); }); server.on("/color", HTTP_GET, []() { if (server.hasArg("c")) { String color = server.arg("c"); uint16_t colorValue = BLACK; if (color == "red") colorValue = RED; else if (color == "green") colorValue = GREEN; else if (color == "blue") colorValue = BLUE; else if (color == "black") colorValue = BLACK; TFT_Clear(colorValue); server.send(200, "text/plain", "颜色设置为: " + color); Serial.println("颜色设置为: " + color); } }); server.on("/control", HTTP_GET, []() { if (server.hasArg("action")) { String action = server.arg("action"); if (action == "play") { isPlayingVideo = true; server.send(200, "text/plain", "开始播放视频"); } else if (action == "stop") { isPlayingVideo = false; server.send(200, "text/plain", "停止播放"); } else if (action == "restart") { currentVideoFrame = 0; isPlayingVideo = true; server.send(200, "text/plain", "重新开始"); } else if (action == "speed" && server.hasArg("value")) { frameDelay = server.arg("value").toInt(); server.send(200, "text/plain", "速度设置: " + String(frameDelay)); } } }); server.on("/videoinfo", HTTP_GET, []() { String json = "{\"frames\": " + String(VIDEO_FRAMES) + ", \"width\": " + String(VIDEO_WIDTH) + ", \"height\": " + String(VIDEO_HEIGHT) + "}"; server.send(200, "application/json", json); }); server.begin(); Serial.println("HTTP服务器启动完成"); // 显示初始信息 TFT_Clear(BLACK); Serial.println("系统就绪"); } void loop() { server.handleClient(); // 播放视频 if (isPlayingVideo) { playVideo(); } delay(10); }
09-30
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值