Autor Tema: guardar datos en un vector  (Leído 5503 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado gio013

  • PIC10
  • *
  • Mensajes: 27
guardar datos en un vector
« en: 19 de Septiembre de 2009, 16:36:48 »
olas olas

el problema es el siguiente, debo programar una calculadora con un pic 18f2550, un pad de 4x4 y un lcd y un solo pin del pic(lo utilizare de forma análoga), cada botón de pad me dará un voltaje diferente,con eso identifico cual numero es;necesito guardar estos datos en un vector pero todavía no consigo y de =manera no lo he dado para imprimir
dejo lo que llevo.
hasta ahora no hace nada a no ser de que llegue el valor analogo de 735 y pues no entiendo por que no obedece a el  if(i==8) break; espero pronta ayuda

Código: [Seleccionar]
#include<18f2550.h>
#device adc=10
#use delay(clock=4000000)
#fuses xt,put,mclr,nolvp,nobrownout,PROTECT,nowdt
#define use_portb_lcd TRUE
#include<lcd.c>

float Vector1[8];
float Vector2[8];
float tecla;
int i;

void main()
     {
        lcd_init();
        lcd_putc("por favor digite en el teclado \n en el teclado\f");

        setup_adc_ports(an0);//configurar entrada analoga
        setup_adc(ADC_CLOCK_INTERNAl);//fosc inter adc

       while (true)
             {
              set_adc_channel(0);
              delay_us(1);
              tecla=read_adc();
              if(tecla>0)
                {
                 vector1[i]=tecla;
                 i=i++;           
                 delay_us(1);
                 if(i==8) break;
                 if (tecla==735)
                    {
                     printf(lcd_putc,"%1.1f ",vector1[i]);
                    }
                }
             
             
                 }

     }




Desconectado fabianjsm

  • PIC18
  • ****
  • Mensajes: 255
    • fabianjsm is on twitter
Re: guardar datos en un vector
« Respuesta #1 en: 19 de Septiembre de 2009, 19:10:35 »
Hay varios detalles por corregir en el codigo.
El operador '++' utilizado en forma postfija incrementa la variable y te devuelve el valor que poseia antes de ser incrementado, por eso el resultado de 'i=i++' es nulo, como si incrementaras la variable pero luego asignaras el mismo valor que tenia al inicio; lo correcto seria simplemente 'i++' o 'i=i+1'. Tampoco estas inicializando el valor de la variable, es decir, no sabes cuanto vale! tienes que asignarle cero antes de entrar al while.
El argumento esperado por el modificador  '%f' de printf es un float, no un string o vector de caracteres.
Despues de corregir esto nos dices en que cambia.
« Última modificación: 19 de Septiembre de 2009, 19:14:35 por fabianjm »
@fabianjsm is on twitter

Desconectado gio013

  • PIC10
  • *
  • Mensajes: 27
Re: guardar datos en un vector
« Respuesta #2 en: 19 de Septiembre de 2009, 21:00:40 »
esto cada vez va peor :S

el modificador para el vector es %S o %D
asi fue como modifique el código pero algo sigue muy mal ahora solo escribe  1 2 3 4 5 6 cada vez que pasa por los if (como si los ignorara) y cuando le envió a escribir el vector solo escribe 0  y ni siquiera aparece los 8 ceros :S.
ya me esta sacando canas


Código: [Seleccionar]
#include<18f2550.h>
#device adc=10
#use delay(clock=4000000)
#fuses xt,put,mclr,nolvp,nobrownout,PROTECT,nowdt
#define use_portb_lcd TRUE
#include<lcd.c>

int Vector1[8];
int Vector2[8];
int tecla;
int i;

void main()
     {
        lcd_init();
        lcd_putc("por  \n \f");

        setup_adc_ports(an0);//configurar entrada analoga
        setup_adc(ADC_CLOCK_INTERNAl);//fosc inter adc
i=0;
       while (true)
             {
              set_adc_channel(0);// selecciono canal 0,este se mira en la libreria del micro
              delay_us(1);
              tecla=read_adc();
              if(tecla=367)               
                {
                 vector1[i]=1;
                  lcd_gotoxy(1,1);           
                 printf(lcd_putc,"%d",vector1[i]);
                }
              if(tecla=519)               
                {
                 vector1[i]=2;
                 lcd_gotoxy(1,1);             
                 printf(lcd_putc,"%d",vector1[i]);
                }
              if(tecla=623)
                {
                 vector1[i]=3;
                 lcd_gotoxy(1,1);               
                 printf(lcd_putc,"%d",vector1[i]);
                }   
              if(tecla=327)               
                {
                 vector1[i]=4;
                 lcd_gotoxy(1,1);             
                 printf(lcd_putc,"%d",vector1[i]);
                }
              if(tecla=495)               
                {
                 vector1[i]=5;               
                 lcd_gotoxy(1,1);
                printf(lcd_putc,"%d",vector1[i]);
                }               
              if(tecla=608)               
                {
                 vector1[i]=6;               
                 lcd_gotoxy(1,1);
                 printf(lcd_putc,"%d",vector1[i]);
                }

                               
                 delay_ms(10);
                 
                 i++;
             
                 if(i=8)                                     
                 lcd_gotoxy(1,2);
                 printf(lcd_putc,"%d ",vector1[i]);
                 delay_ms(10)   ;
               
                }


                 }

Desconectado fabianjsm

  • PIC18
  • ****
  • Mensajes: 255
    • fabianjsm is on twitter
Re: guardar datos en un vector
« Respuesta #3 en: 20 de Septiembre de 2009, 07:43:52 »
La expresion de evaluacion que pusiste en el if es de asignacion, no de comparacion... es como si piensas en C pero programas en BASIC (que no se malentienda, me refiero a que en BASIC el signo de comparacion y el de asignacion son los mismos, el '=').
Me parece que donde pusiste if(i=8) pensabas poner if(i==8).

Una sugerencia: Las 6 apariciones de lcd_gotoxy(1,1); seguido por printf(lcd_putc,"%d",vector1); podrian estar al final de todos los if para que el codigo sea más pequeño, luego todos los if podrian reemplazarce por un switch. Mas allá del ahorro de memoria al que te conduce, es dificil ayudar cuando se postean codigos largos!

Código: C
  1. do {
  2.         set_adc_channel(0);// selecciono canal 0,este se mira en la libreria del micro
  3.         delay_us(1);
  4.         switch(read_adc()) {
  5.         case 367: c=1; break;
  6.         case 519: c=2; break;
  7.         /* ... aca los otros case's ... */
  8.         default: c=0;
  9.         }
  10.         if(!c) continue;
  11.         vector1[i++] = c;
  12.         lcd_gotoxy(1,1);
  13.         printf(lcd_putc,"%d", c);
  14.         delay_ms(10);
  15. } while(i<8);
  16. lcd_gotoxy(1,2);
  17. for(i=0; i<8; i++)
  18.         printf(lcd_putc,"%d", vector1[i]);
@fabianjsm is on twitter

Desconectado gio013

  • PIC10
  • *
  • Mensajes: 27
Re: guardar datos en un vector
« Respuesta #4 en: 20 de Septiembre de 2009, 15:01:12 »
lo de "==" lo arregle y si dejo de pasar por alto los if, probare lo de el switch aunque no se bn como es que funciona, si podes colocarme un ejemplo . soy muy nuevo en esto y este es como mi tercer programa, cuando haga es switch posteare otra vez.
gracias

Desconectado gio013

  • PIC10
  • *
  • Mensajes: 27
Re: guardar datos en un vector
« Respuesta #5 en: 20 de Septiembre de 2009, 15:02:57 »
lo de "==" lo arregle y si dejo de pasar por alto los if, probare lo de el switch aunque no se bn como es que funciona, si podes colocarme un ejemplo . soy muy nuevo en esto y este es como mi tercer programa, cuando haga es switch posteare otra vez.
gracias



la verdad no vi el ejemplo. es que ando un poco elevado. me pondré a trabajar en eso