Přeskočit obsah

Změna rozsahu hodnoty (mapování hodnot)

Co dělá: Přepočítá X z intervalu [VSTUPNÍ MINIMUM, VSTUPNÍ MAXIMUM] do nového intervalu [VÝSTUPNÍ MINIMUM, VÝSTUPNÍ MAXIMUM] lineárně. Lze vybrat zaokrouhlení na celé číslo a limitace hodnot na rozsah [VÝSTUPNÍ MINIMUM, VÝSTUPNÍ MAXIMUM].

Přepočet hodnoty

Vstupy

  • VSTUPNÍ HODNOTA
  • VSTUPNÍ MINIMUM, VSTUPNÍ MAXIMUM
  • VÝSTUPNÍ MINIMUM, VÝSTUPNÍ MAXIMUM

Výstup

  • ČÍSLO

  • Kód uvnitř bloku:

  • Micropython kód pro přepočet čísel s desetinou čárkou :

    def convert_float(x, in_min, in_max, out_min, out_max, lim=1):
        if lim == 0:
            return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
        else:
            if out_min > out_max:
                return min(max(out_max, (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min), out_min)
            else:
                return max(min(out_max, (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min), out_min)
    

  • Micropython kód pro přepočet celých čísel :

    def convert_int(x, in_min, in_max, out_min, out_max, lim=1):
        if lim == 0:
            return int((x - in_min) * (out_max - out_min) // (in_max - in_min) + out_min)
        else:
            if out_min > out_max:
                return int(min(max(out_max, (x - in_min) * (out_max - out_min) // (in_max - in_min) + out_min), out_min))
            else:
                return int(max(min(out_max, (x - in_min) * (out_max - out_min) // (in_max - in_min) + out_min), out_min))
    


  • Příklad kdy se hodnota analogového vstupu přepočítává na milivolty. Rozsah analogového vstupu je 0 - 3.6V, výstupní hodnota z převodníku je ale 0 - 4096 a tu potřebujeme přepočítat zpět na 0 - 3600mV.

Přepočet hodnoty příklad

Tipy

  • Pokud VSTUPNÍ MINIMUM == VSTUPNÍ MAXIMUM, výpočet nedává smysl (dělení nulou).
  • Ve variantě s limitem (lim=1) je výstup saturován do výstupního rozsahu i při obráceném směru (out_min > out_max).