0
Offline
Newbie
Karma: 0
Posts: 8
Arduino rocks
|
 |
« on: December 31, 2010, 06:38:29 am » |
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
Edison Member
Karma: 12
Posts: 1552
|
 |
« Reply #1 on: December 31, 2010, 01:41:32 pm » |
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 8
Arduino rocks
|
 |
« Reply #2 on: January 02, 2011, 04:12:04 pm » |
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
Newbie
Karma: 0
Posts: 8
Arduino rocks
|
 |
« Reply #3 on: January 03, 2011, 03:25:48 pm » |
nada que no hay manera, alguna referencia sobre como trabajar con cadenas , estoy utilizando la clase String, no sera por eso
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 8
Arduino rocks
|
 |
« Reply #4 on: January 04, 2011, 01:21:43 pm » |
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
Edison Member
Karma: 22
Posts: 1373
|
 |
« Reply #5 on: January 04, 2011, 02:32:05 pm » |
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): #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
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 8
Arduino rocks
|
 |
« Reply #6 on: January 04, 2011, 02:49:40 pm » |
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
God Member
Karma: 10
Posts: 600
Arduinotarrak
|
 |
« Reply #7 on: January 05, 2011, 02:34:05 pm » |
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
Edison Member
Karma: 22
Posts: 1373
|
 |
« Reply #8 on: January 05, 2011, 03:29:08 pm » |
Como dice curro92, no te has fijado en la línea: char dato[5] ={"12"}; Para de esa manera poder meter los cuatro carácteres Un saludo
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 8
Arduino rocks
|
 |
« Reply #9 on: January 07, 2011, 11:59:42 am » |
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
Edison Member
Karma: 22
Posts: 1373
|
 |
« Reply #10 on: January 07, 2011, 03:10:32 pm » |
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. Un saludo
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 8
Arduino rocks
|
 |
« Reply #11 on: January 08, 2011, 06:05:43 am » |
No da error de copilacion y la cadena dato la pone a vació, pero el código no funciona correctamente. si copilas esto. #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) 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
Edison Member
Karma: 22
Posts: 1373
|
 |
« Reply #12 on: January 08, 2011, 06:39:15 am » |
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). Un saludo
|
|
|
|
« Last Edit: January 08, 2011, 06:43:14 am by chiva »
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 8
Arduino rocks
|
 |
« Reply #13 on: January 08, 2011, 07:10:14 am » |
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
Edison Member
Karma: 22
Posts: 1373
|
 |
« Reply #14 on: January 08, 2011, 07:18:53 am » |
De nada hombre, y si tienes algún problemilla aprendiendo los vectores, nos lo dices.
Un saludo
|
|
|
|
|
Logged
|
|
|
|
|
|