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 に答える