5

最初のループの後に単純に停止する小さなArduinoプログラミングがあります。私は何かを見落としているかもしれません...しかし、私は何が起こっているのかについて単に無知です.

ここにコードがあります

int led = 13;
//int led = 10;
unsigned long windtime = 1000 * 2; // 2 seconds
unsigned long pausetime = 1000 * 60; // 1 minute

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);

  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
  Serial.print("Wind");
  digitalWrite(led, HIGH);
  delay(windtime);               

  Serial.print("Pause");
  digitalWrite(led, LOW);    
  delay(pausetime);
}

シリアルのみをデバッグ エコーとして使用しました。

何か案が?

4

4 に答える 4

3

あなたの行で:

unsigned long pausetime = 1000 * 60; // 1 minute

Arduino は 1000 (整数) と 60 (整数) を見て、スロットに入れようとする答えを導き出します... 整数! これは、一時停止時間に与えることができる最大の答えが 32,767 であることを意味します。これよりも大きいものはすべてラップ ラウンドするため、60,000 から 2 ロットの 32,768 を引くと、-5536 になります。

実際の動作を確認するには、Serial.print(1000 * 60); を追加します。Tools>Serial Monitor で設定と監視を行います。

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);
  Serial.begin(9600);
  Serial.print(1000 * 60);
}

Arduino に定数を unsigned long として使用させるには、数値の末尾に ul または UL を追加します。

于 2014-05-19T12:29:14.893 に答える
0

unsigned long が上書きされている可能性があります。delay(6000)デバッグ方法として、 6 秒間などの定数値をハードコーディングしてみてください。これにより、ハードウェアが機能しているかどうかが証明されます。

最後に、遅延値が である必要があるかどうかはわかりませんunsigned long。通常は60,000 ではなく、Arduino の (2 バイト) が保存できるint値よりも大きい値を使用します。int組み込みシステムは実際にはより小さなシステムであることを忘れないでください。

この例: http://arduino.cc/en/Tutorial/BlinkWithoutDelay は、遅延の値が int でなければならないことを意味します。

お役に立てれば。

于 2013-10-04T02:14:56.123 に答える