Zapatilla electrica programable via WIFI ("algun consejo?")

Hola! Les comento: estoy automatizando un zapatilla electrica, con una serie de relés, conectados al arduino y un modulo de wifi.
Dicha zaptilla, tiene ciertos componentes fijos que se conectan (los cuales pueden variar el orden, y la cantidad. Pero no pueden ir otros diferentes, solo luz, ventiladores, humificadores, y nada mas).
Y yo enciendo dichos componentes, según la temperatura que hace, según la hora que es, según la humedad que está haciendo.

Como yo quiero vender este proyecto, se pueden modificar las salidas de la zapatilla, según los componentes que cada uno tenga en su casa.
Osea que se tiene que adaptar ya siendo que uno tenga 6 ventiladores y 1 luz, o tenga 3 luces, 2 ventialdores y 1 humificador.
Por lo tanto, se tiene que poder modificar la información de las salidas de las zapatillas, según lo que nosotros conectemos.
Hasta ahi todo bien. Yo lo que hice fue lo siguiente, llame a cada salida de la zapatilla, con un nombre "zz1,zz2,zz3,zzn...". Luego cree variables, las cuales contienen la información sobre que dispositivo esta colocado en cada enchufe. Cada número, corresponde a un componente diferente.

//Creando variables de los reles de cada toma de zapatilla//
int zz1=3;
int zz2=4;
int zz3=5;
int zz4=6;
int zz5=7;
int zz6=8;
int zz7=9;
int zz8=10;
//Informacion de saldias de zapatilas
//0=nada
//1=luces
//2=ventilador
//3=humificador
byte z1=0;
byte z2=0;
byte z3=0;
byte z4=0;
byte z5=0;
byte z6=0;
byte z7=0;
byte z8=0;

Hasta ahí, todo bien, todo muy bonito. El problema es el siguiente: el programa esta diseñado, para que cuando llegue a 26°C se prendan todos los ventiladores.
Ahora, luego de toda esta introducción viene la pregunta.
¿Como identifica el código cuales son ventiladores, y los prende? Sin hacer una serie interminable de if.

Algo asi se me había ocurrido, pero me di cuenta que una serie interminable de if no es la solución, sumado a que va a conllevar problemas en la programacion.

//Salidas de los compoentes aclimatizadores//
int zz1=3;
int zz2=4;
int zz3=5;
int zz4=6;
int zz5=7;
int zz6=8;
int zz7=9;
int zz8=10;
//Salidas de zapatillas
//0=nada
//1=luces
//2=ventilador
//3=humificador
byte z1=0;
byte z2=0;
byte z3=0;
byte z4=0;
byte z5=0;
byte z6=0;
byte z7=0;
byte z8=0;

void setup() 
{
pinMode(zz1,OUTPUT);
pinMode(zz2,OUTPUT);
pinMode(zz3,OUTPUT);
pinMode(zz4,OUTPUT);
pinMode(zz5,OUTPUT);
pinMode(zz6,OUTPUT);
pinMode(zz7,OUTPUT);
pinMode(zz8,OUTPUT);
}

void loop(){
//ATENCION: acá falta la parte en al que le coloco la informacion (0,1,2,3), a cada z (z1,z2,z3,z4,zn...)
if (t>26){
  if (z1==2){
    digitalWrite(zz1,LOW);
  }
    if(z2==2){
    digitalWrite(zz2,LOW);
  }
    if(z3==2){
    digitalWrite(zz3,LOW);
  }
    if (zn==2){
  }
}

}

Yo veo un problema. Siempre tendras que modificar un sketch para alterar la organizacion de la zapatilla.
Si para ti esta bien, yo creo que comercialmente eso no tiene mucho sentido y en cuanto este este disponible te lo copia todo el mundo.

Tendrías que agregar algun elemento para configurarlo, sea USB o sea LCD lo que implicaría un teclado.
La formas mas fáciles serían : USB y un programa fácil para determinar salida y dispositivo a controlar o
un sistema WEB que permita hacerlo con una aplicación desde el movil.

No se si coincides?

Puedes utilizar arrays. Uno para los pines y otro para el tipo. Incluso más, si quieres controlar otros parámetros como, por ejemplo, a qué nivel está encendido (HIGH/LOW). A modo de ejemplo, aquí tienes esto:

const int NUM_SALIDAS = 8; // Cantidad total de salidas

//Salidas de los compoentes aclimatizadores//
int zz[NUM_SALIDAS] = {3, 4, 5, 6, 7, 8, 9, 10};
//Informacion de saldias de zapatilas
//0=nada
//1=luces
//2=ventilador
//3=humificador
byte z[NUM_SALIDAS] = {0, 1, 2, 3, 2, 1, 0, 3}; // datos sólo de ejemplo

void setup() 
{
  for (int i = 0; i < NUM_SALIDAS; i++) { // Recorremos todas las posibles salidas
    if (z[i] != 0) { // Si tiene algo conectado
      pinMode(zz[i], OUTPUT); // Configuramos el pin comosalida
    }
  }
}

void loop(){
//ATENCION: acá falta la parte en al que le coloco la informacion (0,1,2,3), a cada z (z1,z2,z3,z4,zn...)
if (t > 26) {
  for (int i = 0; i < NUM_SALIDAS; i++) { // Recorremos todas las posibles salidas
    if (z[i] == 2) { // Si tiene conectado un ventilador
      digitalWrite(zz[1], LOW); // Accionamos el ventilador
    }
  }
}

De hecho pensé que lo había aclarado. Estos datos son modificados con una app desde el celular.
Este es un ejemplo de la interfaz de la selección e los componentes.


Voy a intentar eso de los Array y voy a ver como queda. El ÚNICO problema sería el como modificar lo que está dentro del array (0,1,2,3,2,1,0,3).

byte z[NUM_SALIDAS] = {0, 1, 2, 3, 2, 1, 0, 3}; // datos sólo de ejemplo

Ya que se tienen que cambiar según los componentes de casa usuario.

Algo no cierra en tu comentario.
La App debe estar de algun modo conectada con la zapatilla para su configuración y no veo nada que los comunique en tu sketch.
Si no comunicas, que cambies algo en la app no será observado por la aplicación en el arduino + wifi.

Te falta trabajo ahi!!

De hecho en tu primer post dices

Les comento: estoy automatizando un zapatilla electrica, con una serie de relés, conectados al arduino y un modulo de wifi.

No dices nada de la App pero no importa.
Vuelvo al punto central.
Todo debes manejarlo desde tu Arduino mas WIFI, crear un AP que permita conectarte desde el smart y entonces hacer la configuración.

Lo que muestras no va en ese sentido.

En el caso del ejemplo los arrays son de 8 elementos, y se hace referencia a cada elemento mediante su índice, que en este caso van del 0 al 7 (el índice del primer elemento siempre es cero). Así que si se quiere cambiar el valor del primer elemento por un 2 y el quinto elemento por un 1, basta con hacer:

z[0] = 2;
z[4] = 1;

Busca tutoriales del manejo de arrays en C++.

Hola:

¿Estas variables que haz indicado son fijas o la vas a cambiar más adelante enprogramacion?

//Creando variables de los reles de cada toma de zapatilla//
int zz1=3;
int zz2=4;
int zz3=5;
int zz4=6;
int zz5=7;
int zz6=8;
int zz7=9;
int zz8=10;

Si son fijas, déjala constantes, así no hay accidentes de que varíen y haga comportamientos no deseados.

//Creando variables de los reles de cada toma de zapatilla//
const int zz1=3;
const int zz2=4;
const int zz3=5;
const int zz4=6;
const int zz5=7;
const int zz6=8;
const int zz7=9;
const int zz8=10;

¿Qué entorno de desarrollo o IDE usas para programar Android?

Saludos.

No pueden ser fijas, si esta hablando que las cambiará con la APP en Android.

Lo que yo le digo es que use por ejemplo un MKR1000 o un Nodemcu, lo ponga como AP, cree la pagina web que muestra y entonces tiene todo resuelto.

No veo aún como lo quiere comunicar.

surbyte:
La App debe estar de algun modo conectada con la zapatilla para su configuración y no veo nada que los comunique en tu sketch.

Si, de hecho estoy trabajando en esa parte, va a ser con un modulo de wifi y una app que estoy desarrollando. Igual la duda viene a otra parte del programa. "Como denomino un nombre a cada toma?" Que ya me la estan solucionando. Luego el conectar con el servidor la ap y el arduino, será algo a investigar y solucionar a futuro.

IgnoranteAbsoluto:
basta con hacer:

z[0] = 2;

z[4] = 1;

Voy a poner eso en practica y aviso como va. Muchas gracias!

surbyte:
No pueden ser fijas, si esta hablando que las cambiará con la APP en Android.

Exactamente.
Voy a ponerme a investigar sobre esto MKR1000 o Nodemcu, para ver como lo hago para conectar.

Si la app es sólo para configurar, creo que se puede comunicar vía Bluetooth y guardar la configuración en la EEPROM del Arduino. Al encender se carga la configuración en los arrays que se precisen.

El array de pines creo que ha de ser siempre el mismo, así que se puede declarar como constante:

//Salidas de los compoentes aclimatizadores//
const int zz[NUM_SALIDAS] = {3, 4, 5, 6, 7, 8, 9, 10};

Mientras que el otro array sí que es variable y se carga de la EEPROM.