Skocz do zawartości

Pomocna odpowiedź

Napisano (edytowany)

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

@Szymon456 cześć Szymon, witam na forum 🙂

Dobry projekt na początek. Czy udało Ci się zbudować faktycznie taki układ, czy to tylko wirtualne testy? Czym w Twoim programie jest zmienna adc?

Tak, zmontowałem taki układ i rzeczywiście działał. Zmienna adc sprawdza czy przycisk (lub kontaktron) są otwarte. Na wyświetlaczu jeszcze tego nie ma ale może kiedyś dorobię. Teraz to służyło do testów.

 

  • Lubię! 1

@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 🙂

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

 

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.

 

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

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