Skocz do zawartości

Uruchamianie wyświetlacza lub programu po wykryciu ruchu


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

 

2 minuty temu, Krisk napisał:

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

 

To wpisz nazwę własnego LCD czyli 

P.clear();

Żeby była jasność...dzialaCi ten wyświetlacz? Udało Ci się coś wyświetlić?

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.

 

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(); 

 

A zworki i gałeczki na czujce dobrze ustawione? A wstawiłeś funkcję wygaszania wyświetlacza tam gdzie jest komentarz czy może kompilator miał przeczytać komentarz i sam wstawić funkcję?

38 minut temu, ethanak napisał:

 A wstawiłeś funkcję wygaszania wyświetlacza tam gdzie jest komentarz czy może kompilator miał przeczytać komentarz i sam wstawić funkcję?

Pewnie to to...😜

(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
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ł.

 

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

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();

 

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.

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!!!

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...