Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If statement Arduino编码问题:组合时2个部分不工作_If Statement_While Loop_Arduino_Arduino Ide - Fatal编程技术网

If statement Arduino编码问题:组合时2个部分不工作

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

我正在使用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
  }
#包括
伺服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将持续打开和关闭。此外,按钮逻辑可能会颠倒,这取决于呜呜声