Variable umkehren.

Hallo,

ich steuere mittels eines Sliders auf einem 4D System Display meinen Arduino an und gebe dort dann einer Variable den Wert meines Sliders. Das ganze sieht wie folgt aus:

void myGenieEventHandler(void) {
  genieFrame Event;
  genie.DequeueEvent(&Event);
  if ( Event.reportObject.object == GENIE_OBJ_SLIDER && Event.reportObject.index == 1 ) sliderValue = genie.GetEventData(&Event);
  if ( Event.reportObject.object == GENIE_OBJ_ROCKERSW && Event.reportObject.index == 2 ) rockerValue2 = genie.GetEventData(&Event);
  if ( Event.reportObject.object == GENIE_OBJ_ROCKERSW && Event.reportObject.index == 3 ) rockerValue1 = genie.GetEventData(&Event);
}

Jetzt steuere ich mithilfe dieser Variable die Geschwindigkeit eines Windrades was wie folgt aussieht:

int phase1 = 1; 
unsigned long interval11 = sliderValue;
unsigned long previousMillis1 = 0;

void Windkraft_Raeder(){
  if (sliderValue > 80 ){
    windstatus = 0;
    
    if ((phase1 == 1) and (millis() - previousMillis1 > interval11)) {  
      previousMillis1 = millis();                                    
      phase1 = 2 ; 
    }
    if ((phase1 == 2) and (millis() - previousMillis1 > interval11)) {
      previousMillis1 = millis(); 
      phase1 = 1 ; 
    }

  if (phase1 == 1) {
    digitalWrite(Windkr_Raeder1, 1);
    digitalWrite(Windkr_Raeder2, 0);
    digitalWrite(Windkr_Raeder3, 1);
    }
  if (phase1 == 2) {
    digitalWrite(Windkr_Raeder1, 0);
    digitalWrite(Windkr_Raeder2, 1);
    digitalWrite(Windkr_Raeder3, 1);
    }
  }
  else{
    digitalWrite(Windkr_Raeder1, 0);
    digitalWrite(Windkr_Raeder2, 0);
    digitalWrite(Windkr_Raeder3, 0);
    windstatus = 1;
  }
 }

Funktioniert auch alles soweit so gut. Jetzt gibt es aber einen Optischen Mangel undzwar handelt es sich bei den zu steuernden LED´s um ein Windrad wenn ich den Schieber jetzt nach Oben bewege wird das Windrad jedoch Langsamer da ja der Wert des Sliders steigt und somit auch die LED langsamer werden. Ich komme nun nicht weiter und würde gerne Wissen ob mir hier jemand helfen kann den Wert des Sliders innerhalb des Arduino Programms zu invertieren.

MfG
Nussmann

hi,

ich weiß jetzt nicht genau, ob Du das meinst, aber normalerweise subtrahiert man den reglerwert vom reglermaximalwert.

also regler von 0 - 80, eingestellter wert 23, dann 80 - 23 also 57 als zu verarbeitender wert. so kommst Du von 0 - 80 auf 80 - 0.

gruß stefan

Hallo,
ich weiß nicht, ob es eine fertige InverterFunktion gibt, und die Profis können es bestimmt besser.

Beispiel
Du hast einen Slider der Werte von 0 (unten) bis 100 (oben) ausgibt.

eine Variable Slider;
eine Variable Windrad;

Der Slider steht auf 1 und gibt den Wert 1 raus

jetzt

Windrad = 100 - Slider

Der Slider steht auf 1, und Windrad hat den Wert 99

Je höher der Slider, desto kleine Windrad.

Das geht auch umgekehrt.

Gruß und Spaß
Andreas

Vielen Dank für eure Antworten habe das ganze jetzt so ausprobiert:

int Drehwert = 500 - sliderValue;

und im Programmteil:

int phase1 = 1;  //derzeitige Phase wird festgelegt
unsigned long interval11 = Drehwert; //verschiedene Intervalle für die einzelnen Ampelphasen
unsigned long previousMillis1 = 0;

void Windkraft_Raeder(){
  if (Drehwert > 80 ){
    windstatus = 0;

Jetzt drehen sich die LED´s immer Langsam und der Slider hat keinen Einfluss mehr auf sie :o

hi, und oje,

Du darfst natürlich den wert nicht statisch bei der variablendeklaration festlegen, sondern dynamisch zur laufzeit.

Also slidervalue auslesen, diesen wert dann von 500 subtrahieren.

gruß stefan

EDIT: wo steht das: int Drehwert = 500 - sliderValue; ?

nochmal den ganzen sketch posten...

Ganz Verzweifelte nehmen die map() Funktion, mit der sich beliebige Bereiche einfach umrechnen lassen.