【发布时间】:2019-05-30 13:25:37
【问题描述】:
我制作了一个键盘,可以给我一个模拟值。现在我想根据阻力检测按下哪个键。然而,这些值是非线性的。
我用很多“if/else-es”来做到这一点。有没有更好的方法来做到这一点?
if(analogValue < 159){
keyPress(KEY_A_ACUTE);
}else if(analogValue < 400){
keyPress(KEY_I_ACUTE);
}else if(analogValue < 537){
keyPress(KEY_O_ACUTE);
}else if(analogValue < 624){
keyPress(KEY_U_ACUTE);
}else if(analogValue < 685){
keyPress(KEY_N_TILDE);
}else if(analogValue < 800){
keyPress(KEY_E_ACUTE);
}
【问题讨论】:
-
视情况而定,如果只有这6种情况就可以了。如果它 > 100 并且性能是一个问题,我会使用二进制搜索匹配间隔
-
这只是这 6 种情况,但我正在尝试学习,所以我正在寻找一个函数来将值映射到正确的整数
-
建议使用“跳转表”并在模拟值上进行一些计算以确定要使用跳转表中的哪个条目
-
温度。湿度、电源电压、电路电阻(甚至可能是情绪的相位)都会导致模拟读数发生变化。没有按下按钮时的读数是多少?代码是否允许'keybounce'
-
@user3629249 我知道我得到的值有点不可预测,但它们属于这些范围。我的代码确实允许按键反弹等等,但这不是问题。该代码有效,但我不喜欢它。所以我要求一种更好的方法。