Go Down

Topic: Serial.print() ASCII (Read 2995 times) previous topic - next topic

Pixes

Olá pessoa =D. É o seguinte, eu to fazendo um código de transmissão RF e quero, por enquanto, apenas transmitir textos. Porém no meu serial monitor recepitor, não está aparecendo o texto em si - ACSII(texto humano)- mas sim, em hexadecimal - veja a imagem. Queria saber se há alguma maneira de mostrar o texto que eu quero ao invés de códigos numéricos.


mmoscz

Bota a parte do código, pois parece q vc ta mandando um serial.print([variavel],HEX);
4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP

Pixes

#2
Feb 23, 2013, 12:46 pm Last Edit: Feb 23, 2013, 12:50 pm by Pixes Reason: 1
É isso mesmo, mas tentei com outras maneiras e também não consegui .-.

Mas, de qualquer formar, está postado o código do receptor.


Code: [Select]
#include <VirtualWire.h>

int LED = 13;
void setup()
{
 Serial.begin(9600);
 Serial.println("setup");
 vw_set_ptt_inverted(true);
 vw_setup(2000);
 vw_set_rx_pin(9);
 vw_rx_start();
   pinMode(LED, OUTPUT);  
}
void loop()
{
   uint8_t buf[VW_MAX_MESSAGE_LEN];
   uint8_t buflen = VW_MAX_MESSAGE_LEN;
   digitalWrite(13, LOW);
   if (vw_get_message(buf, &buflen))
   {
int i;

       digitalWrite(LED, HIGH);
Serial.print("Got: ");

for (i = 0; i < buflen; i++)
{
   Serial.print(buf[i], HEX);
   Serial.print(' ');
}
Serial.println();
       digitalWrite(LED, LOW);
   }
}



bubulindo

Code: [Select]
Serial.print((char)buf[i] );

e hello para ti também. :)

Muda o tipo de variável de uint8_t para char na buf[]
This... is a hobby.

tretas

Boas,

Ora aqui esta uma boa duvida ... que já tenho a algum tempo ... nunca sei que tipo de variável usar

o tipo de variável char não é a mesma coisa que um signed int ? ou seja de -128 a + 127, e sendo uint8_t a mesma coisa que um BYTE (0-255)

e visto que a tabela ascii "normal" é de 0 a 127, não vejo que diferença era ter ... ou estou enganado ?

Cpts

Zé tretas
Arduino Mega 2560
Arduino Nano
Arduino UNO Rev3
Raspberry PI Model B
EasyPIC v4

HugoPT

#5
Feb 24, 2013, 07:40 pm Last Edit: Feb 24, 2013, 07:51 pm by HugoPT Reason: 1
Quote
o tipo de variável char não é a mesma coisa que um signed int ?

Nao.Um signed int armazena 16 bits que vai de -32766 a 32765 por ser signed. Se fosse unsigned ia de 0 a 65535 por omitir os valores negativos.
Já um uint8_t é um int unsigned mas de apenas 8 bits.
Na pratica o que o uint8_t  ocupa é o mesmo que o unsigned char.
Apesar de existir casos onde usar os dois é irrelevante quando se quer armazenar caracteres o ideal é usar variaveis do tipo char, pois se quiseres usar Strings basta colocar o caracter terminador no fim do vector de chars.
Se usasses variaveis do tipo byte depois se quiseres trata-lo como um char tens de lhe fazer um cast para ele te dar o codigo ascii correspondente ao valor hex que ele tem armazenado.
Se declares um char assim :
Code: [Select]
char a = 0;
Ela é signed por defeito ou seja inclui valores negativos
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

bubulindo

uint8_t, byte e unsigned char são a mesma coisa...

Eu uso esta regra para definir o tipo das minhas variáveis:

É texto? Sim: char, Não: Seguinte.
Pode ser negativo? Sim: signed, Não: unsigned.
Cabe de -127 a 127 ou 0 a 255? Sim: char, Não: Seguinte.
Cabe de -32000 a 32000 ou de 0 a 65000?: Sim: int, Não: Seguinte.
Cabe de ....

Apesar de perceber o motivo pelo qual se criam estas nomenclaturas de uint8_t ou byte ou ui8 e por aí adiante, mas como 99,9% do meu código não é para portar por ser normalmente específico da plataforma que estou a usar, normalmente uso os tipos base do C para o que quero. Confunde muito menos.
This... is a hobby.

Pixes

Fala aí pessoal. Não pude testar o código no final de semana, pois o laboratório da minha escola estava fechado. Mas hoje, quando testei a dica do nosso amigo bubulindo. Funcionou =D, mas ficou com "sujeira" vindo junto na transmissão.

bubulindo

This... is a hobby.

mmoscz


Fala aí pessoal. Não pude testar o código no final de semana, pois o laboratório da minha escola estava fechado. Mas hoje, quando testei a dica do nosso amigo bubulindo. Funcionou =D, mas ficou com "sujeira" vindo junto na transmissão.

Acho que o que você define como "sujeira", deve ser alguns bytes, que não são apresentados como caracteres ALFA-NUMÉRICOS + PONTUAÇÃO, eu aconselho você a colocar
o código assim.
Code: [Select]

Serial.print((char)buf[i] );
Serial.print(" ");
Serial.print(buf[i] );


Você verá que esses bytes, não devem estar entre 20 e 7E que são os caracteres imprimíveis...
4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy