0

仕事で実行している実験のために、Arduino Uno 用の簡単な制御プログラムを作成しようとしています。簡単に言えば、入力ピンが高いかどうかを読み取る必要があり、出力ピンを高くするために10ミリ秒待機し、10ミリ秒保持してから低くする場合、それ以外の場合は出力ピンが低くなります。

私の問題は、これを実行すると初期遅延が完全に無視され、出力ピンがローになる前に数秒間ハイのままになることです。(delayMicroseconds を使用)

void setup()
{
pinMode(8, INPUT);
pinMode(13, OUTPUT);
}

void loop()
{
  if (digitalRead(8) == HIGH)
  {
    delayMicroseconds(10000);  //wait 10 milliseconds
    digitalWrite(13, HIGH);   // Pump on
    delayMicroseconds(10000);   // holds for pulse width of 10 millisecond
    digitalWrite(13, LOW);   // Pump off
  }
  else
  {
  }
}

遅延機能を使用してデバッグ用に簡単なものをセットアップして、1 秒待ってから出力ピンを高くし、1 秒待ってから出力ピンを低くしてみました。これを行ったのは、arduino の組み込み LED を使用して視覚的にデバッグできるようにするためです。その結果、入力ピンがローになった後、実際にはループを 3 回実行し続けます。(遅延を使用)

void setup()
{
pinMode(8, INPUT);
pinMode(13, OUTPUT);
}

void loop()
{
  if (digitalRead(8) == HIGH)
  {
    delay(1000);  //wait 1 second
    digitalWrite(13, HIGH);   // Pump on
    delay(1000);                  // hold for 1 second
    digitalWrite(13, LOW);   // Pump off
  }
  else
  {
  }
}

なぜこれをしているのか理解できないようです。私はいろいろ調べましたが、なぜこれが起こるのかについての情報を見つけることができないようです. 私は経験豊富なコーダーではなく、実験を実行するために必要なものを書いているだけです。cコードを使用してピンレジスタを直接読み書きしようとしましたが、ifステートメントからwhileループに切り替えても問題は解決しませんでした。どんな洞察も大歓迎です。

4

1 に答える 1

1

Arduino の内部プルアップ抵抗を確認する必要があります。ソフトウェアを使用して、ボタンからの信号を完全にデバウンスできます。

void setup() {
    pinMode(2, INPUT_PULLUP);
}

void loop() {
  if (digitalRead(2) == LOW)  // NOTE THAT PULLUPS REVERSE YOUR LOGIC
  {
    delay(1000);  //wait 1 second
    digitalWrite(13, HIGH);
    delay(1000);                
    digitalWrite(13, LOW);  
  }
}
于 2014-07-23T01:35:41.190 に答える