Arduino编码问题:合并后2个部分不起作用

时间:2014-02-25 09:29:11

标签: if-statement while-loop arduino arduino-ide

我正在使用Arduino Uno并尝试将学校项目的两个部分编码在一起。两个部分分别工作正常,但组合时,只有第1部分工作。 第1部分:涉及1个按钮开关,2个LED,其中一个保持打开,一个保持关闭,按钮改变打开或关闭。 第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
  }

3 个答案:

答案 0 :(得分:0)

在If else语句中进行更正。检查条件时的问题。锅针(A0)与bluePin&amp;相互依赖。 yellowPin。所以他们个人工作正常。

答案 1 :(得分:0)

你正在做的事情:

while (digitalRead(button)==LOW);

该代码将停止执​​行每个直到digitalRead变为TRUE,因此该语句之后的代码仅在按钮变为高电平后执行

据我所知,虽然是不必要的,但是因为下面的IF已经在关注LOW或HIGH读取的情况下做了什么。 也是延迟(250);似乎是代码中唯一会阻止执行的部分,一旦删除了,所以我认为这是你唯一的阻塞bug:)

答案 2 :(得分:0)

这是你的错误:

while(digitalRead(button)== LOW);

程序一直停留在这个循环上这个按钮没有被按下,然后当你按下它继续,但进入代码,当这个按钮它高时(true)