• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
przesyłąnie stanu wejścia
#1
Jak przerobić ten kawałek kodu aby przesyłał po mqtt stan wejścia? W tej chwili po podaniu sygnału na button_pin przesyła komendę uruchamiającą przekaźnik. Chcę go przerobić tak aby przesyłał info z kontraktonu przy oknie z info czy okno jest otwarte czy zamknięte.

Kod:
const int SALON_KANAPA_BUTTON_PIN = 22;
const int SALON_KANAPA_RELAY_PIN = 23;
String SALON_KANAPA_ON_COMMAND("salon_kanapa#1");
String SALON_KANAPA_OFF_COMMAND("salon_kanapa#0");
const int AFTER_CHANGE_DELAY = 1500;

int Salon_kanapaButtonState;
int Salon_kanapaState = LOW;

void initializeSalon_kanapa() {
    pinMode(SALON_KANAPA_BUTTON_PIN, INPUT);
    pinMode(SALON_KANAPA_RELAY_PIN, OUTPUT);
    setSalon_kanapaState(LOW);
 
}

void checkSalon_kanapa() {
  Salon_kanapaButtonState = digitalRead(SALON_KANAPA_BUTTON_PIN);
  if (Salon_kanapaButtonState == HIGH) {
    toogleSalon_kanapa();  
    delay(AFTER_CHANGE_DELAY);
  }
}

void setSalon_kanapaState(int state) {
     digitalWrite(SALON_KANAPA_RELAY_PIN, state);
      Salon_kanapaState = state;
      if (state == LOW) {
        sendMqttState(SALON_KANAPA_OFF_COMMAND);
      } else {
                sendMqttState(SALON_KANAPA_ON_COMMAND);
      }

}

void toogleSalon_kanapa() {
  if (Salon_kanapaState == LOW) {
      setSalon_kanapaState(HIGH);
    } else {
      setSalon_kanapaState(LOW);
    }
}
 
Odpowiedź
#2
Program ma sprawdzać w pętli stan pinu, czy reagować na jego zmianę? Albo jeszcze na coś innego?
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#3
Żeby coś analizować jest potrzebny kod+schemat. Input jako przycisk zadziała tylko gdy "w czasie spoczynku" jest wymuszany 1 stan, a drugi działaniem. Stan w spoczynku nie jest określony w kodzie, więc powinien być jakoś na schemacie.
Poza tym użyj millis lub biblioteki do przycisków, dalay to kiepski pomysł, słaba droga na pisanie programów mających się z czymś w dodatku komunikować.
 
Odpowiedź
#4
(09-10-2019, 16:00)Robson Kerman napisał(a): Program ma sprawdzać w pętli stan pinu, czy reagować na jego zmianę? Albo jeszcze na coś innego?
Program ma sprawdzać stan pinu - po otwarciu okna pojawi się stan wysoki i wtedy powinien przesłać komunikat mqtt. Myślę, że praca w pętli będzie chyba dobrym rozwiązaniem.

(10-10-2019, 01:16)kaczakat napisał(a): Żeby coś analizować jest potrzebny kod+schemat. Input jako przycisk zadziała tylko gdy "w czasie spoczynku" jest wymuszany 1 stan, a drugi działaniem. Stan w spoczynku nie jest określony w kodzie, więc powinien być jakoś na schemacie.
Poza tym użyj millis lub biblioteki do przycisków, dalay to kiepski pomysł, słaba droga na pisanie programów mających się z czymś w dodatku komunikować.

Jestem bardzo początkującym w dziedzinie ardu i na razie moje projekty opierają się na przeróbkach gotowych programów znalezionych w sieci.
 
Odpowiedź
#5
Nie ważne czy zaczynasz, czy już zrobiłeś 100 projektów. Pin ma mieć dwa stany, jeden stan ma być wymuszany przy braku aktywności, a drugi przy aktywności. Aktywność to może być Twój paluszek na przycisku, albo ta krańcówka.
Po otwarciu okna pojawia się stan wysoki, czyli powinieneś zadbać o to, że jak okno jest zamknięte to coś wymusza stan niski. Inaczej po zabraniu impulsu wysokiego pin INPUT zostaje z tym wysokim stanem i sobie "pływa". Chyba, że krańcówka wymusza raz wysoki, raz niski.
W AVR programowo można wymusić stan wysoki pinMode(SALON_KANAPA_BUTTON_PIN, INPUT_PULLUP);. Dla stanu niskiego bierzesz rezystor np. 10k i spinasz do GND - masz sprzętowy INPUT_PULLDOWN.
Dlatego pytałem o schemat, jak to ma być u Ciebie.
Raczej nie powinien wysyłać nic gdy jest stan wysoki, a tylko raz, gdy stan był niski i zmienił się na stan wysoki. Chcesz mieć komunikat wysyłany milion razy/s gdy okno jest otwarte?
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości