Jak podłaczyć przyciski w Arduino Mega do rolet wstandardowej bibliotece supla

Maniek913
Posts: 147
Joined: Thu Feb 22, 2018 9:46 pm

Sat Apr 13, 2019 9:21 pm

Nie, nie musisz, ale poczekaj z testowaniem dłuższą chwilę po resecie.(najlepiej kilka minut)
Akurat w tym momencie testuję moduł -15 rolet z przyciskami (czyli razem 60pinów!!)na arduino mega i jest OK.
damdud
Posts: 9
Joined: Wed Mar 20, 2019 9:47 pm

Sat Apr 13, 2019 9:31 pm

Numery kanałów nadaj się z automatu ?
Maniek913
Posts: 147
Joined: Thu Feb 22, 2018 9:46 pm

Sat Apr 13, 2019 9:34 pm

Nie, wszystko jest opisane w przykładzie - najpierw podajesz piny dla przekażników, a następnie kolejno -numer kanału, pin dla przycsku1, pin dla przycisku 2.
np wpis:
SuplaDevice.addRollerShutterRelays(49,48, true);
SuplaDevice.setRollerShutterButtons(0,22,23);

Tworzy kanał"0" (czyli pierwszy)z dwoma przekażnikami na pinach 49 i 48 i przyciskami na pinach 22 i 23
damdud
Posts: 9
Joined: Wed Mar 20, 2019 9:47 pm

Sat Apr 13, 2019 9:49 pm

Przyciski się aktywują po podłączeniu do internetu ? dla przydzielonego kanału ? Następnie można się rozłączyć z internetem ?

czy Arduino na podstanie poniższego kodu ogarnia jaki pin działa z określonym przekaźnikiem ? bez podłączania do internetu ?

// CHANNEL0 - TWO RELAYS (Roller shutter operation)
SuplaDevice.addRollerShutterRelays(47, // 46 - Pin number where the 1st relay is connected
46); // 47 - Pin number where the 2nd relay is connected

SuplaDevice.setRollerShutterButtons(0,20,21) // 0 - Channel Number
// 20 - Pin where the 1st button is connected
// 21 - Pin where the 2nd button is connected
User avatar
pzygmunt
Posts: 5757
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Contact:

Sat Apr 13, 2019 10:04 pm

Przyciski działają bez internetu i od razu. Wrzuć cały kod.
damdud
Posts: 9
Joined: Wed Mar 20, 2019 9:47 pm

Sat Apr 13, 2019 10:06 pm

Zmieniłem nr pinów i grupy kanałów na poprawne. Po podaniu GND na pin przekaźniki zaczęły działać !!! :D Dziękuje bardzo za pomoc , wskazówki i podpowiedzi.
Patryk
Posts: 134
Joined: Mon Jan 07, 2019 7:51 pm

Sat Apr 13, 2019 10:27 pm

damdud wrote:
Sat Apr 13, 2019 10:06 pm
Zmieniłem nr pinów i grupy kanałów na poprawne. Po podaniu GND na pin przekaźniki zaczęły działać !!! :D Dziękuje bardzo za pomoc , wskazówki i podpowiedzi.
Mógłbyś opisać teraz "łopatologicznie" w czym był problem ???
Dlaczego na początku nie chciało Ci to działać, a teraz działa.
W czym był problem ???

Oraz zamieścić kod (program), który ostatecznie wgrałeś.
Maniek913
Posts: 147
Joined: Thu Feb 22, 2018 9:46 pm

Sun Apr 14, 2019 9:55 am

pzygmunt wrote:
Sat Apr 13, 2019 10:04 pm
Przyciski działają bez internetu i od razu. Wrzuć cały kod.
To może wiesz dlaczego u mnie przyciski fizyczne działają dopiero kilka minut po uruchomieniu? ( za bardzo obciążony mikroprocesor?)
Skoro już poruszamy ten temat to może coś napiszesz o niedogodnościach w moim przypadku?- wgrałem taki projekt do arduino mega z popularnym scheldem W5100(na początku jest moja nieudana próba ogarnięcia zamykania i otwierania wszystkich rolet za pomocą jednej pary przycisków, ale mniejsza o to):

Code: Select all

/*
  Copyright (C) AC SOFTWARE SP. Z O.O.
  
  This program is free software; you can redistribute it and/or
  modify it under the terms of the GNU General Public License
  as published by the Free Software Foundation; either version 2
  of the License, or (at your option) any later version.
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.
  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/

#include <SPI.h>
#include <Ethernet.h>
#include <SuplaDevice.h>

//int customDigitalRead(int channelNumber, uint8_t pin)
{/*
  if (digitalRead(16))
  {
    SuplaDevice.rollerShutterShut(0);
    SuplaDevice.rollerShutterShut(1);
  }
  else if (digitalRead(17))
  {
    SuplaDevice.rollerShutterReveal(0);
    SuplaDevice.rollerShutterReveal(1);
  }
*/
  return digitalRead(pin);
}

void supla_rs_SavePosition(int channelNumber, int position) {
    // Save roller shutter position on flash memory.
    // *Arduino EEPROM is not recommended because of write cycle limits.
}

void supla_rs_LoadPosition(int channelNumber, int *position) {
    // Load roller shutter position from flash memory
}

void supla_rs_SaveSettings(int channelNumber, unsigned int full_opening_time, unsigned int full_closing_time) {
    // Save roller shutter settings on flash memory.
    // *Arduino EEPROM is not recommended because of write cycle limits.
}

void supla_rs_LoadSettings(int channelNumber, unsigned int *full_opening_time, unsigned int *full_closing_time) {
    // Load roller shutter settings from flash memory
}

void setup() {

  Serial.begin(9600);
 
  // Replace the falowing GUID
  char GUID[SUPLA_GUID_SIZE] = {--------------guid----------------};
  // with GUID that you can retrieve from https://www.supla.org/arduino/get-guid


  // Ethernet MAC address
  uint8_t mac[6] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05};


  /*
   * Having your device already registered at cloud.supla.org,
   * you want to change CHANNEL sequence or remove any of them,
   * then you must also remove the device itself from cloud.supla.org.
   * Otherwise you will get "Channel conflict!" error.
   */
  SuplaDevice.setDigitalReadFuncImpl(&customDigitalRead);

  // CHANNEL0 - TWO RELAYS (Roller shutter operation)
 
  SuplaDevice.addRollerShutterRelays(22,23);
  SuplaDevice.setRollerShutterButtons(0,11,12);
  
  SuplaDevice.addRollerShutterRelays(24,25);
  SuplaDevice.setRollerShutterButtons(1,8,9);
  
  SuplaDevice.addRollerShutterRelays(26,27);
  SuplaDevice.setRollerShutterButtons(2,6,7);
  
  SuplaDevice.addRollerShutterRelays(28,29);
  SuplaDevice.setRollerShutterButtons(3,3,5);
  
  SuplaDevice.addRollerShutterRelays(30,31);
  SuplaDevice.setRollerShutterButtons(4,14,2);
  
  SuplaDevice.addRollerShutterRelays(32,33);
  SuplaDevice.setRollerShutterButtons(5,16,15);
  
  SuplaDevice.addRollerShutterRelays(34,35);
  SuplaDevice.setRollerShutterButtons(6,18,17);
  
  SuplaDevice.addRollerShutterRelays(36,37);
  SuplaDevice.setRollerShutterButtons(7,20,19);
  
  SuplaDevice.addRollerShutterRelays(38,39);
  SuplaDevice.setRollerShutterButtons(8,A15,21);
  
  SuplaDevice.addRollerShutterRelays(40,41);
  SuplaDevice.setRollerShutterButtons(9,A13,A14);
  
  SuplaDevice.addRollerShutterRelays(42,43);
  SuplaDevice.setRollerShutterButtons(10,A11,A12);
  
  SuplaDevice.addRollerShutterRelays(44,45);
  SuplaDevice.setRollerShutterButtons(11,A9,A10);
  
  SuplaDevice.addRollerShutterRelays(46,47);
  SuplaDevice.setRollerShutterButtons(12,A7,A8);
  
  SuplaDevice.addRollerShutterRelays(48,49);
  SuplaDevice.setRollerShutterButtons(13,A5,A6);
  
  SuplaDevice.addRollerShutterRelays(4,53);
  SuplaDevice.setRollerShutterButtons(14,A3,A4);
  
  SuplaDevice.setRollerShutterFuncImpl(&supla_rs_SavePosition, &supla_rs_LoadPosition, &supla_rs_SaveSettings, &supla_rs_LoadSettings);
  
  /*
   * SuplaDevice Initialization.
   * Server address, LocationID and LocationPassword are available at https://cloud.supla.org 
   * If you do not have an account, you can create it at https://cloud.supla.org/account/create
   * SUPLA and SUPLA CLOUD are free of charge
   * 
   */
 
  SuplaDevice.begin(GUID,              // Global Unique Identifier 
                    mac,               // Ethernet MAC address
                    "svr",  // SUPLA server address
                    xxxx,                // Location ID 
                    "xxxx");           // Location Password
    
}

void loop() {
  SuplaDevice.iterate();
}
W załozeniu chciałem przetestować maksymalne możliwości tego sprzętu, więc tu jest 15kanałów rolet z fizycznymi przyciskami (miało być 16, ale nie ma już portów nadajacych się do użycia) czyli wykorzystuję 60 pinów.Mam zmontowane urządzenie i działa, ale...

