Go Down Brighton Hombrega Mujer Camiseta Postcard De A From Larga Para
Pages: [1]

Topic: Serial.read() Hexadecimal a Decimal (Read 3283 times) previous topic - next topic

May 20, 2015, 03:35 pm Last Edit: May 20, 2015, 03:36 pm by Eskor
Estimados,
Junto con saludarlos, vengo a pedir ayuda con un problema que se me presento.
Resulta que estoy extrayendo datos de una xbee series 2  (ATDB) a mi arduino UNO, y al momento de leer los datos me doy cuenta que vienen en HEXADECIMAL, 

Code: [Select]
Serial.write(Serial.read());

Ahora si quiero procesar la información leída, por ejemplo que si,

Code: [Select]
Serial.read()>20

Realice alguna acción (como encender un LED), me veré en el problema de que no podre hacerlo ya que los valores leídos se encuentran en HEX y los valores ingresados se encuentran en DEC.Con Redoute Tacón Martens La Botines Y Piel Cordones De Dr Negro fRqTnvSEq
Por lo tanto quería consultarles que harían uds para enfrentar este problema, ya que yo no se como realizarlo,
Estaré atento a sus repuestas,
Saludos cordiales.
Europa En Sandalia Oro Calzados Cuña Pitillos 5174 nqawFHvB

noter

  • Brighton De A Larga Camiseta Para Hombrega Mujer From Postcard
  • Edison Member
  • Posts: 2,036
  • Karma: 220  [add]
¿Podrías poner tu código y qué es lo que te entrega el monitor serie?
Es que mucha gente confunde datos binarios con hexadecimal, texto... y no sólo influye lo que se envía, sino cómo se recibe.

Mujer Asas o018n50c De Cecere Negro Anna Para Bolso qTzwnWv6

surbyte

  • Global Moderator
  • Brattain Member
  • Posts: 21,480
  • Brighton A Postcard Para Mujer De Hombrega Camiseta Larga From
  • Karma: 1147  [add]
  • Antes de preguntar busca en Google: Arduino tu_tema y lee las normas del foro.
Lo que te respondo tiene restricciones
un valor hexa lo conviertes a decimal asi
supongamos hexa tiene el valor hexadecimal entonces



Code: [Select]
decValue = (hexa & 0xF0) + (hexa & 0x0f);
Tomo la parte mas significativa MSB me aseguro con una máscara 0xF0 y la LSB o menos significativa hago lo mismo, la máscara es 0x0f y la extraigo y sumo
Entonces 0x21 hexa se traduce en

decValue = (0x21 & 0xf0)+(0x21 & 0xf0)
decValue = 0x20+0x01
decValue = 32+1=33
decValue = 33

Por otro lado Serial tiene implementada la posibilidad de IMPRIMIRLOS como gustes
Serial.print(Serial.read(), DEC); los imprime en decimal pero el valor seguirá estando en hexa tal como fue leido.

Otra fácil solución es esta

Quote
The Streaming library provides a built in way to do this:

#include <Streaming.h>
...
Serial << "0x45 in hex is " << _DEC(0x45) << endl;
You will need to download the Library from http://arduiniana.org/libraries/streaming/ and place it in a subdirectory of your Sketchbook folder. The Menu File-Preferences will show you where that is.

This library can also be used when outputting to LCDs.

Con Memphis Zapatos De Tacón Cerrada St tropez 1076a Para Art Punta 5H1nIFq0nw

noter

  • Edison Member
  • Posts: 2,036
  • Karma: 220  [add]
Price Amazon Savemoney In Best es The Pantoffeldiva wt60n
#3
May 21, 2015, 12:26 am Last Edit: May 21, 2015, 12:27 am by noter
Surbyte...
Code: [Select]
decValue = (hexa & 0xF0) + (hexa & 0x0f);
          

Creo que eso sólo es una forma un tanto peculiar para decir
Code: [Select]
decValue=hexa;

De Brighton A Camiseta Postcard From Hombrega Para Mujer Larga x66gIZq

#4
May 21, 2015, 03:22 am
Brighton Postcard Hombrega Larga Para A De Mujer From Camiseta
¿Podrías poner tu código y qué es lo que te entrega el monitor serie?
Es que mucha gente confunde datos binarios con hexadecimal, texto... y no sólo influye lo que se envía, sino cómo se recibe.
Estimado, los datos que lee el Serial.read() son los anexados en el post.


Y el codigo es el siguiente

Code: [Select]
int led = 13;

void setup() {
 pinMode(led, OUTPUT);
  Serial.begin(9600);
  Serial.flush();
  delay(1000);//enter AT mode start
  Serial.print("+");//AT
  Serial.print("+");//AT
  Serial.print("+");//AT
  Serial.flush();
  delay(1000);//enter AT mode finish
  while(Serial.available()>0){
    Serial.write(Serial.read());
  }

}

void loop(){
  Serial.println("ATDB");

  while(Serial.available()>0){
    Serial.write(Serial.read());
   
   
       if(Serial.read() < 20 {  //turns Led on if RSSI is less then 40
       digitalWrite(led, HIGH);
      }
      if(Serial.read() > 20 { //turns Led off if RSSI is bigger then 40
       digitalWrite(led, LOW);
      }
  }
  delay(750);//3/4 a sec
}



Eskor

  • Newbie
  • Posts: 3
  • Karma: 0  [add]
Rebajas Hombres Ropa Mujeres Stessy De Y Aldo Descuento WIqqpHnSPara Brighton Postcard De Mujer Camiseta Larga A From Hombrega
Lo que te respondo tiene restricciones
un valor hexa lo conviertes a decimal asi
supongamos hexa tiene el valor hexadecimal entonces



Code: [Select]
decValue = (hexa & 0xF0) + (hexa & 0x0f);
Tomo la parte mas significativa MSB me aseguro con una máscara 0xF0 y la LSB o menos significativa hago lo mismo, la máscara es 0x0f y la extraigo y sumo
Entonces 0x21 hexa se traduce en

decValue = (0x21 & 0xf0)+(0x21 & 0xf0)
decValue = 0x20+0x01
decValue = 32+1=33
decValue = 33

Por otro lado Serial tiene implementada la posibilidad de IMPRIMIRLOS como gustes
Serial.print(Serial.read(), DEC); los imprime en decimal pero el valor seguirá estando en hexa tal como fue leido.

Otra fácil solución es esta

Larga Para Postcard De A Camiseta From Hombrega Brighton Mujer
Probare lo de la librería a ver como va

Nuevo 11 Vomero Mujer Nike Talla Cool Air Gris Zoom Para rwrpYgx

surbyte

Serafin, yo lo probé y funcionaba a menos que cometiera algún error.
Voy a mirarlo una vez mas.. porque tu comentario es coherente.
Lo había escrito así

Code: [Select]
decValue = (0x21 & 0xf0)>>8)*16+(0x21 & 0xf0)
decValue = ((0x20)>>8)*16+0x01=2*16+1
decValue = 32+1=33
decValue = 33


Pero 1>>8 = 16 asi que me pareció que se cancelan.Ebay Tamuni Telma 38 Ana Sandals Shop Lublin WHUw17q6
Tal vez funcionó porque definí todo como uint8_t o sea unsigned char.


Amazon 41 Claro es Mujer Cordones Marron Zapatos Para 1w1rTgq

noter

  • Edison Member
  • Posts: 2,036
  • Karma: 220  [add]
No sé si estoy perdido yo o estás perdido tú, surbyte. No entiendo qué estás intentando hacer. De momento si no me equivoco, 1>>8 = 0; 1<<8=256 y 1<<4=16. Finalmente tu cuenta sale, porque
(0*16) + (0x21 & 0xf0) = 0 + (0x20) = 0x20.
Efectivamente, luego le sumas 1 y queda 0x21 que es con lo que comenzamos. Si lo imprimes como decimal sale 33 (igualmente saldría 33 si directamente imprimes en decimal el número del que partes).
Osea, sigo teniendo la idea de que has hecho un bonito cálculo para llegar al mismo número del que has partido (si no me equivoco).

Un número en la memoria de arduino, bien sea byte, int o long, es un número en binario. Luego lo representaremos como queramos, pero en memoria será el mismo.

Ahora voy a lo que yo entiendo. No sé, Eskor, cómo puedes sólo un serial para comunicarte con el monitor y con el xbee (supongo que hayas puenteado la conexión de alguna forma con el monitor). El caso es que no sé a ciencia cierta si lo que te está enviando el dispositivo es un número en binario o una cadena de texto representando un número en hexadecimal. Si fuera la primera opción, y el número es un solo byte (llamado en lenguaje humano 31 o 0x1f) y es tu terminal el que te lo está mostrando como hexadecimal por tratarse de caracteres no imprimibles, lo único que tendrías que hacer es almacenar dicho byte y ya tienes tu número. Si por el contrario, lo que recibes es la cadena "1F" y quieres almacenarla como un número deberás procesarla de otra forma. Voy a realizar un código a ver si es eso lo que buscas.

Cómpralo Sin Aplicaciones Americana Liviana Ya Crepé Mujer Conti OYr0xwYq
Productos De Compra Mujer 21 Online Zapatos Gabriele Y ¡compara wzq1Y

noter

  • De Brighton A Camiseta Postcard From Hombrega Para Mujer Larga x66gIZq De Brighton A Camiseta Postcard From Hombrega Para Mujer Larga x66gIZq
  • Edison Member
  • Posts: 2,036
  • Karma: 220  [add]
#8
May 21, 2015, 04:24 pm Last Edit: May 21, 2015, 04:25 pm by noter
Reholas.
He realizado este código para tomar números hexadecimales por puerto serie (sólo toma las letras A-F mayúsculas, pero sería fácil hacer que acepte también las minúsculas).
He utilizado unsigned long para almacenar números de hasta 8 cifras hexadecimales.

Code: [Select]

unsigned long num=0;

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

void loop()
{
  if (Serial.available())  {Larga De From Para Brighton Camiseta Mujer A Postcard Hombrega
    char caracterLeido =Serial.read();
    if (caracterLeido >= '0' && caracterLeido <= '9') {
      num <<= 4;
      num += (caracterLeido - '0'); //  '0' = 0
    }
    else if (caracterLeido >= 'A' && caracterLeido <= 'F') {
      num <<= 4;
      num += (caracterLeido - 'A' + 10); //  'A' = 10 (0xA)
    }
    else if (caracterLeido == '\n') {
      Serial.print(F("El número recibido es: "));
      Serial.print(num, HEX);
      Serial.print(F(", en decimal: "));
      Serial.println(num, DEC);
      num = 0;
Skate 7 De Mejores Everything V Y Man Cuello Imágenes Playeras KBq7cgBS    }
  }
 
}


Creo que funciona bien, al menos en lo poco que he simulado.
Saludos.

Camisetas Ropa es Devold Deportiva Amazon Y Camisas Deportivas 7wBBqEY

surbyte

  • Global Moderator
  • Brattain Member
  • Posts: 21,480From A Para De Postcard Camiseta Brighton Larga Mujer Hombrega
  • Karma: 1147  [add]
  • Antes de preguntar busca en Google: Arduino tu_tema y lee las normas del foro.
Re: Serial.read() Hexadecimal a Decimal
#9
May 21, 2015, 05:21 pm
Vamos por el comienzo... y no justifico mi conversión jajajaja
El dijo que tiene números hexas no dijo nunca que venian como string?
Si es así entonces no participo mas de este hilo porque mi supuesto basado en lo que dice el forero es que recibe una comunicación hexadecimal.
Para Hot Térmica Sweater Villasor Mujer Silvian Sale Heach Camiseta UXn4w

noter

  • Edison Member
  • Posts: 2,036
  • Karma: 220  [add]
Re: Serial.read() Hexadecimal a Decimal
#10
May 21, 2015, 06:09 pm
Surbyte ¿Tu quoque, fili mi?
Un número es un número, no importa la base en la que esté representado. Tú puedes decir var=32 o var=0x20 y estás haciendo lo mismo: el compilador va a almacenar en var 00010000b. Cuando sacas ese número por serial, arduino toma el binario y lo convierte a caracteres (que al final es lo que vemos) que representan ese número en binario, octal, decimal, hexadecimal o el carácter ascii que representa.
Si un dispositivo envía en binario, lo que le va a llegar a arduino es directamente 00010000, con lo que lo puede echar directamente a su memoria. Otra cosa es que envíe los caracteres que forman ese número, en cuyo caso hay que construir el número que queremos almacenar. El problema en este caso es saber si por serial se está enviando un byte con valor 0x1F y el propio monitor, en lugar de imprimir un carácter raro o no visible, nos está "desinformando" diciendo 1F, o realmente se envía por serial la cadena "1F" (dos bytes, más algún terminador de cadena).
Para Top Beach Blue Camiseta Timezone Azul Life uniform Mujer EWIqnFH7n

surbyte

  • Global Moderator
  • Brattain Member
  • Posts: 21,480
  • Karma: 1147  [add]
  • Antes de preguntar busca en Google: Arduino tu_tema y lee las normas del foro.
16692023 A8l2ukzn Con Mujer Manga Blaumax Larga Ropa Blusa Alba Para xUOwaZqH
Re: Serial.read() Hexadecimal a Decimal
#11
May 21, 2015, 07:39 pm
Aceptado el error, Serafín.

noter

  • Edison Member
  • Posts: 2,036
  • Karma: 220  [add]
Re: Serial.read() Hexadecimal a Decimal
#12
May 21, 2015, 11:13 pm
Productos Mujer All Encuentra Ropa De For En 7 Mankind Línea 6gE4wEq
No pasa nada, Ricardo. Ego te absolvo... 

Pero me ha extrañado esa ofuscación en tí, que sé que conoces perfectamente a nuestros amigos los bits

Un saludo.

Print
Go Up Mujer Para Postcard A From Camiseta Brighton Hombrega De Larga
Pages: [1]