Pages: [1]   Go Down
Author Topic: pasar una cadena String a numero int  (Read 11318 times)
0 Members and 2 Guests are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 8
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas ,  quiero pasar es una cadena de tipo Strin (clase) a numero float.
no consigo pasar una cadena de tipo String("1234") a float.(12,43)
tendría que ser algo muy sencillo pero no consigo que funcione y lo que he encontrado por la red tampoco.

float TempAcuario=24;
String TomaDatos="1234";
TempAcuario= float(TomaDatos)/100;


lo que quiero hacer es capturar datos desde el mando a distancia,los cuales voy concatenando, hasta formar una cadena, pero posteriormente esa cadena quiero trabajarla como numero
Un saludo, y gracias
« Last Edit: December 31, 2010, 06:41:42 am by conanelbabaro » Logged

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,

En la libreria <stdlib.h>, dispones de funciones, como por ejemplo atoi().
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html
http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/



Saludos   smiley-wink


Igor R.
Logged


0
Offline Offline
Newbie
*
Karma: 0
Posts: 8
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

buenas muchas gracia por la contestación, ya había estado mirando la función atio y atil, pero no conseguí que me funcionasen y tampoco tenia muy seguro si servían para arduino o solo para c++.
con los enlaces que me has puesto, haber si me entero de algo.
Un saludo
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 8
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

nada que no hay manera, alguna referencia sobre como trabajar con cadenas , estoy utilizando la clase String, no sera por eso
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 8
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bueno pues parece que este si funciona
#include <stdio.h>
#include <stdlib.h>

char dato[] ={"12"};
char dato1[] ={"34"};
char* datoT[] ={"1111"};
float TempAcuario = 1;

void setup()
{
  Serial.begin(9600) ;
 
}

void loop()
{
 
dato += dato1; // no consigo sumar las dos cadenas
  TempAcuario = atol (dato);
  TempAcuario=TempAcuario/100;
   Serial.println(TempAcuario);
 
}


 lo que no consigo es sumar las cadenas dato y dato1 , alguna idea
Logged

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tienes dos vectores con 2 carácteres, por lo que en el hipotético caso de que se pudieran sumar las cadenas no te cabrían, ya que necesitas espacio para 4 carácteres y tú solo tienes para 2, por lo que habría que crear una cadena que tuviera espacio suficiente para albergar todos los carácteres.

Para poder juntar cadenas puedes usar alguna función tipo strcat, que no he usado nunca, pero debería funcionar de la siguiente manera (al menos compila correctamente):
Code:
#include <stdio.h>
#include <stdlib.h>

char dato[5] ={"12"};
char dato1[] ={"34"};
char datoT[] ={"1111"};
float TempAcuario = 1;

void setup(){
  Serial.begin(9600) ;
}

void loop(){
  strcat(dato,dato1);
  TempAcuario = atol(dato);
  TempAcuario=TempAcuario/100;
  Serial.println(TempAcuario);
}

Un saludo
Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

0
Offline Offline
Newbie
*
Karma: 0
Posts: 8
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

al final quedo asi
//#include <stdio.h>
//#include <stdlib.h>

char dato[] ={"12"};
char dato1[] ={"34"};
char datoT[] ={"1111"};
float TempAcuario = 1;

void setup()
{
  Serial.begin(9600) ;
 
}

void loop()
{
 
 strcat (dato,dato1); // concatena cadenas string dato=dato+dato1
  TempAcuario = atol (dato); // convierte cadenas tipo string a numero
  TempAcuario=TempAcuario/100;
   Serial.println(TempAcuario);
 
}
 
Solucionado, gracias Chiva, para eso tenia datosT, pero no conseguí que funcionase
« Last Edit: January 04, 2011, 03:59:23 pm by conanelbabaro » Logged

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 727
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Aunque te haya funcionado esta vez, creo que es un código peligroso: al declarar dato[] has reservado espacio para 2 caracteres ( más el null), y luego acabas poniendo en él otros dos caracteres, cinco en total. Con eso, estás machacando una zona desconcocida de memoria, y eso puede hacer que el programa quede frito. Es uno de los puntos más delicados del lenguaje C, no controla la longitud de la cadena de caracteres que copias en una variable.
Logged

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Como dice curro92, no te has fijado en la línea:
Code:
char dato[5] ={"12"};
Para de esa manera poder meter los cuatro carácteres

Un saludo
Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

0
Offline Offline
Newbie
*
Karma: 0
Posts: 8
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Muchas Gracias curro92 y chiva, ya he modificado el código, mucho mas definido como decís,
char dato[5] ={"12"};

