Problemas con pines digitales

Hola a todos
Estoy haciendo un ordenador de abordo para mi moto con un Nano y una lcd 20x4 I2C

Uso 3 entradas digitales (D5, D8 y D9) para 3 interruptores que tengo en la moto y que me escriba en la lcd si esta activo o no. Ya esta con sus resistencias para bajar voltaje de 12 a 5 v.
También tiene 2 termómetros y medidor de voltaje con una actualización cada 3 segundos y tengo problemas con esto:

1º ERROR: Al activar el D9, en la lcd marca como que está activo pero también marca que el D5 lo está.
2º ERROR: Al activar el D5, en la lcd marca como que está activo pero también marca que el D8 lo está.
3º ERROR: La temperatura actualiza bien pero el voltaje esta oscilando todo el tiempo sin respetar el tiempo

/*
-------------------------------------
Pantalla I2C 20x4
Pantalla ---- Arduino
 GND ---------- GND
 VCC ---------- +5v
 SDA ---------- A4
 SLC ---------- A5
--------------------------------------
Sensor Temperatura 1 -- 10K --- pin A1
Sensor Temperatura 2 -- 10K --- pin A2
--------------------------------------
Voltímetro:
Positivo - 100K --- pin A0
Negativo -- 10K --- pin A0

--------------------------------------
*/
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);

char buffer[20] = " ";
char* buffn = " ";

//voltaje
int 
analogInput = 0,
value = 0;
float 
vout = 0,
vin = 0,
R1 = 100000.0,
R2 = 10000.0;

// temperatura
float
tempSensor1C = 0,        // Variable que almacena la temperatura del sensor 1 en grados centigrados 
tempSensor2C = 0;        // Variable que almacena la temperatura del sensor 2 en grados centigrados

//Actualizacion temperatura y voltaje
unsigned long
t_ActualT = 0,
t_AnteriorT = 0,
t_ActualV = 0,
t_AnteriorV = 0;


constexpr unsigned long
t_refrescoT = 3000; // Tiempo de actualización


//Caracter termometro
byte termometro[8] = {
  0b00100,
  0b01100,
  0b00100,
  0b01100,
  0b00100,
  0b01110,
  0b10001,
  0b01110
};
void setup() {
  
    lcd.begin(20,4); 
    lcd.init();
    lcd.backlight();
    lcd.clear();
    lcd.setCursor(4, 0);
    lcd.print(F("BIENVENIDO"));
    delay(2500);

    
    lcd.createChar(0, termometro);
}

void loop() {
  voltaje();

    lcd.setCursor(0, 0);
    lcd.print("B 1");
    lcd.setCursor(0, 1);
    lcd.print("B 2");
    lcd.setCursor(0, 2);
    lcd.print("B 3");

//temperatura 1 Motor   
 
    lcd.setCursor(0,3);
    lcd.write(byte(0));
    lcd.setCursor(5, 3);
    lcd.print((char)223);
    lcd.setCursor(6, 3);
    lcd.print("C");
    
    lcd.setCursor(2, 3);
    lcd.print(tempSensor1C,0);
    

//temperatura 2 Exterior
    
    lcd.setCursor(11,3);
    lcd.write(byte(0));
    lcd.setCursor(18, 3);
    lcd.print((char)223);
    lcd.setCursor(19, 3);
    lcd.print("C");

    if (tempSensor2C < 0){
      lcd.setCursor(13, 3);
      lcd.print(tempSensor2C,1);
    }
    else{
    if (tempSensor2C >= 9){
      lcd.setCursor(13, 3);
      lcd.print(tempSensor2C,1);
    }
    }
    if (tempSensor2C < 0){
      lcd.setCursor(13, 3);
      lcd.print(tempSensor2C,1);
    }
    else{
    if (tempSensor2C <= 9){
      lcd.setCursor(14, 3);
      lcd.print(tempSensor2C,1);
    }
    }
    
//Actualizacion de datos
  t_ActualT = millis();
  if (t_ActualT - t_AnteriorT >= t_refrescoT) {
    t_AnteriorT = t_ActualT;
    lcd.clear();
    tempSensor1C = temp(analogRead(A1));
    tempSensor2C = temp(analogRead(A2));
    vin = temp(analogRead(A0)); 

  }

    if (digitalRead(8) == HIGH) {
      lcd.setCursor(7, 0);
      lcd.print("ON ");
  }
  else{
    if (digitalRead(8) == LOW){
      lcd.setCursor(7, 0);
      lcd.print("OFF");
    }
}
  
  if (digitalRead(5) == HIGH) {
      lcd.setCursor(7, 1);
    lcd.print("ON ");
  }
  else
  {
    if(digitalRead(5) == LOW){
      lcd.setCursor(7, 1);
      lcd.print("OFF");
    }
}
  if (digitalRead(9) == HIGH) {
    lcd.setCursor(7, 2);
    lcd.print("ON ");
  }

  else{
    if (digitalRead(9) == LOW){
      lcd.setCursor(7, 2);
      lcd.print("OFF");
    }
  }
    lcd.setCursor(16, 0);
    lcd.print(vin,1);
    lcd.setCursor(16, 1);
    lcd.print("Batt");
  }

//Temperatura
float temp(int tempReading) {
  float
    tempC = 0,
    tempK = 0;
  tempK = log(10000.0 * ((1024.0 / tempReading - 1)));
  tempK = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * tempK * tempK)) * tempK);
  tempC = tempK - 273.15;
  return tempC;
  }

//Voltaje
void voltaje() {
  value = analogRead(0);
  vout = (value * 5.0) / 1024.0;
  vin = vout / (R2 / (R1 + R2));
}

Te falta en el setup establecer los pines 5, 8 y 9 como pines digitales.

pinMode(5,INPUT);
pinMode(8,INPUT);
pinMode(9,INPUT);

Si no haces esto, las entradas, aunque leas el estado, tendran un estado flotante, lo que hará que se comporte de manera extraña.

Por otro lado, tienes dos funciones temp() y voltaje(). Mientras que temp la lees cada x tiempo usando millis(), voltaje está dentro del loop, asi que constantemente se está actualizando, por eso fluctua tanto.

victorjam: Te falta en el setup establecer los pines 5, 8 y 9 como pines digitales.

Los he escrito pero me sigue igual

victorjam: Por otro lado, tienes dos funciones temp() y voltaje(). Mientras que temp la lees cada x tiempo usando millis(), voltaje está dentro del loop, asi que constantemente se está actualizando, por eso fluctúa tanto.

Esto no se como lo puedo solucionar, soy novato. Me podrías dar la solución?

A ver si esto ayuda. Para mi tienes un error con voltage y vin, revisa lo que te comento.

/*
-------------------------------------
Pantalla I2C 20x4
Pantalla ---- Arduino
 GND ---------- GND
 VCC ---------- +5v
 SDA ---------- A4
 SLC ---------- A5
--------------------------------------
Sensor Temperatura 1 -- 10K --- pin A1
Sensor Temperatura 2 -- 10K --- pin A2
--------------------------------------
Voltímetro:
Positivo - 100K --- pin A0
Negativo -- 10K --- pin A0
--------------------------------------
*/
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);

char buffer[20] = " ";
char* buffn = " ";

//voltaje
int
analogInput = 0,
value = 0;
float vout  = 0,
      vin   = 0,
      R1 = 100000.0,
      R2 = 10000.0;

// temperatura
float tempSensor1C = 0,        // Variable que almacena la temperatura del sensor 1 en grados centigrados
      tempSensor2C = 0;        // Variable que almacena la temperatura del sensor 2 en grados centigrados

//Actualizacion temperatura y voltaje
unsigned long t_ActualT = 0,
              t_AnteriorT = 0,
              t_ActualV = 0,
              t_AnteriorV = 0;

