Przycisk monostabilny dla rolet

kinium
Posty: 69
Rejestracja: pt wrz 06, 2019 11:09 am
Lokalizacja: Wrocław

Nie dziwię się, że działają tak samo skoro kod odpowiedzialny za typ przycisku INPUT_TYPE_BTN_MONOSTABLE_RS w supla_esp_gpio_on_input_active i supla_esp_gpio_on_input_inactive są takie same jak kod w inCan.c.

Z tego co widzę, to racze trzeba przerobić kod z inCan tak, żeby na active nie wyzwalał przełączania w supla_esp_gpio_rs_set_relay ale w inactive sprawdzał czy któryś z przekaźników jest włączony to wtedy robić RS_RELAY_OFF jeśli nie to na załączać przekaźnik UP lub DOWN odpowiednio.
Awatar użytkownika
lesny8
Posty: 2802
Rejestracja: pn gru 11, 2017 9:43 pm

kinium pisze: śr lut 05, 2020 8:29 pm Mam pytanie odnoście przycisków monostabilnych. Chciałbym zaprogramować działanie takie jak w modułach Zamela do rolet. Czyli dopiero jak puszczę przycisk to załączany jest przekaźnik.
Możecie podpowiedzieć, w którym pliku (funkcji) z SDK mam szukać? Nie do końca rozumiem logiki działania kodu odpowiedzialnego za przełączanie tych stanów.
Skompilowałem sobie rs_module ze źródeł i przekaźniki załączają się na zboczu opadającym, czyli tak jak chcesz :roll:
Ustawiony masz czas w Cloud dla ruchu rolety w górę i w dół?
Czekam na kolejne Supla Offline Party 👍
kinium
Posty: 69
Rejestracja: pt wrz 06, 2019 11:09 am
Lokalizacja: Wrocław

lesny8 pisze: czw lut 06, 2020 10:01 pm
kinium pisze: śr lut 05, 2020 8:29 pm Mam pytanie odnoście przycisków monostabilnych. Chciałbym zaprogramować działanie takie jak w modułach Zamela do rolet. Czyli dopiero jak puszczę przycisk to załączany jest przekaźnik.
Możecie podpowiedzieć, w którym pliku (funkcji) z SDK mam szukać? Nie do końca rozumiem logiki działania kodu odpowiedzialnego za przełączanie tych stanów.
Skompilowałem sobie rs_module ze źródeł i przekaźniki załączają się na zboczu opadającym, czyli tak jak chcesz :roll:
Ustawiony masz czas w Cloud dla ruchu rolety w górę i w dół?
Tak mam ustawione czasy.
A czy piny sterujące masz z pullupem?

Sprawdzę to jeszcze raz dzisiaj na świeżych źródłach.
Awatar użytkownika
lesny8
Posty: 2802
Rejestracja: pn gru 11, 2017 9:43 pm

kinium pisze: pt lut 07, 2020 5:17 am A czy piny sterujące masz z pullupem?
Tak, testowałem na module inCan
Czekam na kolejne Supla Offline Party 👍
kinium
Posty: 69
Rejestracja: pt wrz 06, 2019 11:09 am
Lokalizacja: Wrocław

kinium pisze: czw lut 06, 2020 11:46 am
lesny8 pisze: śr lut 05, 2020 9:56 pm Na InCan @Espablo zmieniał zachowanie przycisku

Edit
wrzuć do modułu kompilację rs_module i zobacz jak działa dla porównania
Na obu boardach działa tak samo.
Zrobiłem test na czystym kodzie z repo na rs_module.
Za pierwszym razem przycisk działa prawidłowo, czyli jak odpuszczę przycisk to załączany jest przekaźnik.
Niestety ponowny wciśnięcie przycisku wyłącza przekaźnik a zwolnienie załącza go znowu.
Działa prawidłowo tylko jak roleta zostanie zamknięta lub otwarta całkowicie.
Z tego wynika, że niestety kod który jest w repo nie działa do końca prawidłowo.

Rozwiązałem ten problem definiując BOARD_ON_INPUT_ACTIVE i BOARD_ON_INPUT_INACTIVE jak w inCan i z poniższym kodem:

Kod: Zaznacz cały


#include "supla_esp.h"
#include "supla_esp_gpio.h"



void ICACHE_FLASH_ATTR supla_esp_board_gpio_on_input_active(void *_input_cfg)
{
    supla_input_cfg_t *input_cfg = (supla_input_cfg_t *)_input_cfg;

    if (input_cfg->type == INPUT_TYPE_BTN_MONOSTABLE_RS)
    {
    }
    else if (input_cfg->type == INPUT_TYPE_BTN_BISTABLE || input_cfg->type == INPUT_TYPE_BTN_MONOSTABLE)
    {
        supla_esp_board_gpio_relay_switch(input_cfg, 255);
    }
    else if (input_cfg->type == INPUT_TYPE_SENSOR && input_cfg->channel != 255)
    {
        supla_esp_channel_value_changed(input_cfg->channel, 1);
    }

    input_cfg->last_state = 1;
}

void ICACHE_FLASH_ATTR
supla_esp_board_gpio_on_input_inactive(void *_input_cfg)
{
    supla_input_cfg_t *input_cfg = (supla_input_cfg_t *)_input_cfg;

    if (input_cfg->type == INPUT_TYPE_BTN_MONOSTABLE_RS)
    {
        supla_roller_shutter_cfg_t *rs_cfg = supla_esp_gpio_get_rs__cfg(input_cfg->relay_gpio_id);
        if (rs_cfg != NULL)
        {
            uint8 direction = rs_cfg->up->gpio_id == input_cfg->relay_gpio_id ? RS_RELAY_UP : RS_RELAY_DOWN;

            if (!__supla_esp_gpio_relay_is_hi(rs_cfg->down) && !__supla_esp_gpio_relay_is_hi(rs_cfg->up))
            {
                supla_esp_gpio_rs_set_relay(rs_cfg, direction, 1, 1);
            }
            else
            {
                supla_esp_gpio_rs_set_relay(rs_cfg, RS_RELAY_OFF, 1, 1);
            }
        }
    }
    else if (input_cfg->type == INPUT_TYPE_BTN_BISTABLE)
    {
        supla_esp_board_gpio_relay_switch(input_cfg, 255);
    }
    else if (input_cfg->type == INPUT_TYPE_SENSOR && input_cfg->channel != 255)
    {
        supla_esp_channel_value_changed(input_cfg->channel, 0);
    }

    input_cfg->last_state = 0;
}
Z takim rozwiązaniem mogę przyciskami manipulować jak w modułach Zamela z przyciskami monostabilnymi.
ODPOWIEDZ

Wróć do „supla-dev”