Ajuda com a class printDetails do rádio nrf24l01 e stdout [RESOLVIDO]

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.

Exibições: 70

Responder esta

Respostas a este tópico

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!

RSS

© 2022   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço