TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Kamus23 en 03 de Julio de 2011, 20:07:43

Título: se puede hacer un array con float
Publicado por: Kamus23 en 03 de Julio de 2011, 20:07:43
jejejeje en verdad nose si esto lo puedo hacer o no... pero me esta dando problemas.. es algo asi... cada vez q alla un pulso alto en el pin RC2 entonces leo el valor del ADC, y lo guardo en una array o vector...

luego cuando desactivo el PIN RC0 entonces en la LCD deberia ver los diferentes valores de ADC que e guardado

Código: [Seleccionar]
#include <16f873A.h>       //PIC A USAR
#fuses XT,NOWDT,NOPROTECT,NOLVP
#device adc=10              //Usa resolución de 8 bits
#include <math.h>          //PARA OPERACIONES MATEMATICAS
#include <string.h>        // para cadenas y otras cosas
#use delay(clock=20000000)     //CRISTAL A UTILIZAR
#use standard_io(b)
#define use_portb_lcd //selecciono puerto b para el LCD
#include <LCD.c>           //CONTROLADOR DEL LCD
//#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) //configurar el puerto serial
#define inicio PIN_C0
#define valvula PIN_C1
#define pulso PIN_C2
int16 temp1;
float temp;
char n;
float temporal[]="";

void main()
{
set_tris_c(0x05);// 00000101
// VARIABLES A USAR
output_c(0);
n=0;
lcd_init();                       //INICIALIZA EL LCD
lcd_putc(" CONTROL VOLTAJE"); //IMPRIME EN PANTALLA
lcd_gotoxy(7,2);                  //COLOCA EL CURSOR EN COLUMNA 7 FILA 2
lcd_putc("ON - OFF");             //IMPRIME EN PANTALLA
delay_ms(1000);                   //ESPERA 5 SEGUNDOS
lcd_putc("\f");                   //LIMPIA PANTALLA
inicio1:
  while(input(inicio)){
  
   setup_adc(ADC_CLOCK_INTERNAL);
      setup_adc_ports(RA0_RA1_ANALOG_RA3_REF);// INDICA RA0 Y RA1 ANALOGO CON REFERENCIA A RA3
     // Setup_adc_ports(RA0_ANALOG_RA3_REF);          //PONE PUERTO RA0 ANALOGO
      set_adc_channel(0);                   // INDICA EL PIN A LEER RA0
      delay_us(20);      
  if (input(pulso)){
      n=n+1;
      temp1=read_adc();                     //LEE EL VALOR DEL PIN
      temp=(0.002929 *temp1);
      temporal[n]=temp;
       lcd_gotoxy(1,1);                      //COLOCA EL CURSOR EN COLUMNA 1 FILA 1
      lcd_putc("VOLTAJE...");    //IMPRIME EN PANTALLA                                        
      lcd_gotoxy(4,2);                      //COLOCA EL CURSOR EN COLUMNA 4 FILA 2
      printf(lcd_putc," T=%f C",temp);  //MUESTRA EN EL LCD EL VALOR DE TEMPERATURA
      delay_ms (1);
      
 }
 }goto inicio2;
  
  inicio2:
  
do{
  n=n-1;
  lcd_gotoxy(4,2);  
  printf(lcd_putc," T=%f C",temporal[n]);  //MUESTRA EN EL LCD EL VALOR DE TEMPERATURA
  delay_ms(2000);
  }while(n>0);
 }
  
  

PD: busque y busque en google y en el foro  :mrgreen: :mrgreen: pero no consigue mucha info
Título: Re: se puede hacer un array con float
Publicado por: Suky en 03 de Julio de 2011, 22:26:47
Si se puede crear, pero hay que definir su tamaño. O sea float Valores[10].


Saludos!
Título: Re: se puede hacer un array con float
Publicado por: Kamus23 en 04 de Julio de 2011, 23:11:34
osea que ajuro tengo q definir su tamaño?? lastima... bueno jejej gracias entonces sera asi...
Título: Re: se puede hacer un array con float
Publicado por: gera en 04 de Julio de 2011, 23:32:33
El tipo de inicializacion q usaste solo es valido para arreglos de chars (strings). Podes hacer un array de float como dijo suky, o si lo queres hacer de forma dinamica, podes usar la funcion malloc.
Código: [Seleccionar]
#include <stdlibm.h>
...
...
float *temporal;
temporal=malloc(10*sizeof(float));
Podes cambiar ese 10 por cualquier valor, inclusive una variable. Despues si queres liberar ese espacio de memoria, lo podes hacer con free()
saludos!!