1

Processing と Arduino プッシュボタンを接続しています。Standard Firmata との接続に成功しました。私が望んでいるのは、ボタンを押すと処理中に画像が表示されるだけでなく、LED と同じように画面にも表示され、ボタンをもう一度押すと画​​像が画面から消えることです。今のところ、形状でテストしています。LEDでテストしましたが、問題なく動作します。私が間違っていることはありますか?これは私が持っているコードです:

void draw()
{
  buttonState = arduino.digitalRead(buttonPin);

  if (buttonState == arduino.HIGH && buttonPressed == 0)
  {
    buttonPressed = 1;
    rect(10, 10, 10, 10);
    text("hello", 10, 10);
  }
  if (buttonState == arduino.LOW && buttonPressed == 1)
  {
    buttonPressed = 0;
    rect(50, 50, 10, 10);
  }
} 
4

1 に答える 1

0

ボタンをどのように配線したかわかりません。押すとHIGHになると思います。

現在、ボタンが押されたときに最初のifステートメントがトリガーされますが、最後にチェックしたときにボタンが押されなかった場合に限ります (つまり、事実上、立ち上がりエッジがトリガーされます)。

2 番目のifステートメントは、ボタンが離されたときにトリガーされますが、最後にチェックしたときに離されなかった場合に限ります (つまり、効果的に立ち下がりエッジがトリガーされます)。

ボタンを押すたびに何かを切り替えるようにしたい場合は、おそらく最初のifステートメントにほとんどのロジックを入れる必要があります (buttonPressedものを除く)。画像が現在表示されているかどうかを示す何らかの値を保存する必要があります。ボタンが押されたときに表示されている場合は、非表示にします (逆も同様です)。

例えば:

boolean imageVisible = false;

void draw()
{
    buttonState = arduino.digitalRead(buttonPin);

    if (buttonState == arduino.HIGH && buttonPressed == 0)
    {
        buttonPressed = 1;
        if (imageVisible) {
            // Hide image here...
        } else {
            // Show image here...
        }
        imageVisible = !imageVisible;
    }

    if (buttonState == arduino.LOW)
    {
        buttonPressed = 0;
    }
}

注: 2 番目のステートメントbuttonPressedからチェックを外しました。if実際に立ち下がりエッジ イベントに応答する必要がある場合にのみ必要です。単純なトグルの場合、これは重要ではありません。

于 2014-04-23T14:03:35.033 に答える