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.
Bota a parte do código, pois parece q vc ta mandando um serial.print([variavel],HEX);
É isso mesmo, mas tentei com outras maneiras e também não consegui .-.
Mas, de qualquer formar, está postado o código do receptor.
#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);
}
}
Serial.print((char)buf[i] );
e hello para ti também.
Muda o tipo de variável de uint8_t para char na buf[]
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
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 :
char a = 0;
Ela é signed por defeito ou seja inclui valores negativos
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.
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.
Define sujeira...
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.
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.
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...