0

因此代码无法正常工作,有两个 LED 不会关闭“突出显示”问题。当我运行程序的 Else 部分时。我想在其他部分关闭它们。:)

包括

byte ledPin[] = {8, 9, 10, 11, 12, 13}; //--------------------------------.
int ledDelay;                           // Del 1
int direction = 1;
int currentLED = 0;
unsigned long changeTime;
int potPin = 0; 


Servo myservo;  // create servo object to control a servo 

int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin 
int va;

void setup() 
{ 

  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, INPUT);
  myservo.attach(3); // attaches the servo on pin 9 to the servo object 
  Serial.begin(9600);

  for (int x=0; x<6; x++) {
  pinMode(ledPin[x], OUTPUT); }
  changeTime = millis();
} 

void loop() {
   int  on = digitalRead(6);
if (on == HIGH)
{
  myservo.attach(3);
// Here is the problem!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      if va < 523)
{
  digitalWrite(5, HIGH);
}
else if (va > 555)
{
   digitalWrite(4, HIGH);
}

else
{
   digitalWrite(4, LOW);
   digitalWrite(5, LOW);
}
// Here is the problem!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);
  va = analogRead(potPin);            // reads the value of the potentiometer (value between 0 and 1023) 
  val = map(va, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180) 
  myservo.write(val);                  // sets the servo position according to the scaled value 
  delay(1);                           // waits for the servo to get there 

}
else
{
  myservo.detach();
  digitalWrite(5, LOW);
  digitalWrite(4, LOW);
  ledDelay = analogRead(potPin) / 4;
  if ((millis() - changeTime) > ledDelay) 
  {
  changeLED();
  changeTime = millis();
  }
}
}

  void changeLED() {
   for (int x=0; x<6; x++)
   {
   digitalWrite(ledPin[x], LOW);
   }
   digitalWrite(ledPin[currentLED], HIGH);
   currentLED += direction;
  if (currentLED == 6) {direction = -1;}
  if (currentLED == 0) {direction = 1;}
  }

提前谢谢!

4

1 回答 1

2

在草图的末尾,您有以下行:

if (currentLED == 6) { direction = -1; }

我认为,在没有实际运行程序的情况下,问题就在这里。在上一行中,您已将一个值添加到 of 中,currentLED并且您正在检查是否已超出ledPin数组的末尾。您更改了方向,但没有将 currentLED 位置重置为返回ledPin范围内。

下次changeLED调用它会尝试调用digitalWrite(ledPin[currentLED], HIGH);,但值为currentLED6,位于ledPin数组之外。Arduino 在这一点上可能会感到不安。

我认为你只需要更改语句来检查是否currentLED == 5而不是6. 这将意味着下一次changeLED调用最后一个 LED 时将打开,并且 的值currentLED将递减 ( direction == -1),使其保持在ledPin范围内。

于 2013-05-07T02:51:15.263 回答