0

私は Arduino Uno を使用しており、学校のプロジェクトの 2 つの部分を一緒にコーディングしようとしています。両方のパーツは個別に正常に機能しますが、組み合わせると、パーツ 1 のみが機能します。パート 1: 1 つのボタン スイッチ、2 つの LED があり、1 つが点灯し、もう 1 つが消灯し、ボタンがオンまたはオフになります。パート 2: ポテンショメータによって制御されるサーボ

私は、ボタンが押されたときにのみサーボが動作することを確認しました.これは起こるべきではありません.ポテンショメーター/サーボコードはLEDのコードに依存すべきではありません. 私は間違いなくこれの初心者であり、コードが何をしているのかをあまり理解していません。どんな助けでも大歓迎です。

#include <Servo.h>
Servo myServo;
int const potPin = A0;
int potVal;
int angle;
int switchState;
int lastSwitchState = 0;
const int bluePin = 3;
const int yellowPin = 4;
const int button = 2;
int bluelight = LOW;
int yellowlight = HIGH;

void setup(){
  pinMode(bluePin, OUTPUT); //blue LED
  pinMode(yellowPin, OUTPUT); //yellow LED
  pinMode(button, INPUT); //switch
  myServo.attach(9);
  Serial.begin(9600);
}
void loop(){
  // PART 1 - this is the only part that seems to be working now?
  switchState = digitalRead(button);
  while (digitalRead(button)==LOW); 
  if (digitalRead(button)==LOW){ 
  bluelight=!bluelight;
    digitalWrite(bluePin, bluelight);
    digitalWrite(yellowPin, yellowlight);
  }
  else{
  if (switchState=!lastSwitchState) {
    yellowlight=!yellowlight;
    bluelight=!bluelight;
  digitalWrite(yellowPin, yellowlight);
  digitalWrite(bluePin, bluelight);
  }
  }
  // PART 2 - Only works when button is pressed? 
    potVal = analogRead(potPin);
  Serial.print("potVal: ");
  Serial.print(potVal);
  angle = map(potVal, 0, 1023, 0, 179);
  Serial.print(", angle: ");
  Serial.println(angle);
  myServo.write(angle);

  delay(250); //wait for a quarter second
  }
4

3 に答える 3

0

If else文を修正してください。状態をチェックする際の問題。そして bluePin と yellowPin の相互依存関係にあるポット ピン (A0) 。個々にうまく機能しています。

于 2014-02-25T10:01:29.633 に答える
0

これはあなたのエラーです:

while (digitalRead(button)==LOW);

プログラムは、このボタンが押されていない間は常にこのループに固執し、その後、押したときに続行しますが、このボタンが高いときに機能するコードに入ります (true)

于 2014-02-25T13:42:51.307 に答える
0

あなたがやっている:

while (digitalRead(button)==LOW);

そのコードは、digitalRead が TRUE になるまですべての実行を停止するため、そのステートメントの後のコードは、ボタンが HIGH になった後にのみ実行されます。

次のIFはすでにLOWまたはHIGHの読み取りの場合に何をすべきかを気にかけているため、whileは不必要であることを理解できる限り。また、遅延(250); while が削除されると、実行をブロックするコードの唯一の部分であるように思われるので、それが唯一のブロックバグだと思います:)

于 2014-02-25T10:04:18.113 に答える