Dodatkowy przycisk do podwójnego przekaźnika

Rlech
Posts: 7
Joined: Sat Jun 25, 2016 7:15 am

Post

Proszę o podpowiedź/pomoc w dodaniu przycisku sterującego do dodatkowego przekaźnika. Chciałbym skompilować firmware do podwójnego przekaźnika, który mógłbym jednocześnie sterować aplikacją i przyciskami – tak jak w WIFISOCKET tylko x2.

W ‘supla_esp.h’ zmodyfikowałem ‘__BOARD_wifisocket’ poprzez zdefiniowanie ‘RELAY2_PORT 13’ (zamiast diody)
oraz
w ‘supla_esp_devconn.c’ dodałem kod dla RELAY2:

Code: Select all

 srd.channels[1].Number = 1;
      srd.channels[1].Type = srd.channels[0].Type;
      srd.channels[1].FuncList = srd.channels[0].FuncList;
      srd.channels[1].Default = srd.channels[0].Default;
      srd.channels[1].value[0] = supla_esp_gpio_relay_on(RELAY2_PORT);
analogicznie jak w EgyIOT.

Po wgraniu firmwareu da się sterować oboma przekaźnikami z poziomu aplikacji lecz przycisk (na GPIO 5) steruje jedynie jednym z nich (co było do przewidzenia).
Czy istnieje prosty sposób na dołączenie dodatkowego przycisku?
User avatar
pzygmunt
Posts: 19235
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków

Post

Zmieniasz

https://github.com/SUPLA/supla-core/blo ... gpio.c#L52

static struct single_key_param *single_key[1];
na
static struct single_key_param *single_key[2];


i dodajesz analogicznie
https://github.com/SUPLA/supla-core/blo ... pio.c#L501

single_key[1] = key_init_single(CFG2_PORT, supla_esg_gpio_cfg2_pressed, supla_esg_gpio_manual2_pressed);
User avatar
slawek
Posts: 2466
Joined: Mon Mar 14, 2016 11:48 pm
Location: Biała Podlaska

Post

Próbuję dodać obsługę przyciskiem drugiego kanału socket, ale mam problem.
Dodałem wpisy jak w poście wyżej, ale przy kompilacji wyskakuje błąd jak na zrzucie.
Gdzie i czego brakuje - ktoś mógłby łopatologicznie podpowiedzieć?
You do not have the required permissions to view the files attached to this post.
TEORIA jest wtedy gdy wszystko wiemy i nic nie działa
PRAKTYKA jest wtedy gdy wszystko działa a my nie wiemy dlaczego
My łączymy teorię z praktyką czyli nic nie działa i nikt nie wie dlaczego
Zybi
Posts: 1511
Joined: Sun Jun 26, 2016 4:24 pm

Post

Wstawiając zapis:

single_key[1] = key_init_single(CFG2_PORT, supla_esg_gpio_cfg2_pressed, supla_esg_gpio_manual2_pressed);

odwołujesz się do dwóch nowych funkcji "supla_esg_gpio_cfg2_pressed" i "supla_esg_gpio_manual2_pressed", które nie są w programie nigdzie zdefiniowane. Analizując, kod źródłowy dopisałem te funkcje i udało mi się skompilować firmware, ale uzyskałem efekt jednoczesnego załączania dwóch kanałów i niestabilność układu. Im bardziej analizowałem kod programu, to tym bardziej nabierałem przekonania, że nie będzie to takie łatwe i bez Przemka nie da rady tego zrobić.
User avatar
pzygmunt
Posts: 19235
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków

Post

Code: Select all


void supla_esg_gpio_manual2_pressed(void) {
   if ( supla_esp_cfgmode_started() == 0 ) {
        char hi = supla_esp_gpio_is_hi(RELAY2_PORT) == 1 ? 0 : 1;
	supla_esp_gpio_hi(RELAY2_PORT, hi);
	supla_esp_channel_value_changed(0, hi);
   };
};

void  supla_esg_gpio_cfg2_pressed(void) {
};

Zybi
Posts: 1511
Joined: Sun Jun 26, 2016 4:24 pm

Post

Uff - działa, ale należy jeszcze zmodyfikować:

keys.key_num = 1;
na
keys.key_num = 2;
User avatar
pzygmunt
Posts: 19235
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków

Post

Zybi wrote:Uff - działa, ale należy jeszcze zmodyfikować:

keys.key_num = 1;
na
keys.key_num = 2;
Zgadza się. Pisałem na forum z głowy bez testowania ;)
User avatar
slawek
Posts: 2466
Joined: Mon Mar 14, 2016 11:48 pm
Location: Biała Podlaska

Post

Dzięki - działa.
Pozostało "przywrócić" termometr...
TEORIA jest wtedy gdy wszystko wiemy i nic nie działa
PRAKTYKA jest wtedy gdy wszystko działa a my nie wiemy dlaczego
My łączymy teorię z praktyką czyli nic nie działa i nikt nie wie dlaczego
Zybi
Posts: 1511
Joined: Sun Jun 26, 2016 4:24 pm

Post

Przy testach wyszedł jeszcze jeden problem. Przy "ręcznym" sterowaniu oba przyciski powodują zmianę stanu ikon tego samego kanału (0) na smartfonie, przynajmniej u mnie, bo mam trochę zmodyfikowaną definicję płytek BOARD, a właściwie wprowadziłem nową. Dzięki temu działa mi termometr.
User avatar
slawek
Posts: 2466
Joined: Mon Mar 14, 2016 11:48 pm
Location: Biała Podlaska

Post

A jak ze zmianą trybu btn/switch?
u mnie zmienia tylko dla 1 kanału...
okienko w konfigu mam jedno... i zmienia tylko 1 kanał, 2 mam button
TEORIA jest wtedy gdy wszystko wiemy i nic nie działa
PRAKTYKA jest wtedy gdy wszystko działa a my nie wiemy dlaczego
My łączymy teorię z praktyką czyli nic nie działa i nikt nie wie dlaczego

Return to “Pomoc”