Supla Device jak wywołać metodę z klasy migania diody?

nebraska
Posts: 204
Joined: Thu Dec 08, 2022 3:00 pm
Been thanked: 1 time

Post

Przeglądałem źródła i stworzyłęm sobie obiekt potem wskaznik na wywołanie metody z klasy.
Zapalic i wyłączyć już umiem :lol: ale nie wiem jak zrobić żeby wywołać miganie diody w różnych sekwencjach czasowych.
Probowałem użyć funkcji setCustomSequence(150, 150, 400, 3, 5); widziałem że ona ma przypisane argumenty ale nie chce zamigać.

Code: Select all

#define BUTTON_PIN 0
#include <Arduino.h>
#include <SuplaDevice.h>
#include <supla/control/button.h>
#include <supla/control/blinking_led.h>
#include <supla/device/status_led.h>

Supla::Device::StatusLed *myLed = nullptr;

void setup() {
  Serial.begin(115200);
  myLed = new Supla::Device::StatusLed(2, true);

  SuplaDevice.begin();                   
}

void loop() {
  
   myLed->setCustomSequence(150, 150, 30, 3, 1);
  
}
[email protected]
Posts: 1584
Joined: Mon Feb 06, 2023 8:56 am
Has thanked: 18 times
Been thanked: 26 times

Post

nebraska wrote: Sun Oct 12, 2025 7:03 pm Przeglądałem źródła i stworzyłęm sobie obiekt potem wskaznik na wywołanie metody z klasy.
Zapalic i wyłączyć już umiem :lol: ale nie wiem jak zrobić żeby wywołać miganie diody w różnych sekwencjach czasowych.
Probowałem użyć funkcji setCustomSequence(150, 150, 400, 3, 5); widziałem że ona ma przypisane argumenty ale nie chce zamigać.

Code: Select all

#define BUTTON_PIN 0
#include <Arduino.h>
#include <SuplaDevice.h>
#include <supla/control/button.h>
#include <supla/control/blinking_led.h>
#include <supla/device/status_led.h>

Supla::Device::StatusLed *myLed = nullptr;

void setup() {
  Serial.begin(115200);
  myLed = new Supla::Device::StatusLed(2, true);

  SuplaDevice.begin();                   
}

void loop() {
  
   myLed->setCustomSequence(150, 150, 30, 3, 1);
  
}
a próbowałeś dać to do setup() ? bo tak jak teraz to ustawienie się wykonuje w kółko i nawet nie ma kiedy zamigać pewnie
nebraska
Posts: 204
Joined: Thu Dec 08, 2022 3:00 pm
Been thanked: 1 time

Post

[email protected] wrote: Sun Oct 12, 2025 7:06 pm
nebraska wrote: Sun Oct 12, 2025 7:03 pm Przeglądałem źródła i stworzyłęm sobie obiekt potem wskaznik na wywołanie metody z klasy.
Zapalic i wyłączyć już umiem :lol: ale nie wiem jak zrobić żeby wywołać miganie diody w różnych sekwencjach czasowych.
Probowałem użyć funkcji setCustomSequence(150, 150, 400, 3, 5); widziałem że ona ma przypisane argumenty ale nie chce zamigać.

Code: Select all

#define BUTTON_PIN 0
#include <Arduino.h>
#include <SuplaDevice.h>
#include <supla/control/button.h>
#include <supla/control/blinking_led.h>
#include <supla/device/status_led.h>

Supla::Device::StatusLed *myLed = nullptr;

void setup() {
  Serial.begin(115200);
  myLed = new Supla::Device::StatusLed(2, true);

  SuplaDevice.begin();                   
}

void loop() {
  
   myLed->setCustomSequence(150, 150, 30, 3, 1);
  
}
a próbowałeś dać to do setup() ? bo tak jak teraz to ustawienie się wykonuje w kółko i nawet nie ma kiedy zamigać pewnie
Tak, nic to nie pomogło.
User avatar
klew
Posts: 13905
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

Jak to dasz w setup, ale po SuplaDevice. Begin() to powinno być ok.
W loop też można używać, ale wywołanie danej sekwencji nie powinno się w kółko wywoływać, tylko jednokrotnie.

