Proszę o pomoc w zrozumieniu iterate_thermometer

Post Reply
krycha88
Posts: 188
Joined: Fri Nov 16, 2018 7:25 am

Sun Sep 08, 2019 2:17 pm

Dokładnie chodzi o ten fragment:

Code: Select all

    if ( channel->Type == SUPLA_CHANNELTYPE_THERMOMETERDS18B20
        && Params.cb.get_temperature != NULL ) {
        Serial.println(pin->time_left);
        
        if ( pin->time_left <= 0 ) {
            
            pin->time_left = 10000;
            double val = Params.cb.get_temperature(channel_number, pin->last_val_dbl1);
            
            if ( val != pin->last_val_dbl1 ) {
                pin->last_val_dbl1 = val;
                channelDoubleValueChanged(channel_number, val);
            }
            
        }
    }
Próbuje zrozumieć jak działa iterate_thermometer ale mam jedną zagwozdkę w jaki sposób pomniejszana jest wartość pin->time_left?? Gdy moduł jest zarejestrowany "registered == 1" to wartość jest pomniejszana z 10000 do 0. Ale gdy moduł jest niezarejestrowany "registered == 0" to już nie.


oczywiście dodałem w iterate aby iterate_thermometer była wywoływana gdy moduł nie jest zarejestrowany

Code: Select all

void SuplaDeviceClass::iterate(void) {
	
    int a;
    unsigned long _millis = millis();
    unsigned long time_diff = abs(_millis - last_iterate_time);
	if ( !Params.cb.svr_connected() ) {
		if ( time_diff > 0 ) {
			for(a=0;a<Params.reg_dev.channel_count;a++) {
				iterate_thermometer(&channel_pin[a], &Params.reg_dev.channels[a], time_diff, a);				
			}
			last_iterate_time = millis();
		}
	}
	....
User avatar
pzygmunt
Posts: 6410
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Contact:

Sun Sep 08, 2019 2:36 pm

Jak już wspominałem cała ta "biblioteka" jest do przepisania, a dokładnie rzecz biorąc cała klasa SuplaDevice. Była pisana na podstawie złych założeń.
Odliczanie czasu jak patrzę teraz w kod jest w iterate_relay (powinno to być wyciągnięte w jakieś wspólne miejsce).
Jak na szybko robiłem mikro porządek to copy&paste poszło za daleko. Pierwotnie wszystko było wciśnięte w jedną metodę. Jak zaczęły dochodzić nowe typy kanałów to się okazało, że to jest bez sensu.

https://github.com/SUPLA/arduino/blob/m ... e.cpp#L780
krycha88
Posts: 188
Joined: Fri Nov 16, 2018 7:25 am

Sun Sep 08, 2019 2:41 pm

pzygmunt wrote:
Sun Sep 08, 2019 2:36 pm
Jak już wspominałem cała ta "biblioteka" jest do przepisania, a dokładnie rzecz biorąc cała klasa SuplaDevice. Była pisana na podstawie złych założeń.
Odliczanie czasu jak patrzę teraz w kod jest w iterate_relay (powinno to być wyciągnięte w jakieś wspólne miejsce).
Jak na szybko robiłem mikro porządek to copy&paste poszło za daleko. Pierwotnie wszystko było wciśnięte w jedną metodę. Jak zaczęły dochodzić nowe typy kanałów to się okazało, że to jest bez sensu.

https://github.com/SUPLA/arduino/blob/m ... e.cpp#L780
Dzięki, też to zauważyłem ale nie potrafiłem tego zrozumieć czemu akurat tak. Na razie trzeba działać z tym co się ma :)
Post Reply