[gelöst] 7-Segment Anzeige funktioniert nicht

Ein Getriebesensor gibt je nach eingelegten Gang eine Spannung ab.
Diese möchte ich abnehmen und in einer 7_segment Anzeige darstellen.
Das ganze soll eine Ganganzeige werden.
Die Spannungen dafür wurden ausgemessen:

Gang1=0.7V
NeutralN=1.03V
Gang2=1.37V
Gnag3=1.83V
Gang4=2.52V
Gang5=3.29V
Gang6=4.24V

Den Sensor hab ich für den Aufbau durch ein 10KOhm poti ersetzt.
verbunden mit plus und minus und den schleifer an A0.

die Spannungen werden auch richtig im seriellen Monitor angezeigt.
Die 7-Segment Anzeige bleibt aber auf “6” stehen.

keine Ahnung warum.

Die 7-Segment Anzeige ist richtig verkabelt, hab ich vorher mit einem Sketch getestet, der alle Zahlen durchläuft.

und… ich würde gerne eine Tolleranz von 10% einbauen, weiss aber nicht wie.

evtl hat hier jemand ne Idee dazu:

int PinSensor=A0;

float flt_Quellspannung=5.0;
int int_Spannung1=0.7;
int int_SpannungN=1.03;
int int_Spannung2=1.37;
int int_Spannung3=1.83;
int int_Spannung4=2.52;
int int_Spannung5=3.29;
int int_Spannung6=4.24;


void setup() {
  Serial.begin(9600);
  
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);  
}


void loop() {
  int int_Messwert=0;
  for(int i=0;i<5;i++){
    int_Messwert+=analogRead(PinSensor);
  }
  int_Messwert=trunc(int_Messwert/5);
  float flt_Spannung=(flt_Quellspannung/1023.0)*int_Messwert;
 
int_Messwert = analogRead(A0);
  Serial.println(flt_Spannung);
  delay(1000);

 if (int_Spannung1){

digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
 }
 if (int_SpannungN){
 
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
digitalWrite(8,LOW);   
 }
 if (int_Spannung2){

digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
 }
 if (int_Spannung3){

digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);   
 }
 if (int_Spannung4){

digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);   
 }
 if (int_Spannung5){

digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);   
 }
 if (int_Spannung6){

digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);   
 }
 

        
       else {

digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);        
      }
    }

Hi

Deine ganzen Abfragen sind Alle erfüllt!

if (int_SpannungN){
tue was
}

In der if-Klammer steht die Bedingung, Diese ist in allen Fällen ungleich Null und somit wahr → Du bekommst eine 1,n,2,3,4,5,6 angezeigt.
Da die 6 angezeigt wird, fällt der ELSE-Zweig raus.

Würde das Pferd etwas anders aufzäumen!
Akut hast Du Deine Spannungen ‘auf Fleck’ - die erwarteten 1,07V sollen mit den gemessenen V auf Gleichheit geprüft werden - Das gibt Keinen - minimalste Störungen werden Dir die Werte von diesen Fixwerten weg bringen → keine Anzeige.

Wenn Du für Gang 1, nominal 1,07V, als untere Schwelle 0V und als obere Schwelle ‘Mitte zwischen 1 und N’ annimmst?
Dann die Abfrage, wo Du Dich befindest ein switch.
switch {
case min1 … max1: Code_Gang 1; break;
case minN … maxN: Code_Neutral; break;

case min5 … max5: Code_Gang5; break;
default: Code_Error;
}

So hast Du zwar noch immer scharfe Grenzen, aber Die liegen mittig zu Deinen erwarteten Messwerten.

MfG

int int_Spannung1=0.7;// ist 0
int int_SpannungN=1.03;// ist 1
int int_Spannung2=1.37;// ist 1
int int_Spannung3=1.83;// ist 1
int int_Spannung4=2.52;// ist 2
int int_Spannung5=3.29;// ist 3
int int_Spannung6=4.24;// ist 4

besser

if (flt_Spannung >int_Spannung1-int_Spannung1*0.1&&int_Spannung1<+int_Spannung1*0.1)

@postmaster-ino: wegen der Störungen wollte ich ja ne Tolleranz von 10% haben, damit nicht ne messung genau "auf Fleck" gemacht wird. Ich hatte das mal irgendwo in einem Sketch gesehen.

Ich werd mir aber mal Gedanken mit deinem "Case" Vorschlag machen.

@ardubo: versteh gerade nicht, was du damit sagen willst

bei int wird alles nach dem, Komma abgeschnitten.

ich stelle mir das so vor:

const int PinSensor=A0;

