Show Posts
Pages: 1 ... 69 70 [71] 72 73 ... 94
1051  International / Español / Re: Nokia 6100 / Arduino Duemilanove on: August 31, 2011, 05:14:59 pm
mmm...prueba a crear una carpeta nueva en arduino22/libreries y copia ahi el archivo a ver si asi te lo reconoce.
para ello una vez lo tienes copiado, cierra y abre el programa de arduino, y ves a "sketch, import library" para ver si lo reconoce.
suerte
1052  International / Español / Re: CAN BUS: Red de Arduinos on: August 31, 2011, 05:20:15 am
mis ojooooos !!!  smiley-eek smiley-eek smiley-eek
una de las frases mas largas que he leido en mi vida jeje.

La verdad es que con la libreria de Igor todo es mas facil, yo intentaria comprar su brick porque te hara la vida mas facil. alguna forma tiene que haber,no? globalización...ya claro ! smiley-cry
1053  Using Arduino / Programming Questions / Re: Convert float and long to string to complete a LCD I2C library on: August 30, 2011, 05:36:42 pm
Thanks avenue but i dont need to take care of negative floats so thanks alot for that code but I used Paul's suggestion.

Paul thank you so much for your help, I have not answered earlier cause I was testing thoroughly the code before posting it here as "it's working code".

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();




void BV4618_I::putf(float st, int decimales)
{
  char sp[16];
  dtostrf( st, 4, decimales, sp );
    Wire.beginTransmission(_i2adr);
  // send *s as bytes of date
int len = strlen(sp);
for(int i=0; i<len; i++)
{
   Wire.send(sp[i]);
}
  Wire.endTransmission();
}

// other way of float
void BV4618_I::putff(float st, int decimales)
{
  char sp[16];
  char *p = &sp[0]; // points to start of array.

  dtostrf( st, 4, decimales, sp );
   Wire.beginTransmission(_i2adr);
  // send *p as bytes of date
  while(*p)
    Wire.send(*(p++));
  Wire.endTransmission();
}

void BV4618_I::puti(int st)
{
char hour_str[4]; // Define as a string (4 bytes)
itoa (st, hour_str, 10); //convert integer to string
//di.puts(hour_str); //print string on LCD
char *sp=hour_str; 
  Wire.beginTransmission(_i2adr);
  // send *s as bytes of date
  while(*sp)
    Wire.send(*(sp++));
  Wire.endTransmission();
}

void BV4618_I::putl(long st)
{
char hour_str[4]; // Define as a string (4 bytes)
ltoa (st, hour_str, 10); //convert integer to string
//di.puts(hour_str); //print string on LCD
char *sp=hour_str; 
  Wire.beginTransmission(_i2adr);
  // send *s as bytes of date
  while(*sp)
    Wire.send(*(sp++));
  Wire.endTransmission();
}

remember to modify bv_4618_I.h and add:
Code:
void putf(float st, int decimales);
void putff(float st, int decimales);
void puti(int st);
void putl(long st);

This is working, I still have some times where program freezes but I think its cause I am doing some conversion wrong before sending it to the LCD.

I will do more testing and when I have everything clear I will upload the libraries modified, for others to use.

once again, Paul thank you very very much.
1054  International / Español / Re: "Machacar" la memoria al declarar mal las variables?¿?¿? on: August 29, 2011, 06:34:55 am
Ahh, como decias que se quedaba clavado el codigo que has puesto antes, por eso preguntaba....



Si si, es que ese codigo (bueno el real pero simplificado a eso) al descomentarlo del programa "grande" funciona el programa y sino se queda clavado.
pero como digo, voy a ver si consigo "mejorar" todo el codigo del LCD y deja de hacerlo.
1055  International / Español / Re: "Machacar" la memoria al declarar mal las variables?¿?¿? on: August 29, 2011, 06:28:31 am
Igor el problema es que el codigo esta en un programa muy largo.
Lo curioso es que a veces se queda colgado, a veces no. Es decir, en ocasiones hace la conversión bien y otras veces cuelga el programa.

Simplemente queria entender como trabaja Arduino con la memoria en estos casos en cuanto a como guarda los datos en su RAM y como los accede luego. Ya que supongo que ahi reside el problema.
De todas formas estoy intentando redefinir todo a ver si consigo que "aguante". Voy a hacer unas pruebas y si no funciona, seguimos por aqui.
Gracias !!!
1056  International / Español / Re: "Machacar" la memoria al declarar mal las variables?¿?¿? on: August 29, 2011, 05:08:19 am
Igor si probarlo ya lo he hecho, y miles de veces.
En serio llevo muchas horas en conseguir tener todo mi programa con las variables bien definidas y las operaciones matemeticas tambien bien definidas.
Y todo para que lo muestre por LCD con la porqueria de libreria que venia con la pantalla.

