# HoloCubic **Repository Path**: Potatotatotato/HoloCubic ## Basic Information - **Project Name**: HoloCubic - **Description**: ................. - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-04-13 - **Last Updated**: 2023-11-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 改进 HoloCubic--多功能透明显示屏桌面站
## 在原项目上作出的改进 #### 1. PCB优化; #### 2. 用solidworks仿制了metal板外壳,使用半透明树脂光固化打印; #### 3. 天气app代码编写; #### 4. 用codebolcks配置了LVGL 8.3模拟器; #### 5. 总结了使用lvgl生成动画文件的流程。 ## PCB 1. 将tf卡座替换为tb上常见的型号(带弹簧的可以自锁的那种); 2. 替换fpc-8p封装,稚晖君的fpc排座最大的2个焊盘位置有点靠外,和我买的不一样; 3. 将LDO替换为最大电流为500ma的rt9013; 4. 将与EN引脚相连的0.1uF电容替换为4.7uF的电容(官方推荐1uF,但经本人测试,1uF的电容有时候也下载不进去程序); 5. 重新走线。为方便走线,减小回路长度,修改pcb为4层板; 由于本人比较懒惰,所以我直接在pcb文件上修改封装、重新走线,所以pcb文件和sch文件之间的编译会出问题,但pcb本身是通过了DRC检测的。 ## 外壳 ### navie版本 这个版本需要3d打印两个部分然后组装,上下部分可以用磁铁吸附。但这个版本需要粘贴棱镜,稚晖君推荐的是OCA干胶。然而我没想到这玩意这么难粘,我粘了十几次都失败了,始终有气泡,还弄坏了一块屏幕,我真的无语了,被迫放弃。
### metal版本 我使用solidworks绘制了可用光固化3d打印的metal板模型,并开源出来。本人强烈这个版本,因为这个版本不需要粘屏幕。取而代之的是,我采用了白乳胶将棱镜粘到外壳上,效果还不错! 本模型适用于稚晖君naive版本pcb,适用于1.6mm板厚(1.2mm板厚应该也行,大家结合3D图查找有无冲突的部分),强烈推荐用半透明树脂3D打印,以获得最好的灯光效果。此外,我将solidworks源文件分享出来的原因是:由于最开始打错了板子,所以希望在网上找到metal版本的外壳的3D文件,进而修改成适合naive电路板的外壳,但找了很久都只有stl文件。无奈之下,只有自己画图。
## 软件 在稚晖君移植驱动的基础上,模仿透明小电视AIO版本[透明小电视AIO版本制作经验分享](https://www.bilibili.com/video/BV1d3411T77a/?spm_id_from=333.788.recommend_more_video.0&vd_source=e6cfc8577ccc9621465b12d49ef2c1c3),用lvgl开发了天气页面。限于个人能力,没有实现app切换,等以后有空了再来完善。 ## LVGL生成动画文件的流程 ### 1. 制作或下载动画,导出图片序列至文件夹
### 2. 使用LVGL在线的image converter,选择合适的color format,将图片序列导出为.c文件序列
### 3. 将所有的.c文件合并,注意只保留数组和结构体。这里我编写了一段c++代码来进行自动合并 ```cpp #pragma warning(disable:4996) #include #include #include using std::cout; using std::endl; using std::string; using std::vector; #define IMG_AMOUNT 37 //函数:定位到某一行 int GetSeek(FILE* fp, int line) //必须是可读的指针,只有可写的不行 { char ch; int i = 1; fseek(fp, SEEK_SET, 0); if (fgetc(fp) == EOF) { //如果开头读取到结束符返回-1 return -1; } fseek(fp, SEEK_SET, 0); //确保指针在开头 while (!(line == i)) { ch = fgetc(fp); // 读取 if (ch == '\n') { i = i + 1; //计数 } if (ch == EOF) { //如果读取中读到结束符返回-1 return -1; } } return 0; } int main() { char tempChar; char tempImgPath[100]; string dirPath = "C:\\Users\\28715\\Desktop\\CXK\\"; string rawImgPath = "C:\\Users\\28715\\Desktop\\CXK\\CXK%02d.c"; string desImgPath = dirPath + "CXK.c"; FILE* desImg = fopen(desImgPath.c_str(), "a+"); if (desImg == NULL) printf("Can't create destination img.\r\n"); //开始复制.c图片文件 for (int i = 0; i < IMG_AMOUNT; i++) { //打开需要转化的图片 sprintf(tempImgPath, rawImgPath.c_str(), i); printf("%s\r\n", tempImgPath); FILE* tempImg = fopen(tempImgPath, "r"); if (tempImg == NULL) printf("Can't open temp img.\r\n"); //前面的23行略过 GetSeek(tempImg, 23); //开始复制文件 tempChar = fgetc(tempImg); while (tempChar != EOF) { fputc(tempChar, desImg); tempChar = fgetc(tempImg); } fclose(tempImg); } fputc(0, desImg); fclose(desImg); return 0; } ``` ### 4. 用notepad++ 批量修改.c图片文件的宏定义
*** `\d` 表示匹配一个数字字符。