Arduino Ramp Mapped Values

时间:2012-11-20 03:50:11

标签: button map arduino

我正在开发一个项目,我需要根据开关位置调整映射值,但是当我写它时,我希望斜接新的模拟数据。

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

 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;

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

谢谢!

1 个答案:

答案 0 :(得分: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循环来增加它。