wyjście impulsujące

Masz pomysł na funkcjonalność lub koncepcję na rozwój projektu. Opisz wszystko tutaj.
Fryga
Posts: 101
Joined: Tue Oct 13, 2020 5:57 pm
Location: Mińsk Mazowiecki

Post

Klew - może tak być?

Nie wiem dlaczego metody w klasie class Relay : public Element nie pozwalają sie kompilować.

// Metody do ustawiania i pobierania stanu
void setStateValue(bool state);
bool getStateValue();

Code: Select all

#include <SuplaDevice.h>
#include <supla/control/relay.h>
#include <supla/control/virtual_relay.h>
#include <supla/sensor/binary.h>
#include <supla/network/esp_wifi.h>

#define RELAY_1_PIN 5  // Pin dla pierwszego przekaźnika
#define RELAY_2_PIN 4  // Pin dla drugiego przekaźnika

// Konfiguracja WiFi
const char* ssid = "xxxx";
const char* password = "xxxxxx";

// Konfiguracja Supla
const char GUID[SUPLA_GUID_SIZE] = {0x3D, 0x37, 0x3B, 0xBD, 0x14, 0x5C, 0x93, 0x29, 0x14, 0xA3, 0x59, 0x86, 0x92, 0x9C, 0x89, 0x32};
const char AUTHKEY[SUPLA_AUTHKEY_SIZE] = {0xFF, 0x83, 0x26, 0xBA, 0xBF, 0x65, 0xB6, 0x1E, 0xD8, 0x7B, 0xA3, 0x0A, 0x2A, 0xAE, 0xE5, 0x5B};

Supla::ESPWifi wifi(ssid, password);


Supla::Control::Relay *relay1;
Supla::Control::Relay *relay2;

unsigned long lastToggleTime1 = 0;
unsigned long lastToggleTime2 = 0;
bool relay1State = false;
bool relay2State = false;
const unsigned long INTERVAL_1 = 3000; // 2 sekundy włączone + 1 sekunda wyłączone
const unsigned long INTERVAL_2 = 10500; // 0.5 sekundy włączone + 10 sekund wyłączone

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

  // Inicjalizacja SuplaDevice
  SuplaDevice.begin(
    GUID,              // Global Unique Identifier
    "svrXX.supla.org",  // SUPLA server address
    "xxxxxxx@gmail.com",   // Email address used to login to Supla Cloud
    AUTHKEY);          // Authorization key


  // Konfiguracja przekaźników
  relay1 = new Supla::Control::Relay(RELAY_1_PIN);
  relay2 = new Supla::Control::Relay(RELAY_2_PIN);
}

void loop() {
  SuplaDevice.iterate();

  unsigned long currentTime = millis();

  // Sterowanie pierwszym przekaźnikiem (2 sekundy / 1 sekunda)
  if (currentTime - lastToggleTime1 >= (relay1State ? 2000 : 1000)) {
    relay1State = !relay1State;
    //relay1->setStateValue(relay1State); // zmienilem na metode toggle()
    relay1->toggle();
    lastToggleTime1 = currentTime;
  }

  // Sterowanie drugim przekaźnikiem (0.5 sekundy / 10 sekund)
  if (currentTime - lastToggleTime2 >= INTERVAL_2) {
    relay2State = true;
    //relay2->setStateValue(relay2State);
    relay2->toggle();
    lastToggleTime2 = currentTime;
  } else if (currentTime - lastToggleTime2 >= 500 && relay2State) {
    relay2State = false;
  //  relay2->setStateValue(relay2State);
  // dostaje blad  'class Supla::Control::Relay' has no member named 'setStateValue'
   // Metody do ustawiania i pobierania stanu mimo ze w bilbiotece sa te metody zdefiniowane
//  void setStateValue(bool state);
//  bool getStateValue();
    relay2->toggle();
  }
}
Fryga
Posts: 101
Joined: Tue Oct 13, 2020 5:57 pm
Location: Mińsk Mazowiecki

Post

Solution ma kilka wad.

Wg mnie gada z cloudem, nie wiem czy nie grzebie co impuls po epromie.

Potrzebne jest rozwiązanie nie angażujące cloud - wyłącznie lokalnie, do zasilania buzzera czy diody led.
User avatar
Bania
Posts: 27
Joined: Wed Jul 24, 2024 5:03 pm
Location: Bielsko-Biała

Post

Code: Select all

relay1->turnOn(); // włącz przekaźnik
relay1->turnOff(); // wyłącz przekaźnik
relay1->isOn(); // sprawdź stan
Jeśli chcesz ominąć Cloud, to użyj klasycznych funkcji arduino:

w setup()

Code: Select all

pinMode(ledPin, OUTPUT);
w loop()

Code: Select all

unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
User avatar
klew
Posts: 10683
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Fryga wrote: Sat Aug 31, 2024 12:40 pm Nie wiem dlaczego metody w klasie class Relay : public Element nie pozwalają sie kompilować.

// Metody do ustawiania i pobierania stanu
void setStateValue(bool state);
bool getStateValue();
A skąd te metody wziąłeś? Nie można sobie wymyślić nazwy metody i jej używać, bo semantycznie tekst ma sens :P..
Tu masz plik nagłówkowy: https://github.com/SUPLA/supla-device/b ... ol/relay.h
i w nim znajdziesz wszystkie metody, jakie można na klasie Relay wywołać. Do tego dochodzą jeszcze metody z klas bazowych.
Fryga wrote: Sun Sep 01, 2024 10:14 am Solution ma kilka wad.

Wg mnie gada z cloudem, nie wiem czy nie grzebie co impuls po epromie.

Potrzebne jest rozwiązanie nie angażujące cloud - wyłącznie lokalnie, do zasilania buzzera czy diody led.

Klasa Relay służy do sterowania przekaźikiem z poziomu serwera/clouda/apek. Więc gada z serwerem. Wcześniej pisałem, aby sobie użył klasy StatusLed. Możesz też zrobić tak jak zaproponował Bania.

Return to “Pomysły i koncepcje”