Nie wiem też czy na pewno potrzebujesz StatusLed? To jest do diody sygnalizującej stan urządzenia.
Jeśli chcesz używać tego co czegoś innego, to polecam jej klasę bazowa: BlinkingLed. W tym zakresie co podałeś w kodzie, powinno używać się tak samo
Najlepsze suple dla Twojego domu :mrgreen:
nebraska
Posts: 204
Joined: Thu Dec 08, 2022 3:00 pm
Been thanked: 1 time

Post

klew wrote: Sun Oct 12, 2025 8:02 pm Jak to dasz w setup, ale po SuplaDevice. Begin() to powinno być ok.
W loop też można używać, ale wywołanie danej sekwencji nie powinno się w kółko wywoływać, tylko jednokrotnie.

Nie wiem też czy na pewno potrzebujesz StatusLed? To jest do diody sygnalizującej stan urządzenia.
Jeśli chcesz używać tego co czegoś innego, to polecam jej klasę bazowa: BlinkingLed. W tym zakresie co podałeś w kodzie, powinno używać się tak samo
Użyłem BlinkingLed ale nadal nie działa. co mam jeszcze źle?
Jak tak zrobie to tylko się świeci nic nie miga

Code: Select all

myLed->setCustomSequence(150, 0, 4, 4, 5);

Code: Select all

#define BUTTON_PIN 0
#include <Arduino.h>
#include <SuplaDevice.h>
#include <supla/control/button.h>
#include <supla/control/blinking_led.h>
#include <supla/device/status_led.h>

auto switch1 = new Supla::Control::Button(BUTTON_PIN, true, true);
Supla::Control::BlinkingLed *myLed = nullptr;
bool flaga{false};


enum default_actions {BUTTON1_CLICK1,BUTTON1_CLICK2 };
class addedActionsClass : public Supla::ActionHandler, public Supla::Element {
public:
  addedActionsClass() {}
  void handleAction(int event, int action) {

    if (action == BUTTON1_CLICK1) {
      printf("Klik x1 \n");
      flaga= true;
     
    }
  }
};
addedActionsClass *custAct = new addedActionsClass;


void setup() {
  Serial.begin(115200);

  myLed = new Supla::Control::BlinkingLed(2, true);

  switch1->setMulticlickTime(1200, false);
  switch1->setHoldTime(1800);

  switch1->addAction(BUTTON1_CLICK1, custAct, Supla::ON_CLICK_1);     

  SuplaDevice.begin();     

}

void loop() {

  if(flaga){
   myLed->setCustomSequence(150, 300, 4, 4, 5);
  flaga=false;
  }
}
zzrr
Posts: 1864
Joined: Wed Oct 26, 2022 7:35 pm
Has thanked: 76 times
Been thanked: 119 times

Post

nebraska wrote: Sun Oct 12, 2025 8:29 pm Użyłem BlinkingLed ale nadal nie działa. co mam jeszcze źle?
Jak tak zrobie to tylko się świeci nic nie miga

Code: Select all

myLed->setCustomSequence(150, 0, 4, 4, 5);
Jak tak zrobisz jak powyżej to tylko świeci bo drugi argument to przerwa po błysku. Nie może być 0 jeśli ma błyskać.
Ten kod który wstawiłeś w całości działa i dioda miga tylko nie koniecznie tak jak byś tego oczekiwał.
Parametry to (czas błyśnięcia, przerwa pomiędzy błyśnięciami, przerwa dla serii, ilość błyśnięć w serii, ilość serii)
Jak chcesz żeby tylko migała bez końca to np 150,150,0,0,0
cztery błyski z przerwą 1s i tak aż do samodzielnego wyłączenia to np 150,150,1000,4,0
5 serii po cztery błyski to np. 150,150,1000,4,5 i wyłączy się sama po 5 seriach
tylko np. 4 mignięcia 150,150,1000,4,1
radzik_r
Posts: 468
Joined: Sun Aug 11, 2019 5:32 pm
Has thanked: 1 time
Been thanked: 2 times

Post

Image

Code: Select all

#define BUTTON_PIN 0
#define LED_PIN    2

#include <Arduino.h>
#include <SuplaDevice.h>
#include <supla/log_wrapper.h>
#include <supla/control/button.h>
#include <supla/control/blinking_led.h>
//#include <supla/device/status_led.h>
#include <supla/control/pin_status_led.h>

auto switch1 = new Supla::Control::Button(BUTTON_PIN, true, true);
Supla::Control::BlinkingLed *myLed = nullptr;
//bool flaga{false};


