Spannung eines Sensor mittels Schieberegis. auf vier 7-Segmentanzeigen anzeigen

Hallo zusammen, ich bräuchte mal eure Hilfe bei einem programmiertechnischen/rechnerischen Problem. Ich habe vier 7-Segmentanzeigen die über vier Schieberegister (74HC595) angesteuert werden. Dazu kommt noch ein analoger IR-Sensor. Ich möchte mir den Spannungswert von dem analogen Sensor auf den 7-Segmentanzeigen anzeigen lassen bloß ich hab keinen Plan wie ich das hin bekomme.

Zum Programm: Ich hab mir ein Array angelegt wo ich die Dezimalwerte zum Anzeigen der jeweiligen Ziffer auf der 7-Segment-Anzeige hinterlegt habe. Diese Dezimalwerte schiebe ich dann in die Schieberegister.

int taktPin=11; //SH_CP
int speicherPin=12; //ST_CP
int datenPin=13; //DS 

int zahlen[10]={63,6,91,79,102,109,125,7,127,111}; //Zahlen auf 7Seg 0;1;2;3;4;5;6;7;;8;9
int zahlenP[10]={191,134,219,207,230,237,253,135,255,239}; //Zahlen mit Punkt auf 7Seg 0.;1.;2.;3.;4.;5.;6.;7.;8.;9.

int sensorpin = 9;   // IR Sensor

int Seg1 = 0;   //Wert für erstes 7-Segment
int Seg2 = 0;   //Wert für zweites 7-Segment
int Seg3 = 0;   //Wert für drittes 7-Segment
int Seg4 = 0;   //Wert für viertes 7-Segment

float digid=0.0048828125;   //  5V/1024=
float V=0;   //Spannung in Volt 

void setup(){
  pinMode(taktPin, OUTPUT);
  pinMode(speicherPin, OUTPUT);
  pinMode(datenPin, OUTPUT);
}
void loop(){
  V = digid * analogRead(sensorpin);
  
    Seg1 = V*1000;
    Seg2 = V*100;
    Seg3 = V*10;
    Seg4 = V;
        
  digitalWrite(speicherPin, LOW);
  shiftOut(datenPin, taktPin, MSBFIRST,zahlenP[Seg4]); //4.Segment (höchste Wert MSB)
  shiftOut(datenPin, taktPin, MSBFIRST,zahlen[Seg3]); //3.Segment
  shiftOut(datenPin, taktPin, MSBFIRST,zahlen[Seg2]); //2.Segment
  shiftOut(datenPin, taktPin, MSBFIRST,zahlen[Seg1]); //1.Segment (niedriegsten Wert LSB)
  digitalWrite(speicherPin, HIGH); 
  delay(200);
}

Bei ganzen Zahlen (zB. Digid anzeigen) habe ich es bisher immer so gemacht, aber bei Kommazahlen komme ich so nicht weiter.

int taktPin=11; //SH_CP
int speicherPin=12; //ST_CP
int datenPin=13; //DS 

int zahlen[10]={63,6,91,79,102,109,125,7,127,111}; //Zahlen auf 7Seg 0;1;2;3;4;5;6;7;;8;9
int zahlenP[10]={191,134,219,207,230,237,253,135,255,239}; //Zahlen mit Punkt auf 7Seg 0.;1.;2.;3.;4.;5.;6.;7.;8.;9.

int sensorpin = 9;   // IR Sensor

int Seg1 = 0;   //Wert für erstes 7-Segment
int Seg2 = 0;   //Wert für zweites 7-Segment
int Seg3 = 0;   //Wert für drittes 7-Segment
int Seg4 = 0;   //Wert für viertes 7-Segment

void setup(){
  pinMode(taktPin, OUTPUT);
  pinMode(speicherPin, OUTPUT);
  pinMode(datenPin, OUTPUT);
}
void loop(){
  wert = analogRead(sensorpin);
  Seg1 = wert/1000;
  Seg2 = (wert%1000)/100;
  Seg3 = (wert%100)/10;
  Seg4 = wert%10;

  digitalWrite(speicherPin, LOW);
  shiftOut(datenPin, taktPin, MSBFIRST,zahlen[Seg4]); //4.Segment (höchste Wert MSB)
  shiftOut(datenPin, taktPin, MSBFIRST,zahlen[Seg3]); //3.Segment
  shiftOut(datenPin, taktPin, MSBFIRST,zahlen[Seg2]); //2.Segment
  shiftOut(datenPin, taktPin, MSBFIRST,zahlen[Seg1]); //1.Segment (niedriegsten Wert LSB)
  digitalWrite(speicherPin, HIGH); 
  delay(200);
}

Hat jemand eine Idee wie ich die Werte mit so ausrechnen kann, dass ich sie korrekt in Schieberegister schieben kann?

Danke

Wenn du die Anzahl der Nach-Komma Stellen kennst, könntest du die Zahl erst mal mit so oft mit 10 multiplizieren.

z.B: drei Nachkommastellen 1,234 * 10 * 10 * 10 -> 1234. Und dann das Komma nach der 1. Ziffer setzen

Dazu ist es viel einfacher du verODERst den Wert der jeweiligen Zahl mit dem Bit für den Punkt als dass du da zwei getrennte Arrays hast. z.B. 63 -> 0011 1111 191 -> 1011 1111 Du musst also nur 63 | 0x80 machen falls ein Punkt auf diese Ziffer soll.

Aber wie man an die Anzahl der Komma Stellen kommt fällt mir aber auch spontan nichts dazu ein.

Danke für die schnelle Antwort.

Hat mir weiter geholfen!