Skocz do zawartości

Czujnik otwartej lodówki


roraty

Pomocna odpowiedź

Witam, chciałbym zrobić projekt na arduino, który składa się z guzika głośniczka i mikrokontrolera oczywiście. Polegałoby to na tym, że guzik zamontowany na ramie jest wciśnięty gdy lodówka jest zamknięta, a gdy jest otwarta po  np. 5min głośnik zaczyna wydawać dźwięk (ponieważ guzik nie jest wciśnięty). Problem polega na tym że nie mam pojęcia gdzie umieścić instrukcje delay() w kodzie i czy w ogóle jest sens używać takiej instrukcji.

Oto kod:

void setup()
{
pinMode(5,OUTPUT);
pinMode(7,INPUT_PULLUP);
}
void loop() 
{
  if(digitalRead(7)==HIGH)
  {
    digitalWrite(5,LOW);
  }
  else
  {
    digitalWrite(5,HIGH);
  }
} 

 

Link do komentarza
Share on other sites

Cześć, witamy na forum 😀

Tu nie do końca potrzebujesz delay(). Twoim zadaniem będzie odmierzyć czas, a do tego może służyć funkcja millis(), która zwraca liczbę (long) milisekund jakie upłynęły od startu programu. Czyli w momencie przełączenia przycisku z jednego stanu w drugi musisz zapamiętać czas w jakim otwarto drzwi, a następnie sprawdzać czy minęło 5000 milisekund (5s) odejmując od aktualnego czasu zapamiętany.

Całe obliczenia możesz wykonywać w głównej pętli. Możesz dać na jej końcu mały delay aby program nie leciał jak szalony (np 50ms).

Jeżeli czas się naliczy (róznica > progu np. 5000) to włączasz buzzer, a wyłączysz buzzer gdy zewrzesz przycisk w drzwiach.

  • Lubię! 1
Link do komentarza
Share on other sites

Program ma lecieć jak szalony :D. Jak już wstawiasz to delay(50) to możesz w każdej pętli zliczać sobie zmienną, zerować gdy drzwi zamknięte, a pozwalać jej rosnąć gdy otwarte. Gdy przekroczy wartość 5s/50ms (100) włącz alarm. Za chwile będziesz chciał dodać sterowanie WIFI i pomiar  temperatury, także od razu zajrzyj do kursu, w ostatniej lekcji jest millis();, a na forum mnóstwo przykładowych kodów z wykorzystaniem tej funkcji.

  • Lubię! 2
Link do komentarza
Share on other sites

Możesz poćwiczyć na tym przykładzie. Wgraj bezpośrednio do arduino otwórz Serial monitor i wyślij r . Dioda na pinie 13 zaświeci się na 3 sekundy i zgaśnie. 

int led = 13;
unsigned long Start; 
unsigned long buttonTime=0;
int Power=0;

void setup() 
{
  Serial.begin(9600);
  pinMode(led, OUTPUT);   
  
}
void loop() {
  Start = millis();
  if ((Start-buttonTime)>=3000)
  {
  digitalWrite(led, LOW);
  Power=0;
  }
  else if (Power==1) digitalWrite(led, HIGH);
  
  if (Serial.available() > 0) 
   {
      char  komendy = Serial.read();
       
        switch(komendy) 
        {
          case'r':
          buttonTime=millis();
          Power=1;
           break;
        }
   }
}

 

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

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.