If statement Arduino编码问题:组合时2个部分不工作
我正在使用Arduino Uno并试图将一个学校项目的两部分编码在一起。这两个部分可以单独工作,但当组合起来时,只有第1部分工作。 第1部分:包括1个按钮开关,2个LED,其中一个保持打开,一个保持关闭,按钮改变打开或关闭。 第2部分:电位器控制的伺服 我已经确定,伺服只有在按下按钮时才能工作,这不应该发生,电位计/伺服代码不应该依赖于LED的代码。我绝对是这方面的初学者,不了解代码的很多功能,所以请原谅我的冗余。非常感谢您的帮助If statement Arduino编码问题:组合时2个部分不工作,if-statement,while-loop,arduino,arduino-ide,If Statement,While Loop,Arduino,Arduino Ide,我正在使用Arduino Uno并试图将一个学校项目的两部分编码在一起。这两个部分可以单独工作,但当组合起来时,只有第1部分工作。 第1部分:包括1个按钮开关,2个LED,其中一个保持打开,一个保持关闭,按钮改变打开或关闭。 第2部分:电位器控制的伺服 我已经确定,伺服只有在按下按钮时才能工作,这不应该发生,电位计/伺服代码不应该依赖于LED的代码。我绝对是这方面的初学者,不了解代码的很多功能,所以请原谅我的冗余。非常感谢您的帮助 #include <Servo.h> Servo m
#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
}
#包括
伺服myServo;
int const potPin=A0;
国际野炊;
内角;
int开关状态;
int lastSwitchState=0;
常数int bluePin=3;
常数int yellowPin=4;
常数int按钮=2;
int蓝光=低;
int黄灯=高;
无效设置(){
引脚模式(蓝色引脚,输出);//蓝色LED
引脚模式(黄色引脚,输出);//黄色LED
pinMode(按钮,输入);//开关
附件(9);
Serial.begin(9600);
}
void循环(){
//第1部分-这是唯一一个似乎正在工作的部分?
开关状态=数字读取(按钮);
而(数字读取(按钮)=低);
如果(数字读取(按钮)=低){
蓝光=!蓝光;
digitalWrite(bluePin、bluelight);
数码书写(黄针、黄灯);
}
否则{
if(switchState=!lastSwitchState){
黄灯=!黄灯;
蓝光=!蓝光;
数码书写(黄针、黄灯);
digitalWrite(bluePin、bluelight);
}
}
//第2部分-仅在按下按钮时工作?
potVal=模拟读数(potPin);
连载印刷品(“potVal:”);
连续打印(potVal);
角度=地图(potVal,0,1023,0,179);
连续打印(“,角度:”);
串行打印LN(角度);
myServo.write(角度);
延迟(250);//等待一刻钟
}
在If-else语句中进行更正。在检查蓝针和黄针的状态和槽针(A0)时出现的问题。因此,就个人而言,他们工作得很好。您正在做:
while (digitalRead(button)==LOW);
在digitalRead变为TRUE之前,该代码将停止执行每个语句,因此该语句之后的代码仅在按钮变高后执行
就我所能理解的而言,while是不必要的,因为下面的IF已经在考虑在低或高读数的情况下该怎么做了。
还有延迟(250);一旦删除while,这似乎是代码中唯一会阻止您执行的部分,因此我认为这是您唯一的阻止错误:)这是您的错误:
而(数字读取(按钮)=低)
程序一直卡在这个循环上,这个按钮没有按下,然后当你按下它继续,但进入代码,当这个按钮高(真)当我取出while语句时,它不工作,所以我不确定if-else语句中我做错了什么。有什么建议可以改变它以使开关切换哪个灯保持亮着吗?现在你必须纠正你的if语句。如果按钮处于低位,则不执行任何操作;如果按钮处于高位,则切换led状态。请注意,如果您一直按下按钮,led将持续打开和关闭。此外,按钮逻辑可能会颠倒,这取决于呜呜声