bool status5, status8, status9,
     status5Ant, status8Ant, status9Ant;              

constexpr unsigned long t_refrescoT = 3000; // Tiempo de actualización

//Caracter termometro
byte termometro[8] = {
                      0b00100,
                      0b01100,
                      0b00100,
                      0b01100,
                      0b00100,
                      0b01110,
                      0b10001,
                      0b01110
                    };

void setup() {
    pinMode(5,INPUT);
    pinMode(8,INPUT);
    pinMode(9,INPUT);
    lcd.begin(20,4);
    lcd.init();
    lcd.backlight();
    lcd.clear();
    lcd.createChar(0, termometro);
    lcd.setCursor(4, 0);
    lcd.print(F("BIENVENIDO"));
    delay(2500);
}

void loop() {
 

  //Actualizacion de datos
  t_ActualT = millis();
  
  if (t_ActualT - t_AnteriorT >= t_refrescoT) {
      t_AnteriorT = t_ActualT;
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("B 1");
      lcd.setCursor(0, 1);
      lcd.print("B 2");
      lcd.setCursor(0, 2);
      lcd.print("B 3");
      tempSensor1C = temp(analogRead(A1));
      tempSensor2C = temp(analogRead(A2));
      muestroTemp();
      voltaje();
      vin = temp(analogRead(A0)); // <== esto no puede estar bien 
                                  // porque temp(AnalogRead(A0)??? si ahi esta la medicion de la bateria?)
      lcd.setCursor(16, 0);
      lcd.print(vin,1);
      lcd.setCursor(16, 1);
      lcd.print("Batt");
  }

  status8 = digitalRead(8);
  if (status8 && !status8Ant) {
      lcd.setCursor(7, 0);
      lcd.print(status8?"ON ":"OFF");
  }
  status8Ant = status8;
      
  status5 = digitalRead(5);
  if (status5 && !status5Ant) {
      lcd.setCursor(7, 1);
      lcd.print(status5?"ON ":"OFF");
  }
  status5Ant = status5;

  status9 = digitalRead(9);
  if (status9 && !status9) {
      lcd.setCursor(7, 2);
      lcd.print(status9?"ON ":"OFF");
  }
  status9Ant = status9;
 
}  
//Temperatura
float temp(int tempReading) {
  float tempC, tempK;
  tempK = log(10000.0 * ((1024.0 / tempReading - 1)));
  tempK = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * tempK * tempK)) * tempK);
  tempC = tempK - 273.15;
  return tempC;
}

//Voltaje
void voltaje() {
  value = analogRead(A0);
  vout = (value * 5.0) / 1024.0;
  vin = vout / (R2 / (R1 + R2));
}

void muestroTemp() {
  //temperatura 1 Motor   
 
    lcd.setCursor(0,3);
    lcd.write(byte(0));
    lcd.setCursor(5, 3);
    lcd.print((char)223);
    lcd.setCursor(6, 3);
    lcd.print("C");
   
    lcd.setCursor(2, 3);
    lcd.print(tempSensor1C,0);
   

    //temperatura 2 Exterior
   
    lcd.setCursor(11,3);
    lcd.write(byte(0));
    lcd.setCursor(18, 3);
    lcd.print((char)223);
    lcd.setCursor(19, 3);
    lcd.print("C");
    
    if (tempSensor2C < 0){
        lcd.setCursor(13, 3);
        lcd.print(tempSensor2C,1);
    }
    else {
          if (tempSensor2C >= 9){
            lcd.setCursor(13, 3);
            lcd.print(tempSensor2C,1);
          }
    }

    if (tempSensor2C < 0){
      lcd.setCursor(13, 3);
      lcd.print(tempSensor2C,1);
    }
    else {
          if (tempSensor2C <= 9){
            lcd.setCursor(14, 3);
            lcd.print(tempSensor2C,1);
          }
    }
}

Ahora todo el refrezco se hace al intervalo de millis()
No se si se muestra adecuadamente.