el problema que tengo ahora es que no puedo poner la cadena vacía como mínimo tiene un espacio en blanco que no se como quitar , puesto que no me funciona la función trim
dato =dato.trim()
tambien he probado esto otro para dejar la cadena vacia
    char dato[5] = {" "};
    char* dato1;
    dato1= strtok (dato," ");
    dato=dato1 // aqui me da el error

Sigo sin tener muy claro como funciona el tema de char, char* y String
« Last Edit: January 07, 2011, 12:40:16 pm by conanelbabaro » Logged

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pues a mi me deja, como es lo lógico, declarar una cadena vacia
Code:
char dato[5] ={""};
Code:
char dato[5] ={};
Code:
char dato[5] ={'\0'};
las tres formas hacen lo mismo

Para el caso, si vas a sobreescribir el vector con valores que mandes al Arduino, no sería necesario vaciarla antes de volverla a usar.

¿Por qué da error dat=odato1?
Porque dato es char y dato1 char*, por lo que no puedes mezclar churras con merinas.

char = un carácter (e.j. 'c')
char []  = un vector que en cada posición tiene un caracter (e.j. {"Hola"})
char* = un puntero que apunta a una posición de memoria donde se encuentra un caracter.
char* []  = un vector de punteros que apuntan a posiciones de memoria donde se encuentran unos carácteres (e.j. {"Hola","que","tal"})

Hay mucha información de estas cosas por internet y en cualquier libro que explique C.

Un saludo
Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

0
Offline Offline
Newbie
*
Karma: 0
Posts: 8
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No da error de copilacion y la cadena dato la pone a vació, pero el código no funciona correctamente. si copilas esto.
Code:
#include <stdio.h>
#include <stdlib.h>

char dato[5] ={"12"};
char dato1[] ={"34"};
//char datoT[] ={"1111"};
float TempAcuario = 1;

void setup(){
  Serial.begin(9600) ;
}

void loop(){
  strcat(dato,dato1);
  TempAcuario = atol(dato);
  TempAcuario=TempAcuario/100;
  //Serial.println(TempAcuario);
  delay (2000);
  char dato[5]={""};
  Serial.println(dato);
  Serial.println(TempAcuario);
}  
por el Serial debería salir
lo primero una linea en blanco
la segunda linea 12.34
la tercera linea en blanco
la cuarta 0.34
Creo o asi lo entiendo yo   :-/
sin embargo
la 1ª linea en blanco
la 2ª 12.34
 la tercera en blanco
la 4ª 1234.34
 luego en algún sitio he metido la pata, creo que el problema esta en strcat que no se vacía , lo que no se es porque?

Para el caso, si vas a sobreescribir el vector con valores que mandes al Arduino, no sería necesario vaciarla antes de volverla a usar.
No es el caso, el codigo original seria este. ( perdona pero no se añadir los comentarios)


Code:
void TomaDatos()
{
char dato[]={""};
do
{
ircode =ir.read();
if (ircode==mando_1) // entraría aquí si pulsamos el botón 1 del mando
      {
      strcat (dato,"1");
      lcd.setCursor(0, 1);
      lcd.print(dato);
      }
      if (ircode==mando_2)
      {
      strcat (dato,"2");
      lcd.setCursor(0, 1);
      lcd.print(dato);
      }
      if (ircode==mando_3)
      {
      strcat (dato,"3");
      lcd.setCursor(0, 1);
      lcd.print(dato);
      }
// así los diez números
if (ircode==mando_Clear)// borrara la cadena en caso de error
      {
      lcd.setCursor(0, 1);
      lcd.print("                ");
    char dato[] = {""};
      }
} while  (ircode != mando_Exit);

De esa función saldría una cadena de 4 dígitos que posteriormente convertiré en numero.

 Muchas gracias por las contestaciones
« Last Edit: January 08, 2011, 06:51:39 am by conanelbabaro » Logged

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Eso de volver a declarar una variable existente no creo que le guste mucho al Arduino, jejeje
Code:
char dato[5]={""};

De todas maneras sigo insistiendo en que busques información sobre vectores/arrays, ya que según leo, no entiendes ni como se crean, ni cómo se usan, por lo que todo lo que te estoy diciendo sólo va a hacer que aumente el lío mental que tienes (y que me parece normal, a todos nos a pasado lo mismo con los vectores/punteros).

Un saludo
« Last Edit: January 08, 2011, 06:43:14 am by chiva » Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

0
Offline Offline
Newbie
*
Karma: 0
Posts: 8
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La verdad no pensaba que podría ser tan complicado , sobre todo cuando empece definiendolos, como clase String, los cuales solo tendría que convertir a numero, y entonces se armo la marimorena.
Pues nada, a lo dicho a buscar documentación de array y vectores en C
gracias por todo
Logged

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

De nada hombre, y si tienes algún problemilla aprendiendo los vectores, nos lo dices.

Un saludo
Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

Pages: [1]   Go Up
Jump to: