Tiempo de imprimir datos en pantalla muy alto

Hola
Estoy realizando un proyecto que consiste en un laptimer para un kart.
Por pantalla quiero imprimir rpm, velocidad, temperatura y tiempos, el tema es que utilizando la función millis para ver cuanto tarda en ejecutar el código, me va aproximadamente por los 200 milisegundos, lo que para intentar hacerlo un poco en tiempo real me parece demasiado.

Tengo dos cosas que me consumen muchísimo tiempo, una es el sensor de temperatura que tarda nada menos que 800 ms en obtener el valor de la temperatura, y otra es el imprimir los datos en el lcd

Para intentar arreglar lo de la temperatura, lo que hice fue un bucle while con un contador, con lo que solo miro la temperatura cada 3 segundos que es mas que suficiente y eso me aligera el código

pero para la pantalla no se como agilizarlo. Utilizo la librería u8glib y el lcd que uso es un lcd gráfico 128x64 de 20 pins. lo tengo conectado en paralelo.
os enseño el codigo

#include "U8glib.h"
#include <OneWire.h>
#include <DallasTemperature.h>

// Direcciones de los sensores de temperatura
DeviceAddress Temperatura1;
int contador;
// Temperatura
int DS18S20_Pin = 8; //Pin de entrada donde conectamos el sensor
OneWire ds(DS18S20_Pin);  
DallasTemperature sensors(&ds);
float TemperaturaA;

//variables para la interrupcion revolucion
int tiempo; //variable para la interrupcion revolucion que guarda el valor del tiempo en el momento de la interrupcion
int tanterior=0;  //guarda el valor del tiempo para compararlo en el siguiente
int tpulso;    // valor resultado de comparar tiempo con tanterior
long tarda;
long mucho;

//variables para calculo de las rpm
int pinon=10;
int corona=81;
int rpm;  //valor de rpm para mostrar por la pantall
float r;  //relacion de transmision
float tiem; //variable intermedia para calculo
float tiem2; //otra variable intermedia

//calculo de la velocidad
int velocidad;

//calculo de tiempos
int time;


// configuracion de los pins del lcd
U8GLIB_ST7920_128X64_1X u8g(25, 26, 27, 28, 29, 30, 31, 32, 24, 22, 23);                 // SPI Com: SCK = en = 13, MOSI = rw = 11, CS = di = 0

void setup() {
   // Buscamos el sensor de temperatura
  sensors.begin();
  
  //configuro interrupcion 0
  attachInterrupt(0, revolucion, RISING);
  attachInterrupt(1,cronometro,RISING);
}
void draw(void) {
  
  
  u8g.setFont(u8g_font_unifont);
  
  //imprimo datos de temperatura
  u8g.drawStr( 50, 35,"C");
  u8g.setPrintPos(10,35);
  u8g.print(mucho);
  u8g.drawStr( 40, 40,"Cq");
  u8g.drawStr( 52, 35,"Cq");
  u8g.drawStr( 55, 50,"Cq");
  u8g.drawStr( 59, 22,"Ce");
  u8g.drawStr( 50, 35,"Cr");
  u8g.drawStr( 50, 35,"Ce");
  u8g.drawStr( 50, 0,"C3");
  u8g.drawStr( 50, 35,"Crqw");
  u8g.drawStr( 50, 35,"Ce");
  u8g.drawStr( 50, 35,"C3q");
  u8g.drawStr( 50, 35,"C3");
  u8g.drawStr( 50, 35,"Cr3");
  u8g.drawStr( 50, 35,"Cer");
  u8g.drawStr( 50, 35,"Ct");
  u8g.drawStr( 50, 35,"Cq");
  u8g.drawStr( 20, 34,"Cw");
  u8g.drawStr( 50, 35,"Ce");
  u8g.drawStr( 60, 35,"Cr");
  u8g.drawStr( 50, 35,"Cq");
 

  
}

void loop(void) {
  
  //inicializo contador
  contador=0;
  //Tomo la temperatura del sensor
  sensors.requestTemperatures();
  TemperaturaA = sensors.getTempCByIndex(0);
  

 
 
  //calculo las rpm del motor
  
 while(contador<1){
  r=corona/pinon;  //relacion de transmision
  tiem=tpulso*0,000001;  //paso tiempo a segundos
  tiem2=15/tiem;  //calculo intermedio
  rpm=tiem2*r;  //calculo final
  
  //calculo velocidad
  velocidad=1,58336/tiem;
 
 tarda=millis();
  // Refresco pantalla
  u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );
  
mucho=millis()-tarda;

 contador++;
 
 }

}

void revolucion()
{
  tiempo=micros();
  tpulso=tanterior-tiempo;
  tanterior=tiempo;
  
}

void cronometro()
{
 tiempo=millis();
}

donde trae imprimo la temperatura puse todo eso para simular como sería imprimir todos los caracteres que necesito.
¿Alguna idea?, lo que mas consume es u8g.setPrintPos(10,35);
u8g.print(mucho);

alguna otra forma de imprimir una variable, alguna idea?
muchas gracias
un saludo!

puedes hacer varias cosas a mi parecer,

  1. ponerle un pulsador, para que solo cuando lo oprimas te muestre el resultado actual de lo que necesitas ver, no es la mas eficiente.

  2. Imprime en la LCD solo cuando alguna variable cambie y realiza cambios solo a esta, esto lo puede hacer con interrupciones por cambio de valor, o si no con un condicional "if" para que este se ejecute solo cuando el valor de la variable cambie, ya sea tu sensor de temperatura o la que sea, eso ayudara a algunas variables a que no impriman cuando no cambian y ahorras tiempo de impresión.

  3. coloca otro arduino y realiza comunicación serial entre los 2, para que uno se encargue de revisar tus sensores y otro de imprimir en el lcd (esta es la mejor opción).

Realmente le respondes a alguien que no volvió mas desde el 2014?

Aprecio tu respuesta pero no tiene sentido en este contexto.

Normas del foro

Las 6 reglas básicas que debes respetar y cumplir

  1. Enlaces con etiquetas
  2. imagenes con etiquetas
  3. códigos con etiquetas
  4. No respondas mensajes con 120 sin movimientos que además te dicen Warning en letras rojas.

Warning: this topic has not been posted in for at least 120 days.
Unless you're sure you want to reply, please consider starting a new topic.

  1. No escribir con mayúsculas ni título ni el cuerpo del mensaje.
  2. No doble postees. Si inicias un tema no puedes empezar otro similar en la misma sección, en otra sección o en otro idioma.