• 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
hc12 komunikacja
#6
(28-07-2021, 01:48)kaczakat napisał(a): Wysyłaj dane w stałych odstępach czasu, np. do 20ms, do takiego interwału dobierz prędkość transmisji, jak przez np. 3 cykle nie odbierzesz polecenia (czyli mierz timeout) to zareaguj, np. zatrzymaj działanie wyciągarki. Wywal delay i użyj WD. Zabezpieczeń pewnie powinno być więcej, takie urządzenie może narobić szkód czy okaleczyć, zdrowia życzę.

Stworzyłem nowy kod bez delay 


Nadajnik:
-gdy wcisnę guzik wysyłam co 5ms "11"  ,

Odbiornik:
-gdy odbiorę "11"włączam diodę
-jeśli od ostatniego odbioru "11" minęło ponad 15ms diodę gaszę  

to jest najlepszy patent bo odrazu mam zabezpieczenie przed utratą zasięgu(i kod jest nieskomplikowany  Smile  )  bo gdy odbiornik nie dostanie danych to sam przekaźniki powyłącza

tylko jest jeden problem a mianowicie gdy nacisnę guzik dioda zapala się natychmiast,
ale gdy go puszczę dioda gaśnie po ok 1.5-2s

-próbowałem przejść na serial sprzętowy i nic się nie zmieniło

-odbiornik zasilany z 2x 18650 połączony grubymi kablami jedyne co to nie dałem kondensatora filtrującego

-według mnie problem leży w kodzie odbiornika bo jak podglądam te przychodzące "11" w serial monitorze odbiornika to wyglada to tak:
lecą zera - gdy wcisnę guzik odrazu zaczynają lecieś jedynki - gdy puszczę guzik serial się natychmiast zatrzymuje na te 1.5-2s i po tym czasie gaśnie dioda i jednocześnie lecą zera w serial monitorze


kod nadajnika:

Kod:
#include <SoftwareSerial.h>
SoftwareSerial hc12nadajnik(10, 11); // RX, TX
int guzik=3;
unsigned long czas=0;
unsigned long zapamietanyczas=0;
unsigned long roznica=0;

void setup() {
  hc12nadajnik.begin(9600);
  pinMode(guzik,INPUT_PULLUP);
 

}

void loop() {
czas = millis();
roznica=czas-zapamietanyczas;

  if(digitalRead(guzik)==LOW && roznica >= 5UL){
    hc12nadajnik.println(11);
    zapamietanyczas=czas;
  }
hc12nadajnik.flush();
}


kod odbiornika:


Kod:
#include <SoftwareSerial.h>
SoftwareSerial hc12odbiornik(10, 11); // RX, TX
int dioda =4;
int dane =0;

unsigned long czas=0;
unsigned long zapamietanyczas=0;
unsigned long roznica=0;

void setup() {
pinMode(dioda, OUTPUT);
hc12odbiornik.begin(9600);
Serial.begin(9600);
}

void loop() {
  czas=millis();
  roznica = czas - zapamietanyczas;
 
  if(hc12odbiornik.available())   
     dane = hc12odbiornik.parseInt();

  if(dane==11){
  digitalWrite(dioda,HIGH);
  zapamietanyczas=czas;}
   
  if(roznica>=15){
    digitalWrite(dioda,LOW);
   
  }
   
Serial.println(dane);
}
 
Odpowiedź
  


Wiadomości w tym wątku
hc12 komunikacja - przez kamilussulimak - 26-07-2021, 21:04
RE: hc12 komunikacja - przez Jarewa0606 - 27-07-2021, 05:49
RE: hc12 komunikacja - przez kamilussulimak - 27-07-2021, 21:36
RE: hc12 komunikacja - przez Jarewa0606 - 27-07-2021, 23:34
RE: hc12 komunikacja - przez kaczakat - 28-07-2021, 01:48
RE: hc12 komunikacja - przez kamilussulimak - 28-07-2021, 19:23
RE: hc12 komunikacja - przez kamilussulimak - 29-07-2021, 15:24

Skocz do:


Przeglądający: 1 gości