float flt_Quellspannung=5.0;
# define Spannung1 0.7
# define SpannungN 1.03
# define Spannung2 1.37
# define Spannung3 1.83
# define Spannung4 2.52
# define Spannung5 3.29
# define Spannung6 4.24


void setup() {
  Serial.begin(9600);
 
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT); 
}


void loop() {
  int int_Messwert=0;
  for(int i=0;i<5;i++){
    int_Messwert+=analogRead(PinSensor);
  }
  int_Messwert=trunc(int_Messwert/5);
  float flt_Spannung=(flt_Quellspannung/1023.0)*int_Messwert;
 
int_Messwert = analogRead(A0);
  Serial.println(flt_Spannung);
  delay(1000);

if (flt_Spannung >Spannung1-Spannung1*0.1&& Spannung1<+Spannung1*0.1) {

digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
 }
if (flt_Spannung >SpannungN-SpannungN*0.1&& SpannungN<+SpannungN*0.1) {
 
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
digitalWrite(8,LOW);   
 }
if (flt_Spannung >Spannung2-Spannung2*0.1&& Spannung2<+Spannung2*0.1) {

digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
 }
if (flt_Spannung >Spannung3-Spannung3*0.1&& Spannung3<+Spannung3*0.1) {

digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);   
 }
if (flt_Spannung >Spannung4-Spannung4*0.1&& Spannung4<+Spannung4*0.1) {

digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);   
 }
if (flt_Spannung >Spannung5-Spannung5*0.1&& Spannung5<+Spannung5*0.1) {

digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);   
 }
if (flt_Spannung >Spannung6-Spannung6*0.1&& Spannung6<+Spannung6*0.1) {

digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);   
 }
 

       
       else {

digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);       
      }
    }

@int Kopf -> Tisch ...

Jupp, hier dann auf 'was Größeres' umrechnen (ein uint ginge von 0...65535 im Arduino, der int nur von -32768 ... 32767) Da der ADC eh nur bis 1023 (10 bit) liefert, Du 5x misst, wäre ggf. eine Aufblähung auf 0...5119 (2^10*5-1) sinnig.

@ardubu Dafür gibt's switch-case

MfG

@ardubu Dafür gibt's switch-case

der garagenloeter muß doch auch noch was zu tun haben.

Hi

Aaaah - sorry, hatte Das gar nicht mitgeschnitten, daß Du ja gar nicht 'Der' bist :o

MfG

erstmal Danke ardubu für den Sketch und wie das mit den 10% funktioniert.

Leider hat das auch nicht zum Erfolg geführt.

Ich hab da paar Dinge abgeändert, z.b. noch Klammern in der if Abfrage gesetzt.
(muss da noch der Multiplikator noch in Klammern oder weiss die IDE das Punktrechnung vor Strichrechnung kommt?)

nun zeigt er mir schon mal bei einer Spannung die richtige Anzeige an.

aber immer nur den letzten Spannungsbereich.
heisst:
dokumentiere ich zb. Spannung 4, 5, 6 aus, wird nur in Spannung 3 angezeigt.

Spannung 1,N,2 wird nicht mehr angezeigt.

dokumentiere ich z.b. nur die 6 aus, Zeigt er mir nur die fünf an.

alles andere kommt dann wohl aus der else Anweisung.

Ich hoffe, ich hab mich verständlich ausgedrückt.

//const int PinSensor=A0;

float flt_Quellspannung=5.0;
# define Spannung1 0.7
# define SpannungN 1.03
# define Spannung2 1.37
# define Spannung3 1.83
# define Spannung4 2.52
# define Spannung5 3.29
# define Spannung6 4.24


void setup() {
  Serial.begin(9600);
 pinMode(A0,INPUT);
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
}


void loop() {
  int int_Messwert=0;
  for(int i=0;i<5;i++){
    int_Messwert+=analogRead(A0);
  }
  int_Messwert=trunc(int_Messwert/5);
  float flt_Spannung=(flt_Quellspannung/1023.0)*int_Messwert;
 
int_Messwert = analogRead(A0);
  Serial.println(flt_Spannung);
  delay(100);

if ((flt_Spannung >Spannung1-Spannung1*0.1)&& (flt_Spannung <Spannung1+Spannung1*0.1)) {
//if(flt_Spannung >Spannung1-Spannung1*0.1&& Spannung1<+Spannung1*0.1)
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
 } 
 
if ((flt_Spannung >SpannungN-SpannungN*0.1)&& (flt_Spannung <SpannungN+SpannungN*0.1)) {
//if(flt_Spannung >SpannungN-SpannungN*0.1&& SpannungN<+SpannungN*0.1)  { 
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
digitalWrite(8,LOW);   

 }
//if(flt_Spannung >Spannung2-Spannung2*0.1&& Spannung2<+Spannung2*0.1) {
if ((flt_Spannung >Spannung2-Spannung2*0.1)&& (flt_Spannung <Spannung2+Spannung2*0.1)) { 
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
 }

//if(flt_Spannung >Spannung3-Spannung3*0.1&& Spannung3<+Spannung3*0.1) {
if ((flt_Spannung >Spannung3-Spannung3*0.1)&& (flt_Spannung <Spannung3+Spannung3*0.1)) {
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);   
 }
 
 
