Go Down

Topic: Serial.print() ASCII (Read 2370 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