Pages: [1]   Go Down
Author Topic: Seleccionar trozos de una cadena de caracteres  (Read 3169 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
Arduino as a way of life
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas compañeros,

Tengo un problema "en principio" basico pero no se como resolverlo.

Desde el Serial.Read() me llega una cadena de carateres como esta: B234

Me gustaria saber como destriar la B por una parte i el 234 por otra.

Espero que alguien me pueda ayudar smiley

Muchas gracias


Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
Arduino as a way of life
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

perdoname, pero no soy un experto en sistemas binarios y hexadecimales. Me he perdido complertamente con tu post. smiley-red
Logged

Albacete
Offline Offline
Full Member
***
Karma: 0
Posts: 140
Arduino mola que te pasas
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

En absoluto puede hacer enmascaramiento. Se trata de una cadena de caracteres, no un valor entero. Ademas, no es multiplicando como se hace, sino mediante los operadores logicos bit a bit. Por otra parte, lo que el compañero quiere es quedarse con una parte de la cedena, no que tomen valor cero.
Creo que la solucion pasa por estudiar las funciones de strings que puedes encontrar aqui:
http://www.nongnu.org/avr-libc/user-manual/group__avr__string.html
Aqui tienes unas cuantas funciones para el manejo de cadenas de caracteres, pero te prevengo: no es trivial el modo en que en C se manejan los strings, y suelen ser un mareo para los programadores que viene de otros lenguajes. Mi sugerencia es que te tomes un poco de tiempo para estudiar en algun manual como se manipulan las cadenas en C antes de empezar con el metodo ensayo-error.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas

Creo que esto te puede servir, no lo entiendo muy bien pero funciona. Lo utilizo para leer datos desde el puerto serie desde en processing.

Mando esto desde el arduino:

    Serial.print("X");
    Serial.print(leftRightPos);
    Serial.print("V");
    Serial.println(average);

Y lo leo desde processing:

void serialEvent (Serial myPort) {
  String xString = myPort.readStringUntil('\n');  // read the serial port until a new line
    if (xString != null) {  // if theres data in between the new lines
        xString = trim(xString); // get rid of any whitespace just in case
        String getX = xString.substring(1, xString.indexOf("V")); // get the value of the servo position; creo que lo que hace es coger la parte del string hasta V
        String getV = xString.substring(xString.indexOf("V")+1, xString.length()); // get the value of the sensor reading; aquí lo que hace es coger a partir de V
        degree = Integer.parseInt(getX); // set the values to variables;
        value = Integer.parseInt(getV);
}

Espero que te sirva,

Me imagino que si sabes como va a ser tu string y con el ejemplo anterior puedes hacer un substring para el primer valor y otro para el dato que te interesa y luego pasarlos a char y a int. Es solo una idea (soy nuevo en esto así que no me hagas mucho caso).
Logged

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

Hola,
Si tu cadena consiste siempre de primera parte compuesta de letras y una segunda parte compuesta de dígitos, podrías hacer algo así
Code:
char *p, a[9], b[9], cadena[] = "B234";
int n;

p = &cadena[0];
n = 0;
while(isalpha(*p))
   a[n++] = *p++;
a[n] = '\0';

n = 0;
while(isdigit(*p))
   b[n++] = *p++;
b[n] = '\0';

Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
Arduino as a way of life
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas a todos, problema resuelto. Muchas gracias por vuestras aportaciones. El problema residia en que desde processing solo se pueden enviar data tipo byte y no string. Cuando descubrí eso, resolvi el problema. Muchas gracias por vuestras aportaciones. Estoy muy contento!
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 16
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hola noxasdj quiciera pedir tu colaboracion con algo muy similar a lo que te pasaba ya que soy nuevo en esto no tengo idea de como solucionarlo.
Lo que hago es enviar el comando ( a un modem)

AT$MDMID? El modem me responde:

$MDMID: "AAA001"
OK

Necesito tomar solo el dato AAA001.

Agradezco tu colaboración
Logged

Pages: [1]   Go Up
Jump to: