Go Down

Topic: Serial.print() ASCII (Read 1 time) 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[]
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

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.
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

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

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

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