Estou precisando desenhar um gráfico de temperatura X tempo em um LCD 128x64 ligado em um arduino.

Já tenho meu sensor de temperatura (eixo Y) operando normalmente, e o contador do tempo (eixo X). Usando uma taxa de atualização de 1s, eu consigo fazer o ponto andar na tela em tempo real mostrando a temperatura atual, porém eu preciso ir "desenhando" o gráfico em tempo real, para ficar uma linha mostrando a evolução da temperatura. 

Alguém tem alguma ideia de como fazer isso ?

Grato.

Exibições: 1270

Responder esta

Respostas a este tópico

Obrigado Murta !

Na realidade não achei nada nesses links que ajude. Eu estou com o manual da u8glib, e já li completo e parece que pela biblioteca eu não consigo fazer isso. Esse display gráfico sempre atualiza a tela toda a cada escrita, se ainda fosse como as bibliotecas LiquidCrystal, onde mandamos o comando para limpar a tela, seria mais fácil pois era só escrever os novos pontos sem mandar limpar a tela, e ficaria tudo desenhado lá.

A u8glib funciona assim:

void loop(void) {
// picture loop
u8g.firstPage();
do {
draw();
} while( u8g.nextPage() );
}

Logo dá para perceber que ela está sempre atualizando a tela toda.

Eu estou tentando criar um array de X[] e Y[], aí gravo a cada 1 segundo o valor em posições diferentes, e em seguida chamar a escrita de todas as posições, uma por uma, mas ainda não conseguir fazer isso. E também não sei quanto de memória vai usar, pois se ficar rodando uns 10 minutos (que é o máximo que vou precisar) vai usar bastante memória, e meu sketch até agora já está usando 84% da memoria do NANO.

Boa tarde, 

Favor informar qual é o seu display (marca, modelo, link) .

O projeto já está pronto e operando com esse display. É um controlador de temperatura com 4 etapas(rampas), com 9 memórias. O gráfico é para melhorar mais o projeto final e poder mostrar as curvas de evolução de temperatura para um melhor ajuste de offset. Uma interface para PC seria ótimo, e deve ser um próximo passo para melhorar o projeto, mas eu ainda não sei trabalhar com essa parte.

Opa, consegui hoje a tarde fazer o gráfico:

Y[segundos] = map(read_temp,0,255,62,0); //temperatura mapeada para o gráfico
X[i] = map(segundos,0,tempo_total,1,128); //tempo mapeado para o gráfico

for(i=0; i<=segundos; i++){ u8g.drawLine(X[i],Y[i],X[i],Y[i]); } Usei MAP para a temperatura lida que vai até 255º caber no display de 64 pontos de altura, e o mesmo para o tempo, com 128 pontos no total. O mapeamento da temperatura é invertido, ou seja, quando for lida a temperatura máxima (255ºc) o valor será mostrado a parte superior do display (pixel zero). Usei um laço for e deu certo, ele vai desenhando os pontos conforme a evolução do tempo e temperatura. Só estou com um problema agora, que o código completo está grande demais, depois de um tempo rodando o gráfico começa a ficar maluco, aparecendo uns valores estranhos e reseta o arduino. Acho que está ocupando toda a memória disponível

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço