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.
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
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
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):
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.
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
Pues a mi me deja, como es lo lógico, declarar una cadena vacia
char dato[5] ={""};
char dato[5] ={};
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.
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)
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.
Eso de volver a declarar una variable existente no creo que le guste mucho al Arduino, jejeje
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).
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