2012-11-20 77 views
1

我正在研究一個項目,我需要根據開關位置調整映射值,但是當我寫入新的模擬數據時,我想斜坡。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; 

我知道這是不正確的,但如何注入新的映射值成rampped類型的功能?

謝謝!

回答

0

所以,如果我是正確的,你想要增加每個開關位置的電壓,但是緩慢地增加電壓使你的設備不會飛到它。假設是正確的,你想是這樣的:使用

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); 
} 
} 

明顯改變

首先我會做一個函數來獲取位置的變量(POS),那麼你可以做其他值得你需要,但這是主意。首先通過任何方式將位置設置爲0,然後確定目標,然後用一個while循環來增加它。