Need help with my final year proyect

Hi, I'm making a program that lights 30 different candles in OOP, but the setters don't work correctly.

I've done multiple tests and the getters work perfectly, but I don't understand why the setters don't work.

Thank you for reading.

This an Arduino forum. Are you lost?

No, I am working with arduino and using proteus simulator.

The 30 candles are independent led lights.

Each candle uses one pin from an arduino mega 2560 board.

P.D.: sorry if my english isn't very good.

People may find it difficult to help you, when you don't provide any information?

Maybe you could post you code?

Or the schematic?

Use Google Translate if English is difficult.

1 Like

You will need to post your code so far, and schematic of the circuit before anyone can give any help that's not speculative.

edit, as red_car says :wink:

Sorry, i deleted the post by mistake.

void setup() {
pinMode(22, OUTPUT);
pinMode(23, OUTPUT);
pinMode(24, OUTPUT);
pinMode(25, OUTPUT);
pinMode(26, OUTPUT);
pinMode(27, OUTPUT);
pinMode(28, OUTPUT);
pinMode(29, OUTPUT);
pinMode(30, OUTPUT);
pinMode(31, OUTPUT);
pinMode(32, OUTPUT);
pinMode(33, OUTPUT);
pinMode(34, OUTPUT);
pinMode(35, OUTPUT);
pinMode(36, OUTPUT);
pinMode(37, OUTPUT);
pinMode(38, OUTPUT);
pinMode(39, OUTPUT);
pinMode(40, OUTPUT);
pinMode(41, OUTPUT);
pinMode(42, OUTPUT);
pinMode(43, OUTPUT);
pinMode(44, OUTPUT);
pinMode(45, OUTPUT);
pinMode(46, OUTPUT);
pinMode(47, OUTPUT);
pinMode(48, OUTPUT);
pinMode(49, OUTPUT);
pinMode(50, OUTPUT);
pinMode(51, OUTPUT);
pinMode(52, OUTPUT);
}
class vela {
private:
int posicion;
boolean encendido;
boolean apagarAntes;
boolean perma;
int tiempo;

public:
vela();
void setPosicion(int posicionV) {
posicion = posicionV;
}
int getPosicion(){
return posicion;
}
void setTiempo(int tiempoV) {
tiempo = tiempoV;
}
int getTiempo() {
return tiempo;
}
boolean getEncendido() {
return encendido;
}
boolean setEncendidoPerma() {
encendido = true;
perma = true;
}
boolean setParpadeo() {
int pinSalida= 0;

pinSalida = getPosicion() + 22;


//parpadeo

digitalWrite(pinSalida, HIGH);

delay(500);
digitalWrite(pinSalida, LOW);

delay(500);
digitalWrite(pinSalida, HIGH);

delay(500);
digitalWrite(pinSalida, LOW);

delay(500);
digitalWrite(pinSalida, HIGH);

delay(500);
digitalWrite(pinSalida, LOW);

delay(500);
digitalWrite(pinSalida, HIGH);


boolean arranque() {
//I deleted this for the moment (Not necesary here)
}
};
vela::vela() {
}

vela vela1, vela2, vela3, vela4, vela5, vela6, vela7, vela8, vela9, vela10, vela11, vela12, vela13, vela14, vela15, vela16, vela17, vela18, vela19, vela20, vela21, vela22, vela23, vela24, vela25, vela26, vela27, vela28, vela29, vela30, cancer;
vela perma1, perma2, perma3, perma4, perma5;
vela velas [] = {vela1, vela2, vela3, vela4, vela5, vela6, vela7, vela8, vela9, vela10, vela11, vela12, vela13, vela14, vela15, vela16, vela17, vela18, vela19, vela20, vela21, vela22, vela23, vela24, vela25, vela26, vela27, vela28, vela29, vela30};
int velasEncendidas;
int arrancado = 0;
int contador;
int j;
int contadorPermanentes = 0;
int iniciado = 0;

void loop() {


vela1.setPosicion(1); vela2.setPosicion(2); vela3.setPosicion(3); vela4.setPosicion(4); vela5.setPosicion(5); vela6.setPosicion(6);
vela7.setPosicion(7); vela8.setPosicion(8); vela9.setPosicion(9); vela10.setPosicion(10); vela11.setPosicion(11); vela12.setPosicion(12);
vela13.setPosicion(13); vela14.setPosicion(14); vela15.setPosicion(15); vela16.setPosicion(16); vela17.setPosicion(17); vela18.setPosicion(18);
vela19.setPosicion(19); vela20.setPosicion(20); vela21.setPosicion(21); vela22.setPosicion(22); vela23.setPosicion(23); vela24.setPosicion(24);
vela25.setPosicion(25); vela26.setPosicion(26); vela27.setPosicion(27); vela28.setPosicion(28); vela29.setPosicion(29); vela30.setPosicion(30);




if(arrancado != 1){
vela1.arranque();
arrancado = 1;
}


contadorPermanentes = 0;
do
{
if (velas[contador].getEncendidoPerma() == true) {
contadorPermanentes++;
}
contador++;
} while (contador != 29);
contador = 0;


//Vela permanente 1
if (contadorPermanentes <= 1) {
velasEncendidas = 0;

do
{
if (velas[contador].getEncendido() == true) {
velasEncendidas++;
}
contador++;
} while (contador != 29);

contador = 0;

if (velasEncendidas <= 4 && velasEncendidas <= 5) {
j = (int) random(29);
perma1 = velas[j];

if (perma1.getEncendido() != false) {
do
{
j = (int) random(29);
perma1 = velas[j];
} while (perma1.getEncendido() != false);
velas[j] = perma1;
}
if(perma1.getTiempo() == 0){
perma1.setTiempo(20); perma1.setEncendidoPerma(); perma1.setParpadeo();
}else{
perma1.setTiempo(perma1.getTiempo()-1);
if(perma1.getTiempo() == 0){
perma1.apagar();
}
}
}else {
perma1.apagar();
}
}
//There are other 4 candles like this one, they are just copypaste from here.

The idea is that the candle cannot be lit if there are already a certain number of candles lit, or if it has already been lit before.
Ty for reading again

Please post ALL the code.

The code you posted seems to be missing parts.

The first thing that most helpers will try to do is download your code and try it for themselves... this is not easy if you only post parts of it.

1 Like

Okey ^^

void setup() {
pinMode(22, OUTPUT);
pinMode(23, OUTPUT);
pinMode(24, OUTPUT);
pinMode(25, OUTPUT);
pinMode(26, OUTPUT);
pinMode(27, OUTPUT);
pinMode(28, OUTPUT);
pinMode(29, OUTPUT);
pinMode(30, OUTPUT);
pinMode(31, OUTPUT);
pinMode(32, OUTPUT);
pinMode(33, OUTPUT);
pinMode(34, OUTPUT);
pinMode(35, OUTPUT);
pinMode(36, OUTPUT);
pinMode(37, OUTPUT);
pinMode(38, OUTPUT);
pinMode(39, OUTPUT);
pinMode(40, OUTPUT);
pinMode(41, OUTPUT);
pinMode(42, OUTPUT);
pinMode(43, OUTPUT);
pinMode(44, OUTPUT);
pinMode(45, OUTPUT);
pinMode(46, OUTPUT);
pinMode(47, OUTPUT);
pinMode(48, OUTPUT);
pinMode(49, OUTPUT);
pinMode(50, OUTPUT);
pinMode(51, OUTPUT);
pinMode(52, OUTPUT);
pinMode(53, OUTPUT);
}
class vela {
private:
int posicion;
boolean encendido;
boolean apagarAntes;
boolean perma;
int tiempo;

public:
vela();
void setPosicion(int posicionV) {
posicion = posicionV;
}
int getPosicion(){
return posicion;
}
void setTiempo(int tiempoV) {
tiempo = tiempoV;
}
int getTiempo() {
return tiempo;
}
boolean setEncendido() {
encendido = true;
//enciende
digitalWrite(24, HIGH);
delay(500);
digitalWrite(24, LOW);
delay(500);
//enciende
delay(500);
//apaga
delay(500);
//enciende
delay(500);
//apaga
delay(500);
//enciende
delay(500);
//apaga
delay(500);
//enciende
}
boolean getEncendido() {
return encendido;
}
boolean setEncendidoPerma() {
encendido = true;
perma = true;
}
boolean setParpadeo() {
int pinSalida= 0;

pinSalida = getPosicion() + 22;


//parpadeo

digitalWrite(pinSalida, HIGH);

delay(500);
digitalWrite(pinSalida, LOW);

delay(500);
digitalWrite(pinSalida, HIGH);

delay(500);
digitalWrite(pinSalida, LOW);

delay(500);
digitalWrite(pinSalida, HIGH);

delay(500);
digitalWrite(pinSalida, LOW);

delay(500);
digitalWrite(pinSalida, HIGH);


//Encendida
digitalWrite(pinSalida, HIGH);
}
boolean getEncendidoPerma() {
return perma;
}

boolean apagar() {
int pinSalida = getPosicion() + 22;

digitalWrite(pinSalida, LOW);
perma = false;
encendido = false;
}

boolean arranque() {
//enciende todo
digitalWrite(23, HIGH);
digitalWrite(24, HIGH);
digitalWrite(25, HIGH);
digitalWrite(26, HIGH);
digitalWrite(27, HIGH);
digitalWrite(28, HIGH);
digitalWrite(29, HIGH);
digitalWrite(30, HIGH);
digitalWrite(31, HIGH);
digitalWrite(32, HIGH);
digitalWrite(33, HIGH);
digitalWrite(34, HIGH);
digitalWrite(35, HIGH);
digitalWrite(36, HIGH);
digitalWrite(37, HIGH);
digitalWrite(38, HIGH);
digitalWrite(39, HIGH);
digitalWrite(40, HIGH);
digitalWrite(41, HIGH);
digitalWrite(42, HIGH);
digitalWrite(43, HIGH);
digitalWrite(44, HIGH);
digitalWrite(45, HIGH);
digitalWrite(46, HIGH);
digitalWrite(47, HIGH);
digitalWrite(48, HIGH);
digitalWrite(49, HIGH);
digitalWrite(50, HIGH);
digitalWrite(51, HIGH);
digitalWrite(52, HIGH);

//apaga de una en una
delay(500);
digitalWrite(23, LOW);
delay(500);
digitalWrite(24, LOW);
delay(500);
digitalWrite(25, LOW);
delay(500);
digitalWrite(26, LOW);
delay(500);
digitalWrite(27, LOW);
delay(500);
digitalWrite(28, LOW);
delay(500);
digitalWrite(29, LOW);
delay(500);
digitalWrite(30, LOW);
delay(500);
digitalWrite(31, LOW);
delay(500);
digitalWrite(32, LOW);
delay(500);
digitalWrite(33, LOW);
delay(500);
digitalWrite(34, LOW);
delay(500);
digitalWrite(35, LOW);
delay(500);
digitalWrite(36, LOW);
delay(500);
digitalWrite(37, LOW);
delay(500);
digitalWrite(38, LOW);
delay(500);
digitalWrite(39, LOW);
delay(500);
digitalWrite(40, LOW);
delay(500);
digitalWrite(41, LOW);
delay(500);
digitalWrite(42, LOW);
delay(500);
digitalWrite(43, LOW);
delay(500);
digitalWrite(44, LOW);
delay(500);
digitalWrite(45, LOW);
delay(500);
digitalWrite(46, LOW);
delay(500);
digitalWrite(47, LOW);
delay(500);
digitalWrite(48, LOW);
delay(500);
digitalWrite(49, LOW);
delay(500);
digitalWrite(50, LOW);
delay(500);
digitalWrite(51, LOW);
delay(500);
digitalWrite(52, LOW);
delay(500);

//destello
digitalWrite(22, HIGH);
digitalWrite(23, HIGH);
digitalWrite(24, HIGH);
digitalWrite(25, HIGH);
digitalWrite(26, HIGH);
digitalWrite(27, HIGH);
digitalWrite(28, HIGH);
digitalWrite(29, HIGH);
digitalWrite(30, HIGH);
digitalWrite(31, HIGH);
digitalWrite(32, HIGH);
digitalWrite(33, HIGH);
digitalWrite(34, HIGH);
digitalWrite(35, HIGH);
digitalWrite(36, HIGH);
digitalWrite(37, HIGH);
digitalWrite(38, HIGH);
digitalWrite(39, HIGH);
digitalWrite(40, HIGH);
digitalWrite(41, HIGH);
digitalWrite(42, HIGH);
digitalWrite(43, HIGH);
digitalWrite(44, HIGH);
digitalWrite(45, HIGH);
digitalWrite(46, HIGH);
digitalWrite(47, HIGH);
digitalWrite(48, HIGH);
digitalWrite(49, HIGH);
digitalWrite(50, HIGH);
digitalWrite(51, HIGH);
digitalWrite(52, HIGH);
delay(100);

digitalWrite(23, LOW);
digitalWrite(24, LOW);
digitalWrite(25, LOW);
digitalWrite(26, LOW);
digitalWrite(27, LOW);
digitalWrite(28, LOW);
digitalWrite(29, LOW);
digitalWrite(30, LOW);
digitalWrite(31, LOW);
digitalWrite(32, LOW);
digitalWrite(33, LOW);
digitalWrite(34, LOW);
digitalWrite(35, LOW);
digitalWrite(36, LOW);
digitalWrite(37, LOW);
digitalWrite(38, LOW);
digitalWrite(39, LOW);
digitalWrite(40, LOW);
digitalWrite(41, LOW);
digitalWrite(42, LOW);
digitalWrite(43, LOW);
digitalWrite(44, LOW);
digitalWrite(45, LOW);
digitalWrite(46, LOW);
digitalWrite(47, LOW);
digitalWrite(48, LOW);
digitalWrite(49, LOW);
digitalWrite(50, LOW);
digitalWrite(51, LOW);
digitalWrite(52, LOW);

delay(100);
digitalWrite(22, LOW);
digitalWrite(31, HIGH);
digitalWrite(32, HIGH);
digitalWrite(37, HIGH);
digitalWrite(38, HIGH);
digitalWrite(43, HIGH);
digitalWrite(44, HIGH);

delay(100);

digitalWrite(31, LOW);
digitalWrite(32, LOW);
digitalWrite(37, LOW);
digitalWrite(38, LOW);
digitalWrite(43, LOW);
digitalWrite(44, LOW);
digitalWrite(25, HIGH);
digitalWrite(26, HIGH);
digitalWrite(30, HIGH);
digitalWrite(33, HIGH);
digitalWrite(36, HIGH);
digitalWrite(39, HIGH);
digitalWrite(42, HIGH);
digitalWrite(45, HIGH);
digitalWrite(49, HIGH);
digitalWrite(50, HIGH);

delay(100);

digitalWrite(25, LOW);
digitalWrite(26, LOW);
digitalWrite(30, LOW);
digitalWrite(33, LOW);
digitalWrite(36, LOW);
digitalWrite(39, LOW);
digitalWrite(42, LOW);
digitalWrite(45, LOW);
digitalWrite(49, LOW);
digitalWrite(50, LOW);
digitalWrite(24, HIGH);
digitalWrite(27, HIGH);
digitalWrite(29, HIGH);
digitalWrite(34, HIGH);
digitalWrite(35, HIGH);
digitalWrite(40, HIGH);
digitalWrite(41, HIGH);
digitalWrite(46, HIGH);
digitalWrite(48, HIGH);
digitalWrite(51, HIGH);

delay(100);

digitalWrite(24, LOW);
digitalWrite(27, LOW);
digitalWrite(29, LOW);
digitalWrite(34, LOW);
digitalWrite(35, LOW);
digitalWrite(40, LOW);
digitalWrite(41, LOW);
digitalWrite(46, LOW);
digitalWrite(48, LOW);
digitalWrite(51, LOW);
digitalWrite(23, HIGH);
digitalWrite(28, HIGH);
digitalWrite(47, HIGH);
digitalWrite(52, HIGH);

delay(100);

digitalWrite(22, LOW);
digitalWrite(23, LOW);
digitalWrite(28, LOW);
digitalWrite(47, LOW);
digitalWrite(52, LOW);
}
};
vela::vela() {
}

vela vela1, vela2, vela3, vela4, vela5, vela6, vela7, vela8, vela9, vela10, vela11, vela12, vela13, vela14, vela15, vela16, vela17, vela18, vela19, vela20, vela21, vela22, vela23, vela24, vela25, vela26, vela27, vela28, vela29, vela30, cancer;
vela perma1, perma2, perma3, perma4, perma5;
vela velas [] = {vela1, vela2, vela3, vela4, vela5, vela6, vela7, vela8, vela9, vela10, vela11, vela12, vela13, vela14, vela15, vela16, vela17, vela18, vela19, vela20, vela21, vela22, vela23, vela24, vela25, vela26, vela27, vela28, vela29, vela30};
int velasEncendidas;
int arrancado = 0;
int contador;
int j;
int contadorPermanentes = 0;
int iniciado = 0;

void loop() {


vela1.setPosicion(1); vela2.setPosicion(2); vela3.setPosicion(3); vela4.setPosicion(4); vela5.setPosicion(5); vela6.setPosicion(6);
vela7.setPosicion(7); vela8.setPosicion(8); vela9.setPosicion(9); vela10.setPosicion(10); vela11.setPosicion(11); vela12.setPosicion(12);
vela13.setPosicion(13); vela14.setPosicion(14); vela15.setPosicion(15); vela16.setPosicion(16); vela17.setPosicion(17); vela18.setPosicion(18);
vela19.setPosicion(19); vela20.setPosicion(20); vela21.setPosicion(21); vela22.setPosicion(22); vela23.setPosicion(23); vela24.setPosicion(24);
vela25.setPosicion(25); vela26.setPosicion(26); vela27.setPosicion(27); vela28.setPosicion(28); vela29.setPosicion(29); vela30.setPosicion(30);




if(arrancado != 1){
vela1.arranque();
arrancado = 1;
}


contadorPermanentes = 0;
do
{
if (velas[contador].getEncendidoPerma() == true) {
contadorPermanentes++;
}
contador++;
} while (contador != 29);
contador = 0;


//Vela permanente 1
if (contadorPermanentes <= 1) {
velasEncendidas = 0;

do
{
if (velas[contador].getEncendido() == true) {
velasEncendidas++;
}
contador++;
} while (contador != 29);

contador = 0;

if (velasEncendidas <= 4 && velasEncendidas <= 5) {
j = (int) random(29);
perma1 = velas[j];

if (perma1.getEncendido() != false) {
do
{
j = (int) random(29);
perma1 = velas[j];
} while (perma1.getEncendido() != false);
velas[j] = perma1;
}
if(perma1.getTiempo() == 0){
perma1.setTiempo(20); perma1.setEncendidoPerma(); perma1.setParpadeo();
}else{
perma1.setTiempo(perma1.getTiempo()-1);
if(perma1.getTiempo() == 0){
perma1.apagar();
}
}
}else {
perma1.apagar();
}
}


//Vela permanente 2
if (contadorPermanentes <= 2) {
velasEncendidas = 0;

do
{
if (velas[contador].getEncendido() == true) {
velasEncendidas++;
}
contador++;
} while (contador != 29);

contador = 0;

if (velasEncendidas <= 8 && velasEncendidas <= 9) {
j = (int) random(29);
perma2 = velas[j];

if (perma2.getEncendido() != false) {
do
{
j = (int) random(29);
perma2 = velas[j];
} while (perma2.getEncendido() != false);
velas[j] = perma2;
}
perma2.setTiempo(20); perma2.setEncendidoPerma(); perma2.setParpadeo();
}
}


//Vela permanente 3
if (contadorPermanentes <= 3) {
velasEncendidas = 0;

do
{
if (velas[contador].getEncendido() == true) {
velasEncendidas++;
}
contador++;
} while (contador != 29);

contador = 0;

if (velasEncendidas <= 29 && velasEncendidas <= 31) {
j = (int) random(29);
perma3 = velas[j];

if (perma3.getEncendido() != false) {
do
{
j = (int) random(29);
perma3 = velas[j];
} while (perma3.getEncendido() != false);
velas[j] = perma3;
}
perma3.setTiempo(20); perma3.setEncendidoPerma(); perma3.setParpadeo();
}
}


//Vela permanente 4
if (contadorPermanentes <= 4) {
velasEncendidas = 0;

do
{
if (velas[contador].getEncendido() == true) {
velasEncendidas++;
}
contador++;
} while (contador != 29);

contador = 0;

if (velasEncendidas <= 12 && velasEncendidas <= 13) {
j = (int) random(29);
perma4 = velas[j];

if (perma4.getEncendido() != false) {
do
{
j = (int) random(29);
perma4 = velas[j];
} while (perma4.getEncendido() != false);
velas[j] = perma4;
}
perma4.setTiempo(20); perma4.setEncendidoPerma(); perma4.setParpadeo();
}
}


//Vela permanente 5
if (contadorPermanentes <= 5) {
velasEncendidas = 0;

do
{
if (velas[contador].getEncendido() == true) {
velasEncendidas++;
digitalWrite(53, HIGH);
}
contador++;
} while (contador != 29);



contador = 0;

if (velasEncendidas <= 16 && velasEncendidas <= 17) {
j = (int) random(29);
perma5 = velas[j];

if (perma5.getEncendido() != false) {
do
{
j = (int) random(29);
perma5 = velas[j];
} while (perma5.getEncendido() != false);
}
perma5.setTiempo(20); perma5.setEncendidoPerma(); velas[j] = perma5; perma5.setParpadeo();
}
}
//delay(15000);
}

Not that it's "wrong", and has got nothing to do with the problem, you should look into arrays to simplify the gazillion repeated lines of code.

1 Like

Thanks for posting the code. So when you say...

What does that mean exactly?

Also, as @octopirate says... you could simplify your code a lot by using arrays.

You program is quite complicated. Are you able to create a small sketch that shows us the problem you are having?

What I mean by that is that I give the value of "encendido (on)" to a candle, but then, when counting them, they all appear as off, that is, the "setEncendido (setOn)" has not been applied to them (That's what I think).

And, forgive my ignorance, but what do you mean by a small sketch? :sweat_smile:

A small program, that shows the problem you are having.

Remove all the other stuff that is not relevant.

Okey, i'm on it. :+1:

What can sometimes happen when constructing such a small sketch is that you solve the problem along the way. At that point you might get a lightbulb :bulb: (or a candle :candle: haha) and realise what it was that you just did that related to the cause.

that's the plan :slight_smile:

I didn't solve the problem :c

I made this sketch and in short, the boolean values ​​of the "setters", do not set anything, neither here nor in the main program

It's supposed to only light five candles during the allotted time, but what it does is turn them all on

it's still a very long code, but it's because candles 2, 3, 4 and 5 are a copypaste from candle 1

void setup() {
  int candles [] = {22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52};
pinMode(candles, OUTPUT);
}
class vela {
  private:
    int posicion;
    boolean encendido;
    boolean perma;
    int tiempo;

  public:
    vela();
    void setTiempo(int tiempoV) {
      tiempo = tiempoV;
    }
    int getTiempo(){
      return tiempo;
    }
    void setPosicion(int posicionV) {
      posicion = posicionV;
    }
    int getPosicion(){
      return posicion;
      }
    boolean getEncendido() {
      return encendido;
    }
    boolean setEncendidoPerma() {
      encendido = true;
      perma = true;
      }    
    boolean setParpadeo() { //This is a sketch so it's not blinking here
      int pinSalida= 0;

      pinSalida = getPosicion() + 22;
        
        digitalWrite(pinSalida, HIGH);
    }
    boolean getEncendidoPerma() {
      return perma;
    }

    boolean apagar() {
      int pinSalida = getPosicion() + 22;

      digitalWrite(pinSalida, LOW);
      
      perma = false;
      encendido = false;
      }
};
vela::vela() {
}

vela vela1, vela2, vela3, vela4, vela5, vela6, vela7, vela8, vela9, vela10, vela11, vela12, vela13, vela14, vela15, vela16, vela17, vela18, vela19, vela20, vela21, vela22, vela23, vela24, vela25, vela26, vela27, vela28, vela29, vela30, cancer;
vela perma1, perma2, perma3, perma4, perma5;
int velasEncendidas;
int contador;
int j;
int contadorPermanentes;

void loop() {

  //setting positions to the 30 candles
  
    vela1.setPosicion(1);   vela2.setPosicion(2);   vela3.setPosicion(3);   vela4.setPosicion(4);   vela5.setPosicion(5);   vela6.setPosicion(6);
    vela7.setPosicion(7);   vela8.setPosicion(8);   vela9.setPosicion(9); vela10.setPosicion(10); vela11.setPosicion(11); vela12.setPosicion(12);
  vela13.setPosicion(13); vela14.setPosicion(14); vela15.setPosicion(15); vela16.setPosicion(16); vela17.setPosicion(17); vela18.setPosicion(18);
  vela19.setPosicion(19); vela20.setPosicion(20); vela21.setPosicion(21); vela22.setPosicion(22); vela23.setPosicion(23); vela24.setPosicion(24);
  vela25.setPosicion(25); vela26.setPosicion(26); vela27.setPosicion(27); vela28.setPosicion(28); vela29.setPosicion(29); vela30.setPosicion(30);

vela velas [] = {vela1, vela2, vela3, vela4, vela5, vela6, vela7, vela8, vela9, vela10, vela11, vela12, vela13, vela14, vela15, vela16, vela17, vela18, vela19, vela20, vela21, vela22, vela23, vela24, vela25, vela26, vela27, vela28, vela29, vela30};
 
 //Counting the perms
  contadorPermanentes = 0;
do
  {
    if (velas[contador].getEncendidoPerma() == true) {
      contadorPermanentes++;
    }
    contador++;
  } while (contador != 29);
  contador = 0;



//Perm candle 1
  if (contadorPermanentes <= 1) { //contadorPermanentes must be 1 or 0
    velasEncendidas = 0;
    do
    {
      if (velas[contador].getEncendido() == true) {
        velasEncendidas++; //if there is a lit candle
      }
      contador++;
    } while (contador != 29);

    contador = 0;

    if (velasEncendidas <= 4 && velasEncendidas <= 5) { //if the amount of lits candles is <=4 and <=5
      j = (int) random(29);
      perma1 = velas[j];

      if (perma1.getEncendido() != false) { //if the selected candle is already lit, select another
        do
        {
          j = (int) random(29);
          perma1 = velas[j];
        } while (perma1.getEncendido() != false);
        velas[j] = perma1;
      }
      if(perma1.getTiempo() == 0){ //Checking if it's on
      perma1.setTiempo(20); perma1.setEncendidoPerma(); perma1.setParpadeo(); //setOn
        }else{
          perma1.setTiempo(perma1.getTiempo()-1); //if it's already on, time-1
          if(perma1.getTiempo() == 0){ //when the time goes 0, the candle go off
            perma1.apagar();
            }
          }
    }else { //Here, if the amount of candles reaches 4 and 5, we turn off the candle
      perma1.apagar();
      }
  }
//The same goes to the other 4 candles (They are literally the code just changing the variable perma1 to perma2, perma3, perma4, perma5)


  //Vela permanente 2
  if (contadorPermanentes <= 2) {
    velasEncendidas = 0;

    do
    {
      if (velas[contador].getEncendido() == true) {
        velasEncendidas++;
      }
      contador++;
    } while (contador != 29);

    contador = 0;

    if (velasEncendidas <= 8 && velasEncendidas <= 9) {
      j = (int) random(29);
      perma2 = velas[j];

      if (perma2.getEncendido() != false) {
        do
        {
          j = (int) random(29);
          perma2 = velas[j];
        } while (perma2.getEncendido() != false);
        velas[j] = perma2;
      }
      perma2.setTiempo(20); perma2.setEncendidoPerma(); perma2.setParpadeo();
    }
  }


  //Vela permanente 3
  if (contadorPermanentes <= 3) {
    velasEncendidas = 0;

    do
    {
      if (velas[contador].getEncendido() == true) {
        velasEncendidas++;
      }
      contador++;
    } while (contador != 29);

    contador = 0;

    if (velasEncendidas <= 29 && velasEncendidas <= 31) {
      j = (int) random(29);
      perma3 = velas[j];

      if (perma3.getEncendido() != false) {
        do
        {
          j = (int) random(29);
          perma3 = velas[j];
        } while (perma3.getEncendido() != false);
        velas[j] = perma3;
      }
      perma3.setTiempo(20); perma3.setEncendidoPerma(); perma3.setParpadeo();
    }
  }


  //Vela permanente 4
  if (contadorPermanentes <= 4) {
    velasEncendidas = 0;

    do
    {
      if (velas[contador].getEncendido() == true) {
        velasEncendidas++;
      }
      contador++;
    } while (contador != 29);

    contador = 0;

    if (velasEncendidas <= 12 && velasEncendidas <= 13) {
      j = (int) random(29);
      perma4 = velas[j];

      if (perma4.getEncendido() != false) {
        do
        {
          j = (int) random(29);
          perma4 = velas[j];
        } while (perma4.getEncendido() != false);
        velas[j] = perma4;
      }
      perma4.setTiempo(20); perma4.setEncendidoPerma(); perma4.setParpadeo();
    }
  }

 
  //Vela permanente 5
  if (contadorPermanentes <= 5) {
    velasEncendidas = 0;

    do
    {
      if (velas[contador].getEncendido() == true) {
        velasEncendidas++;
      }
      contador++;
    } while (contador != 29);

    
    
    contador = 0;

    if (velasEncendidas <= 16 && velasEncendidas <= 17) {
      j = (int) random(29);
      perma5 = velas[j];

      if (perma5.getEncendido() != false) {
        do
        {
          j = (int) random(29);
          perma5 = velas[j];
        } while (perma5.getEncendido() != false);
      }
      perma5.setTiempo(20); perma5.setEncendidoPerma(); velas[j] = perma5; perma5.setParpadeo();
    }
  }
}

Why don't you start with 2 candles?

i'll try, give me a sec

I am strongly resisting the urge to post a link to a certain Two Ronnies sketch

1 Like
void setup() 
{
  int candles [] = {22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52};
  pinMode(candles, OUTPUT);
}

This code does not set the pinMode of every pin... you are passing a pointer to an array of ints, to something that is expecting an int.