Skocz do zawartości

Otwarcie szafki zliczane na wyświetlaczu LCD (projekt).


Szymon456

Pomocna odpowiedź

245314697_Pocztek.thumb.png.40a179232990115118a7478fbe0a0be0.png

Ten projekt będzie zliczał otwarcie szafki za pomącą kontaktronu i wyświetlał liczbę otworzeń. Do tego projektu potrzebujemy:

  1. Wyświetlacz LCD 2×16,
  2. Płytkę stykową,
  3. Przewody połączeniowe męsko-męskie,
  4. Arduino,
  5. Kontaktron,
  6. Potencjometr 5k,

 Projekt składamy zgodnie z poniższym schematem:

FORBOT.thumb.png.78f0a601c081829e0952f8a55b19f8ba.png245314697_Pocztek.thumb.png.40a179232990115118a7478fbe0a0be0.png

Teraz pora na napisanie kodu. Mój wygląda tak:

#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); 
int otworzenie = 0;
#define kontaktron 8
int otwarcieP/F = 0; //narazie nie uzywana

void setup() {
  digitalWrite(kontaktron, OUTPUT);
  lcd.begin(16,2);

}

void loop() {
  if(digitalRead(kontaktron) == HIGH && otwarcieP/F == 0) {
    otworzenie = otworzenie + 1;
    otwarcieP/F = otwarcieP/F + 1;
  }else if(digitalRead(kontaktron) == LOW && otwarcieP/F == 1) {
    otwarcieP/F = otwarcieP/F - 1;                
  }
              
  
  lcd.setCursor(0, 0); 
  lcd.print ( otworzenie); 
  lcd.setCursor(0, 1); 
  lcd.print("razy.");
  delay(1000);
   
}

Wgrywamy i potencjometrem regulujemy kontrast.

Uwaga: Zamiast przycisku użyłem kontaktronu. Można też tak zrobić gdy się chcę mieć zliczanie otwarcia np. szafki, a nie naciśnięcia przycisku.

Autor: Szymon, klasa 3 SP, 2021 ( Utworzenie).

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

@Szymon456 warto w takiej sytuacji nazywać zmienne w taki sposób, aby ich nazwy sugerowały ich przeznaczenie. Tutaj, nazwa ta, może być w przyszłości myląca, bo adc najczęściej kojarzone jest z przetwornikiem analogowo-cyfrowym. Wiem, że to drobiazg i teraz o tym pamiętasz, ale przy większych programach, do których wraca się po dłuższej przerwie, takie nazwy zmiennych mogą być mylące 🙂

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

Dnia 26.10.2022 o 13:57, Szymon456 napisał:

Tak, zmontowałem taki układ i rzeczywiście działał

Na papierze 😉 w programie są tak oczywiste błędy że śmiem wątpić aby ten układ działał poprawnie. Już na początku coś co mi podpowiada że ten układ skończył tylko jako schemat:

digitalWrite(kontaktron, OUTPUT);

 

Link do komentarza
Share on other sites

1 godzinę temu, _LM_ napisał:
digitalWrite(kontaktron, OUTPUT)

Oczywiście  to jest pomieszanie z poplątaniem, ale kompiltor to łyknie, a program się wykona.

W Arduino OUTPUT jest zdefiniowane jako:

#define OUTPUT 0x1

a więc po podstawieniu mamy

digitalWrite(8, 1);         // więc całkiem poprawnie

Ponieważ po restarcie wszystkie piny są wejściami (a powyższa instrukcja tego nie zmienia, tylko pisze w próżnię), dlatego ciąg dalszy programu może i działa.

 

Link do komentarza
Share on other sites

7 minut temu, _LM_ napisał:

Wykonywać się będzie, ale czy i w jaki sposób AVR zareaguje na zwarcie wyjścia w stanie wysokim do masy? 

Przeczytaj jeszcze raz 😄 To nie jest pinMode() tylko digitalWrite()... trochę pokręcone, ale działa. To to samo co digitalWrite(<X>, HIGH);

Edytowano przez H1M4W4R1
Link do komentarza
Share on other sites

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

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.