Show Posts
Pages: 1 ... 70 71 [72] 73 74 ... 94
1066  International / Español / Re: Pasar de un tipo de variable a otro on: August 26, 2011, 10:01:00 am
lo que has dicho curro de machacar la memoria me ha llevado a comentar todo el codigo que menciono en mi primer mensaje de "funciona pero no se porque"
y ahora el tema de las horas ya funciona,
voy a seguir investigando pero puede que tuviese un codigo que "funcionaba" pero que estropeaba cosas por dentro de la memoria y hace que el programa se bloquee en otros trozos de codigo
no se si me explico.
1067  International / Español / Re: Pasar de un tipo de variable a otro on: August 26, 2011, 09:46:38 am
Pregunta...
Es posible que a lo largo del programa cuando he utilizado código tipo el siguiente, este "dañando" la memoria y que luego aunque haga una conversión bien, falle ????

Code:
double apparentPower;
char time_str[4];  // Define as a string (4 bytes)
...
      di.rowcol(2,1);
      di.puts(ltoa(apparentPower, time_str, 10));   di.puts(" Watts ");


Tengo el proyecto al 99% a falta de tan solo imprimir en el LCD una linea con el tiempo que lleva el arduino encendido (uptime).
y de paso a ver si aprendo a hacer bien las conversiones y sacarlas por LCD.

os agradezco mucho la ayuda.
1068  International / Español / Re: Pasar de un tipo de variable a otro on: August 26, 2011, 09:35:50 am
La solución mas practica es reescribir la libreria y sobrecargar el metodo en cuestion.
Te pongo un trozo de codigo de la libreria que tengo hecha para mi pantalla.

Lo mismo que yo e sobrecargado el metodo Write tu puedes hacerlo con tu metodo puts(char *s).

Saludos.


sin duda creo que esa es la solución final, pero ahora mismo me viene un poco grande hacer eso ya que si estoy teniendo tantos problemas con unas conversiones y mostrarlo en pantalla, todavia no me veo reescribiendo la libreria.
en el enlace este dicen que van a hacerlo en el futuro, pero no cuento con ello ya que lo pusieron hace mucho tiempo. http://doc.byvac.com/index.php5?title=Talk:Arduino_BV4618

adjunto la libreria, no para que me la reescribas sino por si hay algo que yo no veo y hace que no funcione el programa, aunque creo que tengo un lio absoluto en las conversiones.

gracias por vuestra ayuda
1069  International / Español / Re: Pasar de un tipo de variable a otro on: August 26, 2011, 09:31:34 am


Hola,
Creo que estás machacando memoria, y eso origina resultados imprevisibles:
Code:
char uptime_data[4];          
sprintf(uptime_data,"T: %0d  ",horass);
defines una  cadena char uptime_data[4] de 4 bytes (3 caracteres + null), y luego le estás metiendo una 'T', un ':', un espacio, uno o dos caracteres de la hora y dos espacios, en total  6 o 7 caracteres!
Prueba definiendo
char uptime_data[10];  


mm... bien visto, sin duda eso puede ser uno de los problemas. pero sigue sin funcionar.

Code:
int horas;
                horas = (int)((float)currentMillis/3600000.0);
char uptime_data[10];
                sprintf(uptime_data,"%d%d",(int)horas,(int)horas);
                di.puts(uptime_data);

he dejado al margen iminutos a ver si consigo que al menos me aparezca 2 veces hora.
1070  International / Español / Re: Pasar de un tipo de variable a otro on: August 26, 2011, 08:56:36 am
por lo que veo si intento realizar muchos calculos en una misma linea me da mas problemas, ahora lo he pasado a esto y por serial me aparece bien, pero al descomentar la linea que lo envia al LCD se bloquea

Code:
             int horas;
                    horas = (int)((float)currentMillis/3600000.0);
              long minutos;
                   minutos = (int)horas*3600000;  
                   minutos = currentMillis - minutos;
                   minutos = (int)((float)minutos / 60000.0);
              int iminutos = (int)minutos;    
              Serial.print(horas);Serial.print(":");Serial.print(iminutos);Serial.println();

                sprintf(uptime_data,"T: %0d  ",(int)horas);
                di.puts(uptime_data);


