&& Verküpfungen vereinfachen?

Gast #719892
Lesenswert?
• ▲
▼
Hallo zusammen,

ich bastele gerade ein wenig an einer Steuerung herum. Leider ist diese 
Steuerung sehr komplex und von vielen Faktoren abhängig.

Im Moment frage ich diese Reihe von Faktoren z.B. folgendermaßen ab:

if((Bedingung1 <= Wert) && (Bedingung2 >= Wert) && ((Bedingung3 < Wert))


Da im Programm sehr viele von diesen Abfragen existieren, geht der 
Speicher von meinem 8kB Controller ganz fix flöten. Kann ich diese 
Abfragen irgendwie anders schreiben; damit nicht soviel Speicher dafür 
benötigt wird?
Gast #719936
Lesenswert?
• ▲
▼
@Berti,

Danke für den Tip aber die if/else Geschichte verwende ich schon. Bei 
der Switch/Case gibt es leider das Problem, dass nur Ausdrücke und keine 
Bedingungen agefragt werden können.



@Niels

Hi Niels, das mit dem KV-Diagramm werd ich mir mal anschauen.


@All
Hab mal ne Funktion aus dem Code angehangen, vielleicht hat noch wer ne 
Idee..
Angehängte Dateien:
#719971
Lesenswert?
• ▲
▼
Kontrolliers noch mal.
Meiner Meinung nach müsste deine Funktion äquivalent sein
zu:
1
void motor(){
2

3

4
  if( PWM_data > 128 ) {
5
    if( PWM_value < 120 )
6
      PWM_value += 10;
7

8
    else if( PWM_value <= PWM_data - 7 && PWM_value < 249 )
9
      PWM_value += 7;
10
  }
11

12
  else if( PWM_data < 128 ) {
13

14
    if( PWM_value > 136 )
15
      PWM_value -= 10;
16

17
    else if( PWM_value >= (PWM_data + 7) &&  PWM_value > 6 )
18
      PWM_value -= 7:
19
  }
20

21
  else {
22
    if( PWM_value < 119 )
23
      PWM_value += 10;
24

25
    if( PWM_value > 137 )
26
      PWM_value -= 10;
27
  }
28
}
Gast #719990
Lesenswert?
• ▲
▼
Danke Karl Heinz,

funktioniert einwandfrei und spart knapp 1% Speicherplatz.


Dann werd ich die anderen Teile im Code auch mal auf diese Weise 
umschreiben und schauen was am Ende dabei heraus kommt.
#720060
Lesenswert?
• ▲
▼
Du willst, daß der eine Wert dem anderen verzögert nachläuft, bis er 
gleich ist.
Wozu dann die Sonderbehandlung für 128?

1
void motor( void )
2
{
3
  int diff = PWM_data - PWM_value;
4

5
  if( diff > 10 )
6
    diff = 10;
7

8
  if( diff < -10 )
9
    diff = -10;
10

11
  PWM_value += diff;
12
}


Peter
Gast #720087
Lesenswert?
• ▲
▼
Hi Peter,

die Sonderbehandlung nur weil es zwei verschiedene Fälle sind. Von 128 
bis 255 läuft der Motor vorwärts. Bei 127 bis 0 läuft der Motor 
rückwärts. Dabei ist 127-128 Stillstand und 0/255 die maximale Drehzahl 
in die jeweilige Richtung.

Dazu kommt noch das der Motor schneller abbremsen als beschleunigen 
soll.

Aber dein Ansatz gefällt mir. Werd ich mal ausprobieren.
#720112
Lesenswert?
• ▲
▼
Frank wrote:

> Dazu kommt noch das der Motor schneller abbremsen als beschleunigen
> soll.

Das würde ich garnicht über eine Steuerlogic machen. Da würde ich eine 
Beschleunigungstabelle mit jeweils 128 Einträge pro Richtung im 
Flashspeicher anlegen.

Für die 256Byte sollte doch locker Platz sein...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.