//if(flt_Spannung >Spannung4-Spannung4*0.1&& Spannung4<+Spannung4*0.1) {
if ((flt_Spannung >Spannung4-Spannung4*0.1)&& (flt_Spannung <Spannung4+Spannung4*0.1)) {
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);   
 }
//if(flt_Spannung >Spannung5-Spannung5*0.1&& Spannung5<+Spannung5*0.1) {
if ((flt_Spannung >Spannung5-Spannung5*0.1)&& (flt_Spannung <Spannung5+Spannung5*0.1)) {
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);   
 } /*
//if(flt_Spannung >Spannung6-Spannung6*0.1&& Spannung6<+Spannung6*0.1) {
if ((flt_Spannung >Spannung6-Spannung6*0.1)&& (flt_Spannung <Spannung6+Spannung6*0.1)) {
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);   
 } 
*/
       
       else {

digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);       
      }
    }

du könntest statt

if ((flt_Spannung >Spannung1-Spannung1*0.1)&& (flt_Spannung <Spannung1+Spannung1*0.1))

auch

if ((flt_Spannung >Spannung1*0.9 && flt_Spannung <Spannung1*1.1))

schreiben.
Dein else Zweig bezieht sich nur auf die letzte if Bedingung.

haahaa, et lüpt :slight_smile:

ich hab jetzt mal deine letzte Berechnung mit reingenommen.
scheint am logischsten, da nur eine Form der Berechnung durch 0.9 und 1.1.

aber… auschlaggebend war der Hinweis , dass das else sich nur auf das letzte if bezieht.

noch ein paar elsen ausgepackt und zu den if’s davor gepackt und siehe da…

vielen Dank für die Hilfestellung.

später werd ich mal die Sache mit case versuchen.

float flt_Quellspannung=5.0;
# define Spannung1 0.7
# define SpannungN 1.03
# define Spannung2 1.37
# define Spannung3 1.83
# define Spannung4 2.52
# define Spannung5 3.29
# define Spannung6 4.24


void setup() {
  Serial.begin(9600);
 pinMode(A0,INPUT);
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
}


void loop() {
  int int_Messwert=0;
  for(int i=0;i<5;i++){
    int_Messwert+=analogRead(A0);
  }
  int_Messwert=trunc(int_Messwert/5);
  float flt_Spannung=(flt_Quellspannung/1023.0)*int_Messwert;
 
int_Messwert = analogRead(A0);
  Serial.println(flt_Spannung);
  delay(100);

  
if ((flt_Spannung >Spannung1*0.9 && flt_Spannung <Spannung1*1.1)) {
//if ((flt_Spannung >Spannung1-Spannung1*0.1)&& (flt_Spannung <Spannung1+Spannung1*0.1)) {
//if(flt_Spannung >Spannung1-Spannung1*0.1&& Spannung1<+Spannung1*0.1) {
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
 } 
else if ((flt_Spannung >SpannungN*0.9 && flt_Spannung <SpannungN*1.1)) {
//if ((flt_Spannung >SpannungN-SpannungN*0.1)&& (flt_Spannung <SpannungN+SpannungN*0.1)) {
//if(flt_Spannung >SpannungN-SpannungN*0.1&& SpannungN<+SpannungN*0.1)  { 
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,LOW);   

 }
else if ((flt_Spannung >Spannung2*0.9 && flt_Spannung <Spannung2*1.1))  {
//if(flt_Spannung >Spannung2-Spannung2*0.1&& Spannung2<+Spannung2*0.1) {
//if ((flt_Spannung >Spannung2-Spannung2*0.1)&& (flt_Spannung <Spannung2+Spannung2*0.1)) { 
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
 }
else if ((flt_Spannung >Spannung3*0.9 && flt_Spannung <Spannung3*1.1)) {
//if(flt_Spannung >Spannung3-Spannung3*0.1&& Spannung3<+Spannung3*0.1) {
//if ((flt_Spannung >Spannung3-Spannung3*0.1)&& (flt_Spannung <Spannung3+Spannung3*0.1)) {
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);   
 }
 
else if ((flt_Spannung >Spannung4*0.9 && flt_Spannung <Spannung4*1.1))  {
//if(flt_Spannung >Spannung4-Spannung4*0.1&& Spannung4<+Spannung4*0.1) {
//if ((flt_Spannung >Spannung4-Spannung4*0.1)&& (flt_Spannung <Spannung4+Spannung4*0.1)) {
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);   
 }
