Winnie A Damayo Winnie A Damayo - 4 months ago 19
C Question

Arduino not working after a while

my arduino stop working after a while.
here's my code:



//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


my arduino stop working when i used two for loops inside the void loop function, but if i used this code below in my main, it works fine. why does strong textmy arduino stop after a while when using for loops?

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

Answer

This is because you start your second loop with 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

Also, you want to replace these '3' by 'MAX', so when you change the size, you don't have to rewrite it everywhere...

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
Comments