int czas_blysniecia, przerwa_pomiedzy_blysnieciami, przerwa_dla_serii, ilosc_blysniec_w_serii, ilosc_serii;



enum default_actions {BUTTON1_CLICK1, BUTTON1_CLICK2, BUTTON1_HOLD };
class addedActionsClass : public Supla::ActionHandler, public Supla::Element {
  public:
    addedActionsClass() {}
    void handleAction(int event, int action) override {
      const char *actionName =
        (action == BUTTON1_CLICK1) ? "BUTTON1_CLICK1" :
        (action == BUTTON1_CLICK2) ? "BUTTON1_CLICK2" :
        (action == BUTTON1_HOLD)   ? "BUTTON1_HOLD" :
        "";

      SUPLA_LOG_DEBUG("Event %d, Action %d (%s)", event, action, actionName);

      switch (action) {
        case BUTTON1_CLICK1:
        
          czas_blysniecia               = 150;
          przerwa_pomiedzy_blysnieciami = 300;
          przerwa_dla_serii             = 4;
          ilosc_blysniec_w_serii        = 4;
          ilosc_serii                   = 5;
          
          myLed->setCustomSequence(czas_blysniecia,
                                   przerwa_pomiedzy_blysnieciami,
                                   przerwa_dla_serii,
                                   ilosc_blysniec_w_serii,
                                   ilosc_serii);
          break;

        case BUTTON1_CLICK2:
        
          czas_blysniecia               = 111;
          przerwa_pomiedzy_blysnieciami = 333;
          przerwa_dla_serii             = 999;
          ilosc_blysniec_w_serii        = 2;
          ilosc_serii                   = 3;
          
          myLed->setCustomSequence(czas_blysniecia,
                                   przerwa_pomiedzy_blysnieciami,
                                   przerwa_dla_serii,
                                   ilosc_blysniec_w_serii,
                                   ilosc_serii);
          break;

        case BUTTON1_HOLD:
      
          czas_blysniecia               = 99;
          przerwa_pomiedzy_blysnieciami = 1111;
          przerwa_dla_serii             = 77;
          ilosc_blysniec_w_serii        = 5;
          ilosc_serii                   = 10;
          
          myLed->setCustomSequence(czas_blysniecia,
                                   przerwa_pomiedzy_blysnieciami,
                                   przerwa_dla_serii,
                                   ilosc_blysniec_w_serii,
                                   ilosc_serii);
          break;


      }
    }

};
addedActionsClass *custAct = new addedActionsClass;




void setup() {
  Serial.begin(115200);

  myLed = new Supla::Control::BlinkingLed(LED_PIN, false);

  switch1->setMulticlickTime(1200);
  switch1->setHoldTime(1800);

  switch1->addAction(BUTTON1_CLICK1, custAct, Supla::ON_CLICK_1);
  switch1->addAction(BUTTON1_CLICK2, custAct, Supla::ON_CLICK_2);
  switch1->addAction(BUTTON1_HOLD,   custAct, Supla::ON_HOLD);

  SuplaDevice.begin();

}

void loop() {
  //  SuplaDevice.iterate();
}

eksperymentuj :)
nebraska
Posts: 204
Joined: Thu Dec 08, 2022 3:00 pm
Been thanked: 1 time

Post

Dzięki Panowie za pomoc jak wrócę ze szpitala to sprawdzę. Bo teraz niestety tydzień z życia wyłączony.
User avatar
klew
Posts: 13905
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

nebraska wrote: Mon Oct 13, 2025 6:05 pm Dzięki Panowie za pomoc jak wrócę ze szpitala to sprawdzę. Bo teraz niestety tydzień z życia wyłączony.
A pisaliśmy: nie podłączaj DSa do basica :D
A tak serio, to szybkiego powrotu do domu !
Najlepsze suple dla Twojego domu :mrgreen:
nebraska
Posts: 204
Joined: Thu Dec 08, 2022 3:00 pm
Been thanked: 1 time

Post

klew wrote: Mon Oct 13, 2025 6:22 pm
nebraska wrote: Mon Oct 13, 2025 6:05 pm Dzięki Panowie za pomoc jak wrócę ze szpitala to sprawdzę. Bo teraz niestety tydzień z życia wyłączony.
A pisaliśmy: nie podłączaj DSa do basica :D
A tak serio, to szybkiego powrotu do domu !
Dziękuję

Return to “Arduino IDE”