Mas cuestiones para echarle un ojo (o los dos 0_o).
Lo mas típico es basar nuestros programas en el uso de los tipos de datos básicos que
trae implementados el compilador.Son los tipos simples: int,char,short,long,float,enum,etc...
Lo bueno es que a partir de estos tipos predefinidos,el usuario puede crear sus propias
estructuras de datos (tipos definidos por el usuario) para hacer más ordenado y sencillo
el manejo de datos a escalas mayores.
Imaginemos que tenemos 5 sensores de temperatura conectados al micro,cada uno a una entrada
analógica.Para procesar la información recogida por estos sensores tendríamos que usar una
variable para cada uno de ellos y trabajar con estas variables de manera individual.
Sin embargo,es posible definir un tipo creado por nosotros,del cual podremos crear
una única variable en cualquier parte del código que pueda contener los 5 datos de los 5
sensores en cada momento.Podría ser una cosa así:
Codigo:
///////////////////////////////////// PREPROCESADO ////////////////////////////////////
#include <16F876.h>
#use delay(clock=10000000)
#fuses HS,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT
#define use_portb_lcd TRUE
#include "lcd.c"
////////////////////////////////////// CONSTANTES /////////////////////////////////////
const unsigned int NUM_SENSORES = 5;
//////////////////////////////////////// TIPOS ////////////////////////////////////////
typedef int Tsensores[NUM_SENSORES];
// Esto es un array de 5 enteros(int es el tipo base).Puede albergar,pues eso,5 valores
// individuales comprendidos entre 0-255.
// Tsensores es el nombre que le hemos puesto al tipo,la T se suele poner para
// tener constancia,por si lo vemos en alguna parte del código,de que se trata de un
// tipo definido de usuario.
///////////////////////////////////// CABECERAS ///////////////////////////////////////
int temperatura(int canal);
/////////////////////////////////////// RUTINAS ///////////////////////////////////////
int temperatura(int canal)
{
// Esta rutina se supone que captura un valor en el canal adc que indique el
// parámetro canal (0,1,2,3 ó 4),lo procesa y devuelve un valor de temperatura.
int valor;
// blablabla...
return(valor);
}
////////////////////////////////////// PRINCIPAL //////////////////////////////////////
void main()
{
int j;
Tsensores sensores; // Array de 5 posiciones,cada posición es un entero.
// La forma de acceder a cada uno de los elementos del array es usando su número de
// orden (índice) dentro de él.
// No olvidar que el primer elemento de un array tiene SIEMPRE índice 0.
// Si el array tiene dimensión 5 -> primer elemento,índice 0
// -> último elemento,índice 4
for(j = 0; j <= 4; j++) // Vamos a poner todos los valores a 0
{
sensores[j] = 0; // Así se accede al elemento de un array,mediante su índice.
}
j = 0; // Después del for,el valor de j es indeterminado,así que
// la ponemos a 0 para afrontar el siguiente bucle.
while(j < 5) // Bucle infinito
{
// Capturamos la temperatura de todos los sensores continuamente,con un intervalo
// de tiempo de un segundo entre sensor y sensor.
// Se ve la correspondencia entre el número del canal y la posición dentro del array.
sensores[j] = temperatura(j);
delay_ms(1000);
j++;
if(j==5) // Cuando j=5,la ponemos otra vez a 0 para no salir del bucle y empezar de nuevo
{
j = 0;
}
}
}
El tipo base de un array puede ser cualquier tipo(int,char,boolean,array...).
Los arrays pueden ser multidimensionales,como por ejemplo...
typedef BOOLEAN Tmatriz[4][4]
...que es un tipo array bidimensional que contendrá 16 variables booleanas,y que puede servir por ejemplo para manejar una matriz de leds de 4x4.
Como comentario,hacer alusión al tipo "string",el cual no es más que un tipo array cuyo
tipo base es char.