Podobné věci se většinou řeší stavovým automatem (state machine;
google ti určitě ukáže spoustu teorie).

Jinak ohřívače mají většinou hysterezi: teplota při které se ohřívač
spustí je vyšší než při které se vypne. Přikládám jednoduchou ukázku.

2014-04-21 21:02 GMT+02:00 Lukáš Sliacky <lu...@sliacky.eu>:
> Ahojte,
>
> už druhý deň si lámem hlavu nad tým, ako urobiť, aby v cykle nastala akcia 
> iba pri prekročení definovanej hodnoty.
>
> Príklad:
> Mám teplomer, ktorý dáva na vstup teplotu v stupňoch. Chcem, aby cyklus 
> sledoval, či je teplota vyššia alebo nižšia ako 20 stupňov a podľa toho 
> vykonal napr. print.
> Problém je v tom, že potrebujem aby print vykonal iba keď teplota stúpne nad 
> 20 stupňov, resp. keď klesne pod 20 stupňov. Keď stúpne napr. z 15 na 16 
> alebo z 21 na 22, nevykoná sa nič. Jednoducho akcia iba keď sa prvý krát 
> prekoná definovaná hodnota.
>
> Je to vlastne ekvivalent funkcie nejakého ohrievača. Keď teplota klesne pod 
> 20 stupňov, vypíše, že za zapína kúrenie a zapne ho až pokým teplota nestúpne 
> nad 20, tam znovu vypíše, že teplota je nad 20 a znovu nebude vykonávať nič, 
> až pokým neklesne pod 20.
> (ak som to náhodou nezadefinoval dostatočne, na požiadanie to všetko upresním)
>
> Verím, že existuje nejaký hotový algoritmus, ale ani po hodinách googlenia sa 
> mi nepodarilo nájsť nič použiteľné.
>
> Ďakujem za odpovede.
>
> Lukáš
> _______________________________________________
> Python mailing list
> python@py.cz
> http://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz
def prechod(stav, hodnota):
    if stav == 'vypnuto':
        if hodnota < 18:
            print('zapinam')
            return 'zapnuto'
        else:
            return stav
    elif stav == 'zapnuto':
        if hodnota > 20:
            print('vypinam')
            return 'vypnuto'
        else:
            return stav
    else:
        raise ValueError(stav)



def ukazka():
    stav = 'vypnuto'
    for hodnota in [20, 18, 17, 16, 10, 19, 20, 18, 22, 24]:
        print('Hodnota:', hodnota)
        stav = prechod(stav, hodnota)

ukazka()
_______________________________________________
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python

Visit: http://www.py.cz

Odpovedet emailem