1

我正在做一个项目,我需要根据开关位置调整映射值,但是我想在编写新的模拟数据时对其进行斜坡调整。

举个例子,假设我们想让一个按钮输出不同的电压(串行机器人控制器)。据我所知,它看起来像这样:

 if( adjenpos == 1) {
boostbtnout = map(boostbtnin, 0, 1023, 0, 51);
}
else if( adjenpos == 2) {
boostbtnout = map(boostbtnin, 0, 1023, 0, 102);
}
else if( adjenpos == 3) {
boostbtnout = map(boostbtnin, 0, 1023, 0, 153);
}
else if( adjenpos == 4) {
boostbtnout = map(boostbtnin, 0, 1023, 0, 204);
}
else if( adjenpos == 5) {
boostbtnout = map(boostbtnin, 0, 1023, 0, 255);
}

现在使用选项 3,选择一个开/关值为 0 或 153 的按钮,我想将值 0 增加到 153 超过规定的速率,而不仅仅是开或关。

我的假设是在循环中做类似的事情:

boostramp = 1
boostbtnvalue = analogRead(boostbtnout)
 analogWrite(boostbtn, boostbtnvalue);
 if ( boostpwr <= boostbtnout){
 boostpwr = boostpwr + boostramp;

我知道这是不正确的,但是如何将新的映射值注入到斜坡类型的函数中?

谢谢!

4

1 回答 1

0

所以,如果我是正确的,你想增加每个开关位置的电压,但是慢慢地增加电压,这样你的设备就不会飞到它上面。假设这是正确的,你想要这样的东西:

首先我会创建一个函数来获取变量(pos)的位置,然后你可以使用它来完成剩下的工作

int pos;
int target;
int currentPower = 0;

if(pos == 0){ target = 100
}
else if(pos == 1){target =200
}
else if(pos == 2){ target = 300
}
if(target > currentPower){
while(currentPower < target){
currentPower++;
delay(10); //tweak to change ramp speed
}
}
if(target < currentPower){
while(currentPower > target){
currentPower--;
delay(10);
}
}

显然将值更改为您需要的值,但这就是想法。首先通过任何方式将位置设置为 0,然后确定目标,然后使用 while 循环来增加它。

于 2012-11-22T04:45:05.933 回答