有幸能够参与这次比赛,学到了很多知识,由于时间比较匆忙,赶在结束前几天完成了这个DEMO。这个项目基于TOS的mqtt的例程,通过滴答数计时并显示时间,通过联网校对时间,云端下发指令矫正时间,项目目的主要是完成对TencentOS移植以及腾讯物联网平台的实践。
CH32V_EVB是腾讯物联网操作系统TencentOS tiny 团队联合沁恒微电子设计的一款物联网评估板,用于TencentOS tiny 基础内核、RISC-V IP核架构和IoT组件功能体验和评估。
使用TencentOS 创建了三个thread,分别用于LCD显示,计时和传输数据。gitee链接
由于屏幕的刷新率感人,而且我也没有找到更加经济的方法来改变展示效果,因此将动态的时钟换成了静态: ) 这里时钟的部分要用TOS内核的sleep或者delay接口,而不是RTC的delay,否则会死循环无法调度。
画时钟使用的是LCD例程中的画线函数,一些三角函数移植了LVGL的三角函数实现,lvgl的实现比较有意思,学到了很多节约资源的方法。
表的指针根据角度计算出来就好了
//转动秒针
secondAngle = calendar.sec * 6; // 2 * pi / 60 =一秒钟走的角度 ti.wSecond =系统当前秒
secondEnd_x = center_x + (r * lv_trigo_sin(secondAngle) >> LV_TRIGO_SHIFT);
secondEnd_y = center_y - (r * lv_trigo_cos(secondAngle) >> LV_TRIGO_SHIFT);
// printf("secondEnd_x is %u\r\n",secondEnd_x);
// printf("secondEnd_y is %u\r\n",secondEnd_y);
LCD_DrawLine(center_x,center_y,secondEnd_x,secondEnd_y,BLUE);
//转动分钟
uint16_t minuteAngle = calendar.min * 2 * 3.14 / 60 + secondAngle / 60;
uint16_t minuteEnd_x = center_x + (72 * lv_trigo_sin(minuteAngle) >> LV_TRIGO_SHIFT);
uint16_t minuteEnd_y = center_y - (72 * lv_trigo_cos(minuteAngle) >> LV_TRIGO_SHIFT);
LCD_DrawLine(center_x,center_y,minuteEnd_x,minuteEnd_y,YELLOW);
//转动时钟
uint16_t hoursAngle = calendar.hour * 2 * 3.14 / 12 + minuteAngle / 60;
uint16_t hoursEnd_x = center_x + (45* lv_trigo_sin(hoursAngle)>> LV_TRIGO_SHIFT);
uint16_t hoursEnd_y = center_y + (45* lv_trigo_cos(hoursAngle)>> LV_TRIGO_SHIFT);
LCD_DrawLine(center_x,center_y,hoursEnd_x,hoursEnd_y,RED);
//三角函数预先存储90个值(除以32767)
/**********************
* STATIC VARIABLES
**********************/
static const int16_t sin0_90_table[] = {
0, 572, 1144, 1715, 2286, 2856, 3425, 3993, 4560, 5126, 5690, 6252, 6813, 7371, 7927, 8481,
9032, 9580, 10126, 10668, 11207, 11743, 12275, 12803, 13328, 13848, 14364, 14876, 15383, 15886, 16383, 16876,
17364, 17846, 18323, 18794, 19260, 19720, 20173, 20621, 21062, 21497, 21925, 22347, 22762, 23170, 23571, 23964,
24351, 24730, 25101, 25465, 25821, 26169, 26509, 26841, 27165, 27481, 27788, 28087, 28377, 28659, 28932, 29196,
29451, 29697, 29934, 30162, 30381, 30591, 30791, 30982, 31163, 31335, 31498, 31650, 31794, 31927, 32051, 32165,
32269, 32364, 32448, 32523, 32587, 32642, 32687, 32722, 32747, 32762, 32767
};
//每次画对称的8个点
LV_ATTRIBUTE_FAST_MEM int16_t lv_trigo_sin(int16_t angle)
{
int16_t ret = 0;
angle = angle % 360;
if(angle < 0) angle = 360 + angle;
if(angle < 90) {
ret = sin0_90_table[angle];
}
else if(angle >= 90 && angle < 180) {
angle = 180 - angle;
ret = sin0_90_table[angle];
}
else if(angle >= 180 && angle < 270) {
angle = angle - 180;
ret = -sin0_90_table[angle];
}
else { /*angle >=270*/
angle = 360 - angle;
ret = -sin0_90_table[angle];
}
return ret;
}
感谢腾讯给我这次接触嵌入式开发的机会,感谢腾讯和沁恒的所有技术支持,所有工具(处理跳线)和代码可以直接运行,减少了很多不必要的麻烦,尤其是对于我这种半吊子的软件开发小学生 : )。我有幸尝试了摄像头等大部分例程,也在群里学习到了很多有用的知识。由于一些硬件限制,不太适合直接在板子上进行AI推理部署,因此我改变了原有的想法(TB买的模块明天才到),在比赛结束前的这几天完成了这个DEMO,等明天收到快递后会继续更新。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。