Continuo com esse problema:

Como fazer pra ler o Serial.print() e Serial.println() ?

Tentei:

if(Serial.available() > 0){ 

mas só imprime o que é digitado no topo do serial monitor.

e também tentei:

if(Serial.println(){

mas só imprime "branco" / nada;

Preciso pegar todo o log do serial monitor e colocar em uma variável String,

para enviar para um txt ou html.

Sei que poderia fazer isso em cada "Serial.print e Serial.println" que tenho,

mas seria muito trabalhoso e consumiria muito da ram (meu código tem umas 

2000 linhas.

Estou enviando o código junto com html e js, caso alguém possa me ajudar...

desde já agradeço.

PS: O código é para IDE Arduino, estou usando o ESP8266 (Wemos D1 R2).

READ_PRINT.rar

Exibições: 408

Responder esta

Respostas a este tópico

Quando tem dados a serem lidos no buffer, você detecta com Serial.available(). No loop você deve fazer algo como:
while (Serial.available()){

    char valor = Serial.read();

}

Isso vai ler byte a byte até esvaziar o buffer. Se estiver enviando, por exemplo, line feed ('\n'), pode usar a função readUntil.

Na documentação você encontra todas as funções disponíveis.
https://www.arduino.cc/reference/en/language/functions/communicatio...

Eu particularmente prefiro ler byte a byte e armazenar em um array. No meu blog tem centenas de artigos que podem lhe ajudar.

www.dobitaobyte.com.br

Olá Djames...

 Eu já havia feito algo parecido com isso, mas o que preciso é pegar tudo que já esta no serial monitor...

tipo: o que chegou via Serial.print e Serial.println e colocar tudo em uma String pra enviar para um txt ou html.

Dessa maneira que vc citou consigo pegar somente o que foi digitado lá no topo do monitor serial.

Tenho pouco conhecimento em arduino / Esp8266, mas preciso muito disso (guardar tudo que passa pelo Serial monitor)

Quando uso:

if(Serial.available() > 0){

Somente o que é digitado no topo do serial monitor consigo armazenar.

Quando uso:

if(Serial.println()){

a variável fica vazia, e o serial monitor fica movimentando....

Desculpa meu pouco conhecimento no assunto, pra resumir: quero armazenar tudo que passa pela tela do serial monitor, pra fazer um SERIAL MONITOR REMOTO, via html...é essa a idéia.

Uma função pode ou não ter retorno e o retorno não precisa ser o mesmo tipo que manipula. Você "tem" que armazenar previamente em uma variável antes de imprimir na serial.

Na documentação tem uma parte chamada ReturnsO print está descrito assim:

print() returns the number of bytes written, though reading that number is optional. Data type: size_t.

Ou seja, o retorno da função é o número de bytes escritos e o tratamento do retorno é opcional. 

O que for digitado no terminal serial e enviado com Enter deve ser lido com Serial.read() ou outra função semelhante que lê do buffer.

LEIA a documentação, você precisa de conceitos. O if que você está fazendo vai sempre retornar verdadeiro, porque sempre vai ser maior que 0, já que que println imprime LF.

Esse vídeo é sobre "outro" tema, mas tem um exemplo claro de comunicação Serial.
https://youtu.be/6kqDglc9aPk

Bom dia...

obrigado pelas dicas, vou tentar aqui ok.

conseguindo posto aqui.

Boa noite,

Acho que esse código possa ser útil:

USB MIDI Host Tests

https://github.com/bitluni/UsbMidiHostTests

Já usei parte desse código para capturar os dados da Serial1 e enviar para a outra Serial (USB)  de um mesmo Arduino Pro Micro. Esse Arduino Pro Micro tem duas portas seriais. Uma serial de comunicação direta com a USB e uma outra Serial usando os pinos TX e RX. 

https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide

https://blog.eletrogate.com/gamepad-de-pc-arduino-pro-micro/

Esse outro tutorial é sobre ESP8266 :

Sending Data From an Arduino to the ESP8266 via Serial

https://randomnerdtutorials.com/sending-data-from-an-arduino-to-the...

Bom dia..

vou ler o material recomendado e tentar, qualquer novidade posto aqui ok.

Muito obrigado.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço