Dodatkowy przycisk do podwójnego przekaźnika

Rlech
Posty: 7
Rejestracja: sob cze 25, 2016 7:15 am

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:

Kod: Zaznacz cały

 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?
Awatar użytkownika
pzygmunt
Posty: 18331
Rejestracja: wt sty 19, 2016 9:26 am
Lokalizacja: Paczków
Kontakt:

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);
Awatar użytkownika
slawek
Posty: 2465
Rejestracja: pn mar 14, 2016 11:48 pm
Lokalizacja: Biała Podlaska

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ć?
Załączniki
Screenshot from 2016-08-06 15_45_13.png
Screenshot from 2016-08-06 15_45_13.png (66.71 KiB) Przejrzano 4570 razy
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
Posty: 1511
Rejestracja: ndz cze 26, 2016 4:24 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ć.
Awatar użytkownika
pzygmunt
Posty: 18331
Rejestracja: wt sty 19, 2016 9:26 am
Lokalizacja: Paczków
Kontakt:

Kod: Zaznacz cały


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
Posty: 1511
Rejestracja: ndz cze 26, 2016 4:24 pm

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

keys.key_num = 1;
na
keys.key_num = 2;
Awatar użytkownika
pzygmunt
Posty: 18331
Rejestracja: wt sty 19, 2016 9:26 am
Lokalizacja: Paczków
Kontakt:

Zybi pisze: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 ;)
Awatar użytkownika
slawek
Posty: 2465
Rejestracja: pn mar 14, 2016 11:48 pm
Lokalizacja: Biała Podlaska

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
Posty: 1511
Rejestracja: ndz cze 26, 2016 4:24 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.
Awatar użytkownika
slawek
Posty: 2465
Rejestracja: pn mar 14, 2016 11:48 pm
Lokalizacja: Biała Podlaska

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
ODPOWIEDZ

Wróć do „Pomoc”