0

OK、次の質問は次のとおりです。デジタル入力にプレスボタンを追加した場合、これを使用してポテンショメータをゼロに校正できますか?

それによって、ボタンを押すと、ポットがどの位置にあるかに関係なく、すべての値がゼロから始まりますか?後でExcelでこれを行うつもりでしたが、今日の午後に試すことは可能のようです。switchステートメントまたはある種のifステートメントを使用しますか?

float ZPot = 0;
float YPot = 1;
float XPot = 2;
byte Reset = 10;

void setup()
{
    pinMode(XPot, INPUT);
    pinMode(YPot, INPUT);
    pinMode(ZPot, INPUT);
    pinMode(Reset, INPUT);

    Serial.begin(9600);
}

void loop()
{
    ZPot = analogRead(0)/ 1023.0 * 105.0;
    YPot = analogRead(1)/ 1023.0 * 105.0;
    XPot = analogRead(2)/ 1023.0 * 105.0;
    Reset = digitalRead(10);

    Serial.print("X Pot [mm] = ");
    Serial.print(XPot    );
    delay(500);

    Serial.print("   Y Pot [mm] = ");
    Serial.print(YPot    );
    delay(500);

    Serial.print("   Z Pot [mm] = ");
    Serial.println (ZPot  );
    delay(500);
}
4

3 に答える 3

0

答えに追加するために、map()関数を使用することもできます。

ZPot = map(analogRead(0),0,1023.0,0,105);
YPot = map(analogRead(1),0,1023.0,0,105);
XPot = map(analogRead(2),0,1023.0,0,105);

map()を呼び出すよりも手動操作を行う方が速い場合がありますが、プログラムがそれほど複雑でない場合は、これで問題ありません。(analogRead(0) / 1023.0f * 105.0f)それ以外の場合は、乗算のみを使用して式を作成することを検討してください。(analogRead(0) * 0.000977517107f * 105.0f)

HTH

于 2011-04-13T14:19:17.880 に答える
0

関数を追加してみる

float convertToMM(float reading)
{
  return reading/1023.0*105.0;
}

そして、あなたが読書をするときは代わりに

ZPot = convertToMM(analogRead(0));
于 2011-04-13T13:09:58.567 に答える
0

あなたはすでにほとんどそこにいます。変更する必要があるのは、次の 2 つだけです。

float ZPot = 0;           
float YPot = 1;          
float XPot = 2;
int Reset = 10;
float ZCalibration = 0;
float YCalibration = 0;
float XCalibration = 0;

Reset = digitalRead(10);
ZPot = (analogRead(0) / 1023.0 * 105.0) - ZCalibration;
YPot = (analogRead(1) / 1023.0 * 105.0) - YCalibration;
XPot = (analogRead(2) / 1023.0 * 105.0) - XCalibration;

if (Reset == HIGH) {
    ZCalibration = ZPot;
    YCalibration = YPot;
    XCalibration = XPot;
}
于 2011-04-13T13:11:24.123 に答える