2013-05-07 56 views
0

所以代码不能正常工作,有两个LED不会关闭“highliten”问题。当我运行程序的其他部分时。我想在其他部分关闭它们。 :)Arduino,如果LED“卡住”

包括

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;} 
    } 

提前谢谢!

+0

我不会声称理解上述所有内容,但在我看来,在'if(currentLED == 6){direction = -1;}'最后的值应该是5,而不是6 。 – 2013-05-07 01:00:01

回答

2

就在草图的最后,你有下面这行:

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

我认为,实际上并没有运行程序,这个问题就在这里。在上一行中,您已经添加了一个值为currentLED,并且您正在检查是否已经排除了ledPin阵列的末尾。您改变方向,但不要将当前LED位置重置回ledPin范围内。

下一次changeLED被称为它试图调用digitalWrite(ledPin[currentLED], HIGH);currentLED值为6,这是ledPin阵列外部。在这一点上,Arduino可能会感到不安。

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