else if ((flt_Spannung >Spannung5*0.9 && flt_Spannung <Spannung5*1.1)) {
//if(flt_Spannung >Spannung5-Spannung5*0.1&& Spannung5<+Spannung5*0.1) {
//if ((flt_Spannung >Spannung5-Spannung5*0.1)&& (flt_Spannung <Spannung5+Spannung5*0.1)) {
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);   
 }
else if ((flt_Spannung >Spannung6*0.9 && flt_Spannung <Spannung6*1.1)) {  
//if(flt_Spannung >Spannung6-Spannung6*0.1&& Spannung6<+Spannung6*0.1) {
//else if ((flt_Spannung >Spannung6-Spannung6*0.1)&& (flt_Spannung <Spannung6+Spannung6*0.1)) {
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);   
 } 

       
  else {

digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);       
  }
    }

case und float sollte Probleme geben (falls da nicht schon wieder eine C++ Erweiterung alles was ich wusste, über den Haufen wirft :wink: )

Aber das Ganze ohne float und mit einer nachvollziehbaren 7-Segment-Ansteuerung würde deinen Sketch wohl um 75% verkürzen (und lesbarer machen, für meinen Geschmack):

Nur mal als Beispiel:

/*  Pins 7-Segment-Anzeige
 *    2
 * 7     3
 *    8
 * 6     4
 *    5 
 */ 
 const byte code[] = {
//  2345678
  0b1111110, // 0
  0b0110000, // 1
  0b1101101, // 2
  0b1111001, // 3
  0b0110011, // 4
  0b1011011, // 5
  0b0011111  // 6
 };

void setup () {
  // pins 2 .. 8 = OUTPUT
  for (byte p=2; p<=8; p++) pinMode(p, OUTPUT);
}
    
void show(byte code) {
  byte i = 1;
  for (byte p=8; p>=2; p--)  {
    digitalWrite(p, (code & i) != 0);
    i <<= 1;
  }
}

byte check (unsigned int wert) {
//   Spannung
// 1  0.7
//         0.8   164
// N 1.03
//         1.2   246
// 2 1.37
//         1.6   328
// 3 1.83
//         2.2   450
// 4 2.52
//         2.9   594
// 5 3.29
//         3.7   758
// 6 4.24
static unsigned int cmp [7] = {164, 246, 328, 450, 594, 758, 9999};
   byte i = 0;
   while ( wert > cmp[i] ) i++;
   if (i == 1) return 0; // N
   else if (i == 0) return 1;
   return i;
}

void loop() {
   unsigned int wert = analogRead(A0);
   byte stufe = check(wert);  // 0 = N, 1 .. 6
   show(code[stufe]);
}

ungetestet

Ob das mit den Spannungen überhaupt sicher funktioniert (hat der Getriebesensor die Gleiche Spannungsreferenz wie der Arduino?) wäre zu testen (Batterie-Ladezustand, Temperatur), bevor man entscheidet ob Mitte zwischen zwei Stufen oder deine + - 10 % (und eine “unklar” - Anzeige) besser sind.

Dein Sketch scheint so zu funktionieren. Danke fürs aufzeigen einer völlig anderen Lösung.

Der Getriebesensor bekommt die 5V vom Arduino. werde dann auch noch die 5V messen obs auch 5 sind und nicht mehr oder weniger und gegebenenfalls im Programm angleichen.

schlussendlich muss das natürlich am "lebenden Objekt" getestet werden.

Die Anzeige wird später an einer Rennmopete laufen die nur für den Kringel aufgebaut wurde.

sobald es Ergebnisse gibt, melde ich mich diesbzgl. zurück unf berichte.

bis dahin vielen Dank für die Unterstützung.

Der Getriebesensor bekommt die 5V vom Arduino. werde dann auch noch die 5V messen obs auch 5 sind und nicht mehr oder weniger

Ich rate dann mal, dass bei mehr oder weniger als 5V der Sensor auch andere Spannungen liefert, und der vom Arduino ADC gemessene Wert (0...1023) daher (ziemlich) gleich bleibt.

Das ganze float-Gedöns mit (5.0 /1024.0) (!) ist dann nur dazu da, dass du evtl. bei Serial.print das gleiche siehst was dein DMM anzeigt. Für deine 7Seg-Anzeige völlig wurscht.

bis dahin vielen Dank für die Unterstützung

Und guck beim Fahren nicht zuviel auf die Gang-Anzeige :P

jau, das war der wink mit dem Zaunpfahl (5.0 /1024.0) (!) :slight_smile:

muss ich noch ändern.