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.
Tags:
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 display que estou utilizando é um ST7920_128X64, usando a biblioteca U8GLIB.
http://www.baudaeletronica.com.br/display-lcd-grafico-128x64.html
https://www.engineersgarage.com/electronic-components/graphics-lcd
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por