si quito:
Code:
               sprintf(uptime_data,"T: %0d  ",(int)horas);
                di.puts(uptime_data);

por serial me aparece bien, pero si se lo envio al LCD se bloquea, y eso que solo estoy enviado "horas"
importante: creo que es el sprintf lo que falla ya que si comento esa linea si que funciona.
lo que no enteindo es que en principio estoy haciendo lo mismo que en los ejemplos anteriores,no?
1071  International / Español / Pasar de un tipo de variable a otro on: August 26, 2011, 08:46:53 am
Hola, me gustaria abrir este post para analizar los metodos de pasar de un tipo de variable a otro.
Estoy teniendo muchos problemas con mi pantalla LCD ya que cuando le envio datos para mostrar si no tengo las variables perfectamente definidas y segun espera la libreria, me cuelga el programa.
Le he metido muchiiiiiisimas horas y algo he avanzado, a ver si entre todos me ayudais a terminar de pulirlo porque sigue dandome problemas
El titulo del post no menciona nada de LCD porque en principio este post deberia servir para cualquier caso.
Al tema...

La libreria de mi pantalla LCD I2C realiza esta función.
Code:
// **************************************************************
// sends string
// **************************************************************
void BV4618_I::puts(char *s)
{
char *sp=s;  
  Wire.beginTransmission(_i2adr);
  // send *s as bytes of date
  while(*sp)
    Wire.send(*(sp++));
  Wire.endTransmission();
}  


Esto funciona sin problemas ya que es un simple string y es el ejemplo mas sencillo.
Code:
di.puts("Hello World");

A partir de ahi empiezan los problemas cuando la sentencia que le envio no es como quiere.
Esto funciona, no entiendo porque ya que si currentMillis es 12345 el resultado de la división es 12.345 que es un float en lugar de un long ????¿?¿?¿?
Code:
unsigned long currentMillis;
char time_str[4];  // Define as a string (4 bytes)
currentMillis = millis();

di.puts(ltoa (currentMillis/1000, time_str, 10));

Esto funciona y tampoco entiendo porque, ya que apparentPower es un double y no un long para usar ltoa
Code:
double apparentPower;
char time_str[4];  // Define as a string (4 bytes)
...
      di.rowcol(2,1);
      di.puts(ltoa(apparentPower, time_str, 10));   di.puts(" Watts ");

Esto lo aprendi ayer y me ha ayudado mucho ya que esto me funciona en un programa por separado donde solo haya este codigo.
Code:
char lcd_data[70];
  di.rowcol(1,1);
  
float horas = time/3600000;
long segminuto = ((time - (int)horas*3600000));
int minutos = (segminuto / 60000);
int segundos = ((segminuto - minutos*60000) / 1000);
// coge todos los segundos y le resta los segundos correspondientes a las horas de "horas"
// de esta resta nos quedan los segundos sin contar las horas (es decir los segundos hacia
// la proxima hora completa

  sprintf(lcd_data,"Time: %0d:%02d:%02d",(int)horas,minutos,segundos);
  di.puts(lcd_data);

En cambio ahora quiero hacer eso mismo en un proyecto y se me bloquea el programa. Si descomento estas lineas el programa entero funciona perfecto.
Code:
char uptime_data[4];

              float horas;
                    horas = ((float)currentMillis/3600000.0);
              long minutos;
                   minutos = currentMillis - (int)horas*3600000;  
                                     
              int horass;
                  horass = (int)horas;
              
                sprintf(uptime_data,"T: %0d  ",horass);
                di.puts(uptime_data);

He leido mucho de tipos de variables pero no termino de saber que pasa.
Se que hay mucho aquí, pero si alguien tiene alguna sugerencia igual puede ayudarme.
gracias
1072  International / Español / Re: dronesizer on: August 26, 2011, 07:23:28 am
al definir las array las termina con
Code:
,  }

segun http://arduino.cc/es/Reference/Array
deberia acabar con el ultimo elemento de la lista
int myArray[10]={9,3,2,4,3,2,7,8,9,11};

Code:
float sinC[3][SINC_LENGTH] = {
  {//sinus
    0.59754515,0.69134176,0.7777851,0.8535534,0.9157348,0.96193975,0.9903926,1.0,0.9903927,0.9619398,0.9157348,0.8535534,0.77778506,0.69134164,0.597545,0.49999985,0.40245464,0.30865806,0.22221464,0.14644638,0.08426499,0.03806007,0.009607285,0.0,0.009607464,0.038060457,0.08426553,0.14644706,0.22221544,0.30865896,0.4024556,0.5000008 }
  ,
  {//saw
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
  ,
  {//tri
    0.03125,0.0625,0.09375,0.125,0.15625,0.1875,0.21875,0.25,0.28125,0.3125,0.34375,0.375,0.40625,0.4375,0.46875,0.5,0.53125,0.5625,0.59375,0.625,0.65625,0.6875,0.71875,0.75,0.78125,0.8125,0.84375,0.875,0.90625,0.9375,0.96875,1.0 }
};

prueba a ver si el numero de errores se reduce o igual hay algo que yo no se.
1073  International / Español / Re: [SOLUCIONADO] Donde esta la librería de la funcion Pinmode? on: August 26, 2011, 06:31:04 am
1074  International / Español / Re: [SOLUCIONADO]puertos arduino mega rs-485 on: August 26, 2011, 06:29:21 am
Sin duda la firma de Heke cada vez se reafirma mas....
1075  International / Español / Re: Comunicacion entre arduinos dentro de una sala on: August 26, 2011, 06:28:13 am
si son dudas que pueden ser utiles para otros preguntalas por aqui, asi Igor te contesta y nos enteramos todos.
ah por cierto, el Usuario Igor = Secuduino.
por si no lo sabias
un saludo
1076  International / Español / Re: El uso de barreras ópticas y sistemas acústicos on: August 25, 2011, 07:26:13 pm
De verdad es impresionante, estaba pensando que este tipo de procesos podría aplicarse industrialmente para monitorización de maquinarias, algo asi como una ecografía de cualquier sistema mecánico.
Muy bueno aero, felicitaciones.
Por aca sigo experimentando con los microfonos para adaptarlos a mis proyectos.

y se utiliza.
para motores, valvulas, engranajes...
1077  International / Español / Re: Comunicacion entre arduinos dentro de una sala on: August 25, 2011, 05:27:58 pm
+1 para CAN-BUS
con la libreria de Igor es facilisimo.
1078  International / Español / Re: El uso de barreras ópticas y sistemas acústicos on: August 25, 2011, 05:26:22 pm
impresionante aero !!
pero esa grafica te la ha sacado "oyendo" el sonido???? o la has creado tu ?
me esta dejando impresionado este post

esta salida es directa, son datos sacados del espectro directamente!! Y eso que aún falta hacer el fine tuning de los parámetros, suavizará mucho la curva, sin tanta oscilación

entonces permiteme que me repita....impresionante!!
1079  International / Español / Re: El uso de barreras ópticas y sistemas acústicos on: August 25, 2011, 05:16:44 pm
Órdago a la grande, juego y todo lo que se mueva.

Objetivo:

Analizar la vuelta con cámara a bordo y display de marchas  y velocidad de f1 y sacar la relaciones de cada marcha!! Mapear el Ferrai de Alonso!!

Plazo: This is Spain!!



jeje en su dia ya consegui por CAN-BUS pillar la velocidad, las rpms y que me calculase perfectamente en que marcha estaba. me lo mostraba por LCD.
ahora cuando retome el proyecto CAN-BUS espero poder ampliarlo.
1080  International / Español / Re: El uso de barreras ópticas y sistemas acústicos on: August 25, 2011, 05:15:36 pm
impresionante aero !!
pero esa grafica te la ha sacado "oyendo" el sonido???? o la has creado tu ?
me esta dejando impresionado este post
Pages: 1 ... 70 71 [72] 73 74 ... 94