Le expongo el problema: intento resolver un problema de arrays, tengo un programa realizado en OOP (prog.orientada a objeto) de la cual tiene una clase llamada luces, lo que quiero es hacer un array de pines de arduino y configurarlos como salidas, (en vez de hacerlo pin por pin, he preferido hacerlo con un bucle for).
Lo que yo no entiendo es como hacer esto con arrays ya que me quiero evitar hacerlo pin por pin
Agradecería todo tipo de ayuda =)
//------CLASE PARA LUCES----------------------------------------------------------------------------
class luces{
int pines[5]; //array para 5 elementos
int i; //variable para el for
public:
luces(int ledPines[]){
for(i=0; i<sizeof(pines); i++){ //se configuran los pines como salida
pinMode(pines[i],OUTPUT);
}
}//end constructor
void prueba(){ //metodo para pobrar si se enciende los leds
for(i=0; i<5; i++){
digitalWrite(pines[i],HIGH);
Serial.println(pines[i]);
}
}//end prueba
};//end class
//---------------------------------------------------------------------------------------------------------------------
int MyPines[] = {5,6,7,8,9}; //declaro lo que hay dentro del array
luces luz(MyPines); //creo objeto con el array
void setup(){
Serial.begin(9600);
}
void loop(){
luz.prueba();
}
Crear el array pero de tipo byte.
Calcular en tamaño de esta manera:
sizeof(pines) / sizeof(int)
sizeof por sí solo retorna la cantidad de bytes que ocupa algo. En el caso de arrays, este resultado depende de tanto la capacidad en cantidad de elementos, como del tamaño del tipo de dato.
Creo que el problema radica en que ni siquiera almacenas el parámetro del constructor al atributo de la clase.
luces(int ledPines[]){
pines = ledPines; // <---- esto faltaba.
for(i=0; i<sizeof(pines); i++){ //se configuran los pines como salida
pinMode(pines[i],OUTPUT);
}
}//end constructor
Si no me equivoco, el array que le pases por parámetro puede ser de un tamaño arbitrario; por lo tanto, si le pasas uno de menos de 5 elementos, pueden haber problemas por el simple hecho de asumir que el tamaño siempre será de 5.
Hola.
Veo que han respondido mientras escribía, y además en sentido similar. No obstante, yo asignaría valores.
Creo que lo que ocurre es que se te ha olvidado asignar en el constructor los pines recibidos:
public:
luces(int ledPines[]){
for(i=0; i<5; i++){ //se configuran los pines como salida
pines[i]=ledPines[i]; // Esto es lo que creo que falta
pinMode(pines[i],OUTPUT);
}
}//end constructor