Skocz do zawartości

Uruchamianie wyświetlacza lub programu po wykryciu ruchu


Krisk

Pomocna odpowiedź

10 minut temu, farmaceuta napisał:

U Ciebie w bibliotece funkcja odpowiedzialna za czyszczenie to 

lcd.clear();

dorzuc u siebie w kodzie na końcu jakiś delay(5000) np. I na końcu ten .clear(), i sprawdź czy po upływie kilku sekund matryca zgaśnie

Compilation error: 'lcd' was not declared in this scope

 

Link do komentarza
Share on other sites

26 minut temu, ethanak napisał:

E tam.

Na początku loop czytasz pin podłączony do czujki PIR. Jeśli stan jest niski - wygaszasz wyświetlacz, robisz jakiegoś delaja typu sekunda i return.

Nie, nie wiem jak się w Twojej bibliotee wygasza wyświetlacz, ale przeczytanie dokumentacji i przykładów nie powinno przekraczać możliwości początkującego.

Czyli coś w stylu:

void loop()
{
  if (digitalRead(PIN_PIR) == LOW) {
    // wygaś wyświetlacz
    delay(1000);
    return;
  }
  // zapal wyświetlacz
  //i dalej jak było wcześnmiej
  
  

Spróbuj tak (oczywiście ustaw pin na INPUT w setup).

 

 

void loop()
{

 if (digitalRead(2) == LOW) {
    // wygaś wyświetlacz
    delay(1000);
    return;
 }

Dodałem to i teraz wyświetlacz jest wyłączony zaraz po podłączeniu zasilania i startuje po wykryciu dystansu przez czujnik ultradźwiękowy + PIR. Sam odczyt przestał działać płynnie, czas odświeżania wynosi kilka s.

 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

4 minuty temu, jand napisał:
P.displayClear();

 

tak, ta funkcja wygasza ekran.

Dodałem: i ekran mruga wraz z odczytem (1s wygaszony, 3s załączony)

void loop()
{
P.displayClear();
delay(1000);
  
readDistance(); 

 

Link do komentarza
Share on other sites

(edytowany)

Trochę do przodu, ale cos jeszcze nie gra..

Dodałem poniższe linijki - poza readDistance ale wygląda na to, że wyświetlacz mruga swoim rytmem, jakby sensor ultradźwiękowy decy:

(EDIT)

Usunąłem pętlę, którą dodałem wcześniej i teraz jak czujnik nie wykrywa ruchu to wyświetlacz mruga na ułamki sekund, a po wykryciu działa normalnie

 

  pinMode(2, INPUT); //PIR jako wejście
  pinMode(6, OUTPUT);
}

void loop()
{
if (digitalRead(2) == LOW){ //wykryto ruch
digitalWrite(6, HIGH); //dioda kontrolna
P.displayClear(); //czyszczenie ekranu
}

 else
 digitalWrite(6, LOW);
{
readDistance(); 

tak obecnie wygląda końcówka programu

  pinMode(2, INPUT); //PIR jako wejście
  pinMode(6, OUTPUT);
}

void loop()
{
if (digitalRead(2) == LOW){ //wykryto ruch
digitalWrite(6, HIGH); //dioda kontrolna
P.displayClear(); //czyszczenie ekranu
delay(500);
}

 else
 digitalWrite(6, LOW);
{
readDistance(); 
P.displayAnimate();
P.getZoneStatus(0);
    if (newDistance)
    {
    lastTime = millis(); 
    sprintf(megs, "%d", distance);
    P.displayReset(0);
    newDistance = false;
 
  }}
  if (millis() - lastTime >= 10000)
  {
   
  }
}

 

Edytowano przez Krisk
Link do komentarza
Share on other sites

1 minutę temu, ethanak napisał:

Tam miał być return... i ponawiam pytanie: wajchy na czujce dobrze ustawione?

Regulatory skręcone na min, regulowałem też czasem i po podkręceniu wyświetlacz dłużej się palił.

 

Link do komentarza
Share on other sites

3 minuty temu, Krisk napisał:

Regulatory skręcone na min

A zworka w jakiej pozycji?

Poza tym tam naprawdę był return po to, żeby jak czujka sygnalizuje że nie ma ruchu to nie odpalało całej maszynerii z wyświetlaniem bo to bez sensu. No, ale skoro uznałeś że nie jest potrzebny to pewnie wiesz lepiej, w końcu aż tak zielony nie jesteś 😉

 

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Coś mi tak się wydaje, że fragment:

 else
 digitalWrite(6, LOW);
{
readDistance(); 
P.displayAnimate();

powinien tak wyglądać:

 else
{
digitalWrite(6, LOW);
readDistance(); 
P.displayAnimate();

 

Link do komentarza
Share on other sites

19 godzin temu, jand napisał:

Coś mi tak się wydaje, że fragment:

 else
 digitalWrite(6, LOW);
{
readDistance(); 
P.displayAnimate();

powinien tak wyglądać:

 else
{
digitalWrite(6, LOW);
readDistance(); 
P.displayAnimate();

 

Zmiana ta nie spowodowała zmiany w działaniu.

Link do komentarza
Share on other sites

19 godzin temu, ethanak napisał:

A zworka w jakiej pozycji?

Poza tym tam naprawdę był return po to, żeby jak czujka sygnalizuje że nie ma ruchu to nie odpalało całej maszynerii z wyświetlaniem bo to bez sensu. No, ale skoro uznałeś że nie jest potrzebny to pewnie wiesz lepiej, w końcu aż tak zielony nie jesteś 😉

 

Z tym "Return" to gdzieś zgubiłem po drodze 🙂

Po wprowadzeniu wszystko zaczęło działać tak jak chciałem.

WIELKIE DZIĘKI ZA POMOC!!!

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.