0

ArduinoIDE1.5.2を使用してArduinoDueの出力ピンの状態を切り替える簡単なタスクがあります。私はこのようなコードを試しました:

int pinnum = 13;
void setup() {
  pinMode(pinnum, OUTPUT);  // use on-board LED
} 

void loop() {
  digitalWrite(pinnum, !digitalRead(pinnum));
  delay(1000);  // wait around for 1 sec (1000 ms)
}

これは何もしません。ピン13は常にHIGHのままです。私は何が間違っているのですか?

4

2 に答える 2

4

OUTPUTとして設定されたピンの状態を読み取るときにバグがあります。一時的な回避策として、回路で許可されている場合は、次のように、ピンを出力として設定する前に、ある時点で入力として設定します。

int pinnum = 13;
void setup() {
  pinMode(pinnum, INPUT);   // Work around bug
  pinMode(pinnum, OUTPUT);  // use on-board LED
} 

void loop() {
  digitalWrite(pinnum, !digitalRead(pinnum));
  delay(1000);  // wait around for 1 sec (1000 ms)
}

詳細については、http://forum.arduino.cc/index.php?topic=185291.0の私の投稿を参照してください

編集:私の前のひどい答えをお詫びします。

于 2013-09-12T18:56:16.420 に答える
0

問題は、以前にピン13に送信したデジタル値を読み取れないことだと思います。LEDがグランドに接続されているため、常に低レベルを読み取っています。

解決策:ピン13に送信するロジックレベルのコピーを変数に保存します。この変数memは、以下のコードで名前を付けています。にコピーがあるので、ピン13を読み取る必要はありませんmem。このコピーは、コード例で行ったように、ピン13に送信する前に反転します。

通常、問題はポートピンでリードモディファイライト操作を実行する際の警告として説明されます。マイクロコントローラの製造元から入手したデータシートを参照してください。

int pinnum = 13;
int mem = 0;
void setup() {
  pinMode(pinnum, OUTPUT);  // use on-board LED
} 

void loop() {
  digitalWrite(pinnum, mem);
  mem=!mem;
  delay(1000);  // wait around for 1 sec (1000 ms)
}
于 2013-09-06T19:28:24.983 に答える