Vale, entonces es lo que pensaba, el .0 es para forzar el float.

Respecto a lo que comentaba de meter los datos de un float o un long a un int
int myvalue1;
float myvalue2 = 1234.56;
long myvalue3 = 123456;

myvalue1 = (int)myvalue2;
myvalue1 = (int)myvalue3;

aqui provocaria un fallo en el arduino o se supone que sabe solucionarlo? porque a mi se me queda clavado.
gracias !!
1057  International / Español / Re: "Machacar" la memoria al declarar mal las variables?¿?¿? on: August 29, 2011, 04:11:07 am
entiendo Igor, y que ocurre si intentas algo asi:
int myvalue1;
float myvalue2 = 1234.56;
long myvalue3 = 123456;

myvalue1 = (int)myvalue2;
myvalue1 = (int)myvalue3;
porque en este caso estas metiendo 4 bytes en 2, esto produciría un error supongo.

ah y ya que estamos, en la información de float http://arduino.cc/es/Reference/Float
dice que hay que poner un ".0" si realizas una división. esto para que es, para que lo considere un float ??
en caso de multiplicaciones tambien? no verdad?
1058  Using Arduino / Programming Questions / Re: Convert float and long to string to complete a LCD I2C library on: August 28, 2011, 05:56:46 pm
Thanks Paul, but I tried
Code:
void BV4618_I::putf(float st, int decimales)
{
  char sp[16];
  dtostrf( st, 4, decimales, sp );
    Wire.beginTransmission(_i2adr);
  // send *s as bytes of date
  while(*sp)
    Wire.send(*(sp++));
  Wire.endTransmission();
}

I get
Quote
In member function 'void BV4618_I::putf(float, int)':
 151:error: lvalue required as increment operand
line 151
Code:
    Wire.send(*(sp++));


So first error cleared, cant understand this one.
thanks
1059  Using Arduino / Programming Questions / Re: Convert float and long to string to complete a LCD I2C library on: August 28, 2011, 05:48:01 pm
Hi Paul, thanks for your answer.
I did the static part cause I copied from somewhere else, I didnt want to take it in until it worked.

I did this:
Code:
void BV4618_I::putf(float st, int decimales)
{
  char sp[16];
  sp = dtostrf( st, 4, decimales, sp );
    Wire.beginTransmission(_i2adr);
  // send *s as bytes of date
  while(*sp)
    Wire.send(*(sp++));
  Wire.endTransmission();
}
and in the class definition
Code:
void putf(float st, int decimales);

I get this error:
Code:
error: incompatible types in assignment of 'char*' to 'char [16]'

Sorry I am completely lost in this one.

robtillaart I did look into that before but I use Wire library so i dont know how to integrate it.
1060  Using Arduino / Programming Questions / Convert float and long to string to complete a LCD I2C library on: August 28, 2011, 05:31:17 pm
Hello, I know there are many convert 'this' to 'this' questions, and I believe I have gone through all of them and yet cant fix my problem, so please excuse yet another post.

I bought this LCD that has I2C to communicate 20 x 4 LCD Module With I2C & Keypad Controller

http://cgi.ebay.es/I2C-Serial-LCD-Display-Module-20-x-4-keypad-Control-/110609652307?pt=UK_BOI_Electrical_Test_Measurement_Equipment_ET&hash=item19c0d95a53

It has a HD44789 Controller and a BV4218 I2C LCD Display Controller.

However their Library is not very complete and as to printing only handles strings and chars.
Code:
// **************************************************************
// sends char
// **************************************************************
void BV4618_I::putch(char c)
{
  Wire.beginTransmission(_i2adr);
  Wire.send(c);
  Wire.endTransmission();
}  

// **************************************************************
// 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();
}  

I would like to create a function to send a float directly, I have tried this but my program freezes.

Code:
void BV4618_I::putf(float st, int decimales)
{
  static char * sp = "         ";
  sp = dtostrf( st, 4, decimales, sp );
    Wire.beginTransmission(_i2adr);
  // send *s as bytes of date
  while(*sp)
    Wire.send(*(sp++));
  Wire.endTransmission();
}

Any help would be great, I have spend more hours I can count with problems of my program freezing because of this.
plus it would bevery useful for others with the same display.

Thanks a lot

PS:
This is the original library link http://www.practicalmaker.com/library/arduino-byvac-bv4218-complete-library
1061  International / Español / Re: "Machacar" la memoria al declarar mal las variables?¿?¿? on: August 28, 2011, 03:12:04 pm
no si el error ya lo he vivido. El problema es que si no declaras algo asi
int varible = 123.45;
sino que es dentro del programa y durante su ejecución que se llega a esa situación, el compilador no se entera y te deja subir el programa. Y no es hasta que ocurre la asociación que el arduino empieza a hacer cosas raras.

