Trigger gesteuere Zählschleife? How to?

Moin Kolegen,

ich hänge wieder mal an einer Zählschleife, für Euch vermutlich ein kleines Problem:
Ich habe ein Display, dss verschiedene Anzeigen für die Geschwindigkeit hat (Knoten, km/h, m/s).
(Einfach 3 Gauges übereinander, das was angesprochen wird, springt automatisch nach oben.)

Was ich jetzt versuche, aber nicht hinhaut: Wenn ich eine Taste (auf dem Touchpad) drücke, er durch drei Anzeigemöglichkeiten springt.
Ich blick das nach wie vor nicht ganz mit der Zählscheilfe.

Standartmäßig soll Anzeige 1 sein.
ich drücke Taster-->Anzeige 2
Ich drücke Taster-->Anzeige 3
Ich drücke Taster-->Anzeige 1
Wie mach ich jetzt, dass er wieder nach 3 auf 1 springt? Danke!!

void handleGenieEvent (void) 
{
  genieFrame event;   
  genieDequeueEvent(&event);
  
  int gauge=1;   // count from 1-3 (3Gauges) // my gauges are COOL_GAUGE, 0, 2 , 3
    

    if (event.reportObject.object == GENIE_OBJ_USERBUTTON)  //Touch lesen
  {
    if (event.reportObject.index == 0)                 // Button 0 Change Gauge 
    
    {
      
     if ( gauge <3) gauge++;  //hier hört er ja bei 3 auf und bleibt bei 3... :-(
     {
     Serial.print( gauge) // zum debuggen
     genieWriteObject(GENIE_OBJ_COOL_GAUGE, gauge, GPS.speed[gauge]);
     
     }
     
     
    }
  }
}

Dachte so geht es... Aber der Wert "Gauge" bleibt immer bei 1.... :frowning:

 if (event.reportObject.index == 0)                 // Button 0 Change Gauge 
    
    {
     
     gauge++;
     if ( gauge == 3)
     {
     gauge = 1;
     }
     Serial.print(gauge);
     
     
    }
  }

Du erhöhst gauge und wennes 4 wird dann setzt Du es 1.

Mit Deinen Worten:

if (event.reportObject.index == 0)                 // Button 0 Change Gauge     
    {      
     if ( gauge <3)   //hier hört er ja bei 3 auf und bleibt bei 3... :-(
     {
     gauge++;
     Serial.print( gauge) // zum debuggen
     genieWriteObject(GENIE_OBJ_COOL_GAUGE, gauge, GPS.speed[gauge]);     
     }
     else
    {
    gauge =1;
    }     
    }
  }

Ich bevorzuge:

if (event.reportObject.index == 0)                 // Button 0 Change Gauge     
    {     
    gauge++; 
    if ( gauge >3) gauge =1;
    }

Grüße Uwe

TEC_MICHL:
Dachte so geht es... Aber der Wert "Gauge" bleibt immer bei 1.... :frowning:

Das muß so gehen. Du hast also einen Fehler im restlichen nicht geposteten Code.
Grüße Uwe

Vielen lieben Dank!! So einfach kanns sein!! Juhuuu!

Ja, ich hatte gauge in der Schleife initalisiert... mit int gauge=1; das war der Fehler, ich Dödel! :roll_eyes:

Ja, ich hatte gauge in der Schleife initalisiert... mit int gauge=1; das war der Fehler

ja dann ist gauge immer 1.