Dodatkowy przycisk do podwójnego przekaźnika

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

Sun Jul 31, 2016 5:47 pm

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: 6239
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Contact:

Mon Aug 01, 2016 8:57 am

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: 2193
Joined: Mon Mar 14, 2016 11:48 pm
Location: Biała Podlaska

Sat Aug 06, 2016 8:06 pm

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ć?
Attachments
Screenshot from 2016-08-06 15_45_13.png
Screenshot from 2016-08-06 15_45_13.png (66.71 KiB) Viewed 1833 times
Gdy wszystkie możliwe sposoby zawiodą - pozostaje przeczytać instrukcję...
Zybi
Posts: 1354
Joined: Sun Jun 26, 2016 4:24 pm

Sun Aug 07, 2016 8:59 pm

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: 6239
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Contact:

Mon Aug 08, 2016 9:59 am

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: 1354
Joined: Sun Jun 26, 2016 4:24 pm

Mon Aug 08, 2016 5:18 pm

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

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

Mon Aug 08, 2016 5:33 pm

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: 2193
Joined: Mon Mar 14, 2016 11:48 pm
Location: Biała Podlaska

Mon Aug 08, 2016 6:49 pm

Dzięki - działa.
Pozostało "przywrócić" termometr...
Gdy wszystkie możliwe sposoby zawiodą - pozostaje przeczytać instrukcję...
Zybi
Posts: 1354
Joined: Sun Jun 26, 2016 4:24 pm

Mon Aug 08, 2016 7:11 pm

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: 2193
Joined: Mon Mar 14, 2016 11:48 pm
Location: Biała Podlaska

Mon Aug 08, 2016 7:23 pm

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
Gdy wszystkie możliwe sposoby zawiodą - pozostaje przeczytać instrukcję...
Post Reply