Es por ello que me interesa saber que ocurre dentro del Arduino en estos casos.
Gracias.
1062  International / Español / Re: Uso del chip Shift Register (74HC595) on: August 28, 2011, 03:08:31 pm
esta semana tambien salio este tutorial muy bueno
http://tronixstuff.wordpress.com/2011/08/26/tutorial-maximising-your-arduinos-io-ports/
1063  International / Español / Re: Pasar de un tipo de variable a otro on: August 28, 2011, 03:06:13 pm
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.
Code:
void LCD128x64Class::Write(char* st)
{
  Serial1.print(st);
}

void LCD128x64Class::Write(int st)
{
  Serial1.print( st, DEC );
}

void LCD128x64Class::Write(long st)
{
  Serial1.print(st, DEC );
}

void LCD128x64Class::Write(float st)
{
  static char * valor = "         ";
  valor = dtostrf( st, 4, 2, valor );
  Serial1.print(valor);
}

void LCD128x64Class::Write(float st, int decimales)
{
  static char * valor = "         ";
  valor = dtostrf( st, 4, decimales, valor );
  Serial1.print(valor);
}
Lo mismo que yo e sobrecargado el metodo Write tu puedes hacerlo con tu metodo puts(char *s).

Saludos.


Dukatus cuando tienes esa funcion llamada en todos los casos igual, como decide cual tiene que ejecutar cuando es llamada? Que hace mirar lo que estas enviando y en base a eso escoger entre ellas?
cuando llamas a la funcion le indicas el tipo?
LCD.Write(float 123.24)
o solo envias el numero?

acabo de ver que usas "dtostrf", a ver si puedo adaptar mi libreria y hacer lo mismo y asi no tengo que hacer cosas como esta en el codigo del programa.
Code:
float coste;
      coste = (emon.sumakw/1000)*preciokwh;    // por decidir donde lo meto
      int costedecimales = (coste - (int)coste) * 100;
      sprintf(coste_data,"%0d.%02d E  ",(int)coste,costedecimales);  //d - el argumento es tratado como un integer y presentado como un número decimal (con signo).
      di.puts(coste_data);

seria pillar esto y adaptarlo,no?
Code:
// **************************************************************
// sends char
// **************************************************************
void BV4618_I::putch(char c)
{
  Wire.beginTransmission(_i2adr);
  Wire.send(c);
  Wire.endTransmission();


// **************************************************************
// 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();

1064  International / Español / "Machacar" la memoria al declarar mal las variables?¿?¿? on: August 28, 2011, 02:53:19 pm
Hola, a raiz de este post que sigo investigando pero que parece que igual ya he visto la luz...
http://arduino.cc/forum/index.php/topic,70532.0.html

Me gustaria entender mejor como trabaja internamente el Arduino en estos casos y no se como se denomina este problema como para buscarlo por la red especificamente para Arduino.

Si declaras una variable tipo INT y despues durante tu programa le intentas meter un valor mayor por ejemplo un float?

he visto que en ocasiones funciona el programa (cuando este es sencillo), pero en programas mas extensos al final acaba bloqueandose.

como responde Arduino a este tipo de conflictos?
cosas como
Declaras una variable INT (2bytes) y le intentas guardar un float (4 bytes)
Declaras una variable LONG (4bytes) y le intentas guardar un float (4 bytes) pero con decimales y un rango distinto.
Declaras una variable byte (1bytes) y le intentas guardar un float (4 bytes) o lo que sea
etc etc.
ah y tambien, si declaras un char varible[4]; y luego le quieres meter mas bytes de los que has declarado

Igual entendiendo como responde Arduino a esto, consigo terminar de depurar mi programa.
Muchas gracias !!
1065  International / Español / Re: Duda I2C on: August 28, 2011, 02:42:20 pm
Yo si no fuera por los gastos de envio pediria mas cosas ... pero es que 10 eur lo veo desproporcional. y para algo que vale 2 eur.
tendré que seguir esperando a necesitar mas cosas, para un pedido de unos 60 eur no está tan mal la cosa y ademas lo traen a casa.

tengo el quadcopter parao porque pedir las palas me salen 18 eur en casa 4 trozos de plastico.  pero bueno ..

es que vaya pasada 10 euros de envio.

yo cada vez mas intento comprar las cosas de hong kong, esta claro que hay cosas que es imposible, pero vamos que prefiero esperar unas semanas y ya no solo por los 10euros. a ver si asi se les baja los humos y ponen gastos de envio reales. que lo que hacen ahora es, me da igual lo que pidas, me voy a llevar 6 euritos de ti "porque si".
Pages: 1 ... 69 70 [71] 72 73 ... 94