1.W ciągu kilku minut po uruchomieniu, gdy nie podłączamy sieci LAN nie działają fizyczne przyciski- potem jest OK
2.Przy normalnej pracy po utracie zasilania nie można wykonać kalibracji rolet z fizycznego przycisku- tylko z poziomu aplikacji.
3.Czas pracy przeaźnika sterowanego z fizycznego przycisku jest dokładnie 2 razy dłuższy niż z aplikacji -nie przeszkadza to w normalnej pracy-wiem że kiedyś była o tym mowa i to już wyjaśniałeś, ale wtedy była mowa o dołożeniu 10% czasu.

Piny których nie mogłem użyć to
D0 i D1- to jest chyba UART dla złącza USB
D13 -dioda "L" na płytce
D50 i D52 - to chyba drugi UART dla LAN(migają podczas trasmisji w LAN)
D51 - nie wiem ,tam jest ciągle "1" logiczna
D4 i D10 też sprawiały problemy, ale w końcu nie miałem wyjścia i użyłem jednego z nich (D4) i działa.
Czyli podsumowując mam jeszcze wolne piny D10,A0,A1,A2, czyli mozna by dołożyć 16-ty kanał rolety, ale na razie tesuję to co mam skonfigurowane.
Martwi mnie trochę zapis stanu rolety w epromie - po co ta funkcja skoro i tak po zaniku zasilania nie wiadomo czy roleta była przed tym zanikiem zamknięta czy otwarta - trzeba ponownie "przeklikać" czyli zamknąć i otworzyć z aplikacji wszystkie rolety.


Proszę więc o uwagi co tego projektu-ma to szanse działać długo i niezawodnie?
User avatar
pzygmunt
Posts: 5757
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Contact:

Sun Apr 14, 2019 10:28 am

Usuń cały swój kod oraz wszystkie rolety poza jedną i sprawdź czy nadal dzieje się tak jak opisujesz. Co do czasu x2 z fizycznego przycisku to jest to prawidłowe działanie.
Maniek913
Posts: 147
Joined: Thu Feb 22, 2018 9:46 pm

Sun Apr 14, 2019 6:23 pm

pzygmunt wrote:
Sun Apr 14, 2019 10:28 am
Usuń cały swój kod oraz wszystkie rolety poza jedną i sprawdź czy nadal dzieje się tak jak opisujesz. Co do czasu x2 z fizycznego przycisku to jest to prawidłowe działanie.
Tak zrobiłem i jest identyczny efekt.
Ale większy problem jest z utrzymaniem porządku z stanami rolet.
Co do kalibracji rolet po zaniku zasilania -na szczęście można to zrobić za pomocą grupy kanałów, niestety nie mogę dodać do grupy więcej niż 10 kanałów- z czego wynika to ograniczenie?
Samo dodawanie kanałów też wygląda dziwnie -:
klikam 1 roletę , dodała się 1, klikam 2, to samo, ale już przy 5-tej dodaje się zamiast 5 roleta nr 7??? i tak dalej, potem już nie ma znaczenia którą się kliknie i tak dodaje się dowolna następna,ale nigdy ta kliknięta, tak więc trzeba trochę samozaparcia, by dodać te kanały co się chce, a nie te co chce system.
Ogólnie w tych grupach chyba coś się nie wyrabia - nie wiem czy to wina sprzętu czy clouda, w każdym razie gdy sterujemy dowolną z 15 rolet indywidualnie jest wszystko OK, ale gdy uruchomimy grupę ( ja z konieczności stworzyłem dwie - jedna 10 kanałów, jedna 5)to już się sypie:
Przy pierwszym użyciu fizycznie zamykają się wszystkie rolety, ale nie zawsze ta informacja zostaje odzwierciedlona w aplikacji (nie zdążą wszystkie trójkąciki dojść do dolnej części grafiki i wtedy całe "okno" nie jest zasłonięte. W tym stanie już nie można wykonać żadnej operacji na grupie - (chyba że kilka razy się kliknie polecenie zamknięcia ale nie zawsze działa) gdy jednak zdąży się cała operacja wykonać to jest OK. Myślałem że to wina dużej ilości kanałów w grupie, ale nie - to samo równie często występuje w grupie 5 kanałów jak i w grupie 10 kanałów.
W sumie korzystanie z grup kanałów jest niemożliwe - po użyciu stany faktyczne z stanami zapisanym w aplikacji kompletnie się rozjeżdżają i wtedy trzeba wszystkie rolety "przeklikać"
Możesz coś poradzić?
Widzę że nikt do tej pory nie "centralizował" supli, a szkoda, bo rozwiązanie z kablem zamiast WiFi jest idealne przy nowo budowanych instalacjach.
Post Reply