一段时间后,Arduino没有工作

时间:2016-07-28 12:32:54

标签: arduino

我的arduino过了一会儿就停止了工作。 这是我的代码:

//Pin.h is my header file

#ifndef Pin_h
#define Pin_h

class Pin{
  public:
   Pin(byte pin);
   void on();//turn the LED on
   void off();//turn the LED off
   void input();//input PIN
   void output();//output PIN

  private:
    byte _pin;    
};

#endif


//Pin.cpp is my members definitions
#include "Arduino.h"
#include "Pin.h"

Pin::Pin(byte pin){//default constructor
   this->_pin = pin;
}

void Pin::input(){
  pinMode(this->_pin, INPUT);
}

void Pin::output(){
  pinMode(this->_pin, OUTPUT);
}

void Pin::on(){
  digitalWrite(this->_pin, 1);//1 is equal to HIGH
}

void Pin::off(){
  digitalWrite(this->_pin, 0);//0 is equal to LOW
}


//this is my main code .ino
#include "Pin.h"

Pin LED[3] = {//array of objects
 Pin(11),
 Pin(12),
 Pin(13)
};

const byte MAX = sizeof(LED);

//MAIN PROGRAM----------------------------------------------------------------------------------
void setup() {
  for(int i = 0; i < MAX; i++){
      LED[i].output();
  }//end for loop initialize LED as output
}//end setup

int i = 0;

void loop() {
  for(i = 0; i < 3; i++){
    LED[i].on();
    delay(1000);
  }

  for(i = 3; i >= 0; i--){
    LED[i].off();
    delay(1000);
  }

}//end loop
//see class definition at Pin.h
//see class members at Pin.cpp

当我在void循环函数中使用两个for循环时,我的arduino停止工作,但如果我在我的main中使用下面的代码,它可以正常工作。为什么我的arduino在使用for循环后会停止一段时间?

void loop() {
  LED[0].on();
  delay(1000);

  LED[1].on();
  delay(1000);

  LED[2].on();
  delay(1000);

  LED[2].off();
  delay(1000);

  LED[1].off();
  delay(1000);

  LED[0].off();
  delay(1000);  
}//end loop

1 个答案:

答案 0 :(得分:1)

这是因为你用i = 3 ...

开始你的第二个循环
void loop() {
  for(i = 0; i < 3; i++){
    LED[i].on();
    delay(1000);
  }

  for(i = 3; i >= 0; i--){
    LED[i].off(); // This causes a crash on the first run LED[3] is out of range...
    delay(1000);
  }

}//end loop

另外,您想要替换这些&#39; 3&#39;通过&#39; MAX&#39;,所以当你改变大小时,你不必在任何地方重写它......

void loop() {
  for(i = 0; i < MAX; i++){
    LED[i].on();
    delay(1000);
  }

  for(i = MAX - 1; i >= 0; i--){
    LED[i].off();
    delay(1000);
  }

}//end loop