Arduino编码问题:两部分组合不起作用

问题描述:

我正在使用Arduino Uno并尝试将两部分的学校项目编码在一起。两个部分单独工作良好,但合并后,只有部分1工作。 第1部分:涉及1个按钮开关,2个LED,其中一个保持打开状态,另一个保持关闭状态,该按钮将变为打开或关闭状态。 第二部分:伺服电位器控制Arduino编码问题:两部分组合不起作用

我确定伺服器只有在按下按钮时才会结束工作,这不应该发生,电位器/伺服代码不应该依赖于代码为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 
    } 

在If else语句中进行更正。检查条件时出现问题。并且与pinPin(A0)相互依赖的bluePin & yellowPin。所以他们个人工作得很好。

你正在做的:

while (digitalRead(button)==LOW); 

代码将停止的每一个执行,直到digitalRead成真,使语句后的代码被执行按钮就变成HIGH

我后ONLY可能会不确定,因为下面的IF已经是在LOW或HIGH读数的情况下应该怎么做的。 延迟(250);似乎是将阻止你的执行,一旦同时被删除的代码只是一部分,所以我认为这是你唯一的联锁错误:)

+0

当我拿出while语句,其工作代码它不起作用,所以我不确定我在if语句中做了什么错误。有什么建议要改变它,以便开关切换哪个灯保持点亮? – user3350391

+0

现在你必须纠正你的if语句。如果按钮为低电平,则不进行任何操作,如果高电平切换LED状态。请注意,如果持续按下led按钮,将持续打开和关闭。按钮逻辑也可能倒置,取决于wh。 – Lesto

这是你的错误:

而(digitalRead(按钮)== LOW);

程序停留在这个循环中所有的时间这BUTTOM它不是压制,那么当你按下它继续,但进入此按钮时它的高(真)