la idea es contar con algun artilugio para ahorrar codigo y no tener que escribir los 12 codigos , si no que al poner que el modulo n es el 3 por ejemplo , que todo el entorno de variables se transforme al 3 :(
MOD_1 -> 0x200
i_1 -> 0x201
j_1-> 0x202
k_1-> 0x203
MOD_2 ->0x204
i_2 ->0x205
j_2 ->0x206
k_2 ->0x207
... y sucesivamente...
Luego seria simplemente (suponiendo que mod es una variable puntero), llamar a i_n mediante "*(mod+1)",j_n mediante "*(mod+2)" y k_n mediante "*(mod+3)". Si cambias el valor de mod, incrementando en cuatro (200,204,...) estarias cambiando de juego de variables, si te das cuenta.int i;
int control[12][2]; //Digo 2 porque supongo que quieres almacenar tempartura y número de luces encendidas
// Después dependiendo de que modulo sea con la variable i lo cambiarías.
// Por ejemplo, para acceder a la temperatura del módulo 3 podrías hacer:
i = 2; // Los vectores empiezan en 0
control[i][0]; //Para leer o escribir en ella.
int i, j;
int control[12][6]; //Suponemos que vas a guardar temperatura y 5 luces distintas para cada módulo.
// Para encender o apagar una luz, sería tan fácil como:
i = #numero de módulo;
j = #número de luz; //Fíjate que ahora no tienes que poner el (numero de luz-1), ya que en la posicion 0 está la temperatura.
//Puedes poner la luz directamente, si fuera para la luz numero 3, pondrías j = 3
control[i][j]; //Para activar o desactivar la luz escogida
Para lo que dices, que no es tan raro, necesitas hacer uso de los punteros...
te dejo un link para que aprendas a usarlos...
http://www.lugro.org.ar/biblioteca/cursos/cursoc/Punteros.pdf