Boa tarde.
Estou tentando visualizar o conteúdo do "printDetails" do rádio nrf24l01.
Na documentação da biblioteca diz:
Warning:
Does nothing if stdout is not defined. See fdevopen in stdio.h
https://maniacbug.github.io/RF24/classRF24.html#adc95213ed4c8569a90...
Eu não sei definir o stdout no Arduino.
Alguém pode me ajudar?
Obrigado.
Tags:
Olá novamente, Rodrigo.
O que ocorre, é que a rotina printdetails() da RF24 usa a rotina de saída printf() da biblioteca do C.
Quando aqueles dois gênios fizeram o C ( Dennis Ritchie e Brian Kernighan ), proveram uma série de rotinas de I/O ( entrada e saída ), mas deixaram para o usuário definir em quais dispositivos seriam feitas as leituras e escritas.
Este serviço de entrada e saída ( I/O ) é feito através de um conjunto de rotinas, entre as quais o printf, que a biblioteca do RF24 usa na função printDetails().
O printf() usa um "arquivo" genérico chamado stdout para escrever os caracteres.
Então, para o printf() funcionar, é necessário "ligá-lo" ao stdout.
Isto pode ser feito de várias maneiras diferentes.
A que eu acho melhor, porque não altera a biblioteca do C, é a que está no anexo.
Sugiro que você experimente primeiro o sketch do anexo para ver se o printf() funciona e depois inclua o que tem nele no teu código que usa a printdetails().
E, claro, depois diz pra gente se funcionou ou não.
Abração e sucesso!
P.S. Se o anexo não for, avisa que dou um jeito de enviar de outra forma
2ª tentaiva de anexar!
Acho que não consigo anexar os arquivos por que estou usando o Ópera como browser.
Vai por aqui mesmo ( não me xinga, RV mineirin :-)
#include <stdio.h> // < Nao esquece de incluir o stdio.h, se nao nem compila!!!
// arquivo necessario para o stdout
static FILE SerialOut = {0} ;
// Rotina para escrever caracter no stdout
static int uart_putchar( char c, FILE *stream )
{
Serial.write( c ) ;
return 0 ;
}
void setup()
{
// put your setup code here, to run once:
// inicializa a UART ( isto eh padrao :-)
Serial.begin( 115200 ) ;
// Prepara o buffer que o stdio vai precisar
// inclusive dizendo qual vai ser a rotina que vai escrever os caracteres ( uart_putchar )
fdev_setup_stream( &SerialOut, uart_putchar, NULL, _FDEV_SETUP_WRITE);
// Diz para o compilador que o stdout vai ser o SerialOut
stdout = &SerialOut ;
// Testa para ver se o printf() funciona
printf( "Teste de printf()\n" ) ;
}
void loop() {
// put your main code here, to run repeatedly:
}
Boa tarde.
Funcionou PERFEITO!!
Obrigado mais uma vez Mestre.
Abraços.
Fico feliz que funcionou.
Apenas um lembrete:
Se você quiser direcionar a saída da printDetails para o LCD ao invés do Monitor Serial, é só substituir a chamada da Serial.write( c ) na rotina uart_putchar() pela chamada da rotina que escreve um caracter no LCD.
Claro, tem que ter todas as declarações normais para fazer o LCD funcionar, o #include da biblioteca, o instanciamento do objeto LCD, etc.
Muito sucesso nos projetos!
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por