c - 为TFT绘图计算固定点中元素的位置
问题描述
我目前正在为一个小型 uC 项目编写 UI。在计算垂直线的位置时遇到了一些麻烦。这个想法是将红线沿 x 轴移向矩形的末端。
使用无限旋转编码器递增的值,范围为 0 到 800,增量为 1。矩形的左侧是 x 轴的起点,x = 0。范围 0 - 800 表示 0 - Q13.3 定点表示法中的 100.00,数据类型为 uint16_t。
该矩形目前为 300 像素宽,我对此很灵活,但不应小于 240 像素。线宽 1 像素。
问题是,由于性能限制,我只能使用定点数学,根本不应该访问浮点单元。
我目前正在做的是有一个计数器随着编码器的每次点击而增加。某事 喜欢:
if(direction) counter++; //Running forwards
if(!direction) counter--; //Running backwards
if((counter % 8 ) == 0){
if(direction) line.x += 3;
if(!direction) line.x -= 3;
}
这不是最佳的,因为间距是 3 像素。
理想情况下,如果浮点计算是一个选项,我只需将计数器增加 0.375
感谢有关此问题的任何建议。
干杯
解决方案
在非常小的错误上,您需要做一些技巧:
uint8_t result;
static uint8_t counter1 = 0, counter2 = 0;
void handleEncoderTickUp(void)
{
if(++counter1 == 2) {result++; counter1 = 0;}
if(++counter2 == 3) {result +=2; counter2 = 0;}
}
非常类似于倒计时
推荐阅读
- python - 列表中出现的python中的索引错误
- android - 如何从我的单元测试中删除多余的双键 (!!)?
- xamarin.forms - 如何在 Azure Notification Hub 中将 iOS 设备注册的到期日期设置为 31-12-9999 23:59:59?
- python - 超参数调优 FB Prophet 模型 - 如何在参数网格中引用 m.add_seasonality 类别
- office365 - Exchange Online 从 11 月 1 日起通过 POP3 接收重复的电子邮件
- php - 安装和卸载 Xdebug 后修复 JIT
- amazon-web-services - Amazon Pinpoint 是否仅允许跟踪活动的打开和点击事件?
- javascript - 如何从项目中调用 Serapi - Nodejs 和 Angular 中的 localhost
- amazon-web-services - 应用程序未能生成所需的属性
- r - 如何让 Chorddiag 图适用于 R 中的单一状态案例