我正在使用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
}
在 If else 语句中进行更正。检查条件时出现问题。和电位销(A0)在蓝针和黄针的相互依赖中。所以他们个人工作得很好。
你正在做:
while (digitalRead(button)==LOW);
该代码将停止执行 EVERY 直到 digitalRead 变为 TRUE,因此该语句之后的代码仅在按钮变为 HIGH 后执行
据我所知,虽然是不必要的,因为以下IF已经在考虑在低或高读数的情况下该怎么做。还有延迟(250);似乎是代码中唯一会阻止您执行的部分,一旦 while 被删除,所以我认为这是您唯一的阻止错误:)
这是你的错误:
而(数字读取(按钮)==低);
程序一直卡在这个循环上,这个屁股没有被按下,然后当你按下它时它继续,但进入代码,当这个按钮高时它有效(真)