- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 5 von 5

Thema: ZahlenBereiche

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    11.05.2005
    Beiträge
    28

    ZahlenBereiche

    Anzeige

    Praxistest und DIY Projekte
    Hi

    Fragen über Fragen

    Also ich hab das Problem das ich Werte ( 0...255) von einem Poti bekomme und ich will jetzt darauf entsprechent reagieren. Möchte nun Bereiche Einteilen heisst für den Zahlenbereich 0..30 soll er einen festen Wert zuordnen für 60...90 einen Anderen usw.
    Der Abstand kann sich aus konstanten Bereichen zusammen setzen oder am besten freiwählbar, sprich 0-30,30-40,40-60 usw.

    Ich könnte das jetzt nur in eine Umständliche if Anweisung verpacken:

    if (Value1 < 30)
    Wert1;
    if (Value1>= 30 && Value1< 60)
    Wert2;

    usw.

    Bin jetzt auf der Suche nach einer besseren Formulierung in C, am besten wär eigentlich ein fester Algorithmus, aber wär schon überglücklich wenn ich die Zahlenspanne irgentwie besser darstellen könnte

    also die darzugehörige Werte wären
    0 0
    1-7 100
    7-14 200
    14-21 300

    usw.

    Freue mich über jede Antwort

    Cheers \/

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    57
    Beiträge
    1.195
    Du kannst das auch über eine Tabelle machen. Kostet dann aber etwas Speicher (sinnvollerweise dann in den Flash legen, falls möglich). Der Einfachheit halber mal ohne Progmem:

    Code:
    uint8_t valArray[] = {
    0, 100, 100, 100, 100, 200, 200, 200, 300, 400, 400
    };
    Zugreifen dann mit:
    Code:
    int value;
    int result;
    
    value = readValueFromSomewhere();
    result = valArray[value];

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Oder so:
    Code:
    switch (wert)
    {
       case 0: return 0;
       case 1 ... 7: return 100;
       case 8 ... 14: return 200;
       default: return -1;
    }
    Und den Blank vor und nach den ... nicht vergessen. Das geht aber nur für Integer-Konstanten (und enums etc.)

    Du musst dich schon entscheiden, ob 7 nach 100 soll oder nach 200.

    Oder so was, wenn's wirklich linear ist:

    return (wert) ? 100*(1+(wert-1)/7) : 0;
    Disclaimer: none. Sue me.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    11.05.2005
    Beiträge
    28
    Knaller =D> vielen Dank hilft mir auf jeden Fall sehr weiter


    und aus reiner Neugierde wie geht ihr an so eine Aufgabe ran um nen allgemein gültigen Algorithmus s.o. herauszubekommen?

    Bei mir läuft des einfach über Probieren und des kann dauern

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    57
    Beiträge
    1.195
    Herangehensweise bei mir ist:
    • was soll das Ergebnis sein?
    • wie schnell muss das Ergebnis berechnet werden?
    • wieviel Platz darf das brauchen?
    • muss das mal erweitert werden?
    • Es sollte die einfachste Lösung sein die es für das Problem gibt
    • Sie sollte leicht zu verstehen sein.


    Z.B. ist es hier so, dass für die angegebenen Bereiche Sprinters Lösung weniger Platz braucht, meine Lösung aber auf den meisten Architekturen schneller ausgeführt wird (hängt von den verfügbaren Adressierungsarten ab). Es kommt eben darauf an, wie die Randbedingungen sind. Manchmal kann die eine, manchmal die andere Lösung angemessener sein.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests