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);似乎是将阻止你的执行,一旦同时被删除的代码只是一部分,所以我认为这是你唯一的联锁错误:)
答
这是你的错误:
而(digitalRead(按钮)== LOW);
程序停留在这个循环中所有的时间这BUTTOM它不是压制,那么当你按下它继续,但进入此按钮时它的高(真)
当我拿出while语句,其工作代码它不起作用,所以我不确定我在if语句中做了什么错误。有什么建议要改变它,以便开关切换哪个灯保持点亮? – user3350391
现在你必须纠正你的if语句。如果按钮为低电平,则不进行任何操作,如果高电平切换LED状态。请注意,如果持续按下led按钮,将持续打开和关闭。按钮逻辑也可能倒置,取决于wh。 – Lesto