Skocz do zawartości

Wyświetlanie informacji na ekranie z przełącznika


d3zet

Pomocna odpowiedź

Na wstępnie chciałbym się przywitać, tak więc WITAM! 🙂

Od niedawna stałem się posiadaczem płytki Arduino Uno. Wpadłem na pewien projekt który sobie powoli realizuje. Natykam jednak na mały problem.

Powiedzmy, że mam diodę LED, do niej jest podpięty zwykły przełącznik dźwigniowy.

Do Arduino jest podpięty wyświetlacz LED 16x2.

Chciałbym, aby po uruchomieniu diody LED przełącznikiem, na ekranie pojawiała się informacja: DIODA LED NR 1 URUCHOMIONA.

W jaki sposób ugryźć to pod względem sprzętowym oraz programowym?

Jeżeli wyświetlacz jest podpięty do wyjść PWM od 5 do 2, mogę powiedzmy zrobić aby dioda miała wyjście na pinie 13, do GND, a w między czasie podpiąć a przy "ujściu doczepić" przewód który pójdzie powiedzmy do pinu 6, a następnie programowo dać "jeżeli pin 6 stan wysoki wtedy operacja na wyświetlaczu taka i tak"?

Co jeżeli chciałbym podłączyć do UNO 4 takich przełączników oraz dodatkowo 4 serwomechanizmy? Jest to niemożliwe do wykonania na tej płytce?

(Czy jednak serwo podepnę pod wolne piny PWM czyli 11, 10, 9, 6, a diody na pozostałe 13, 12, 8, 7?) Wtedy rozumiem, że płytka jakby będzie miała wykorzystane praktycznie wszystkie piny?

Nie jestem dokładnie pewny czy dobrze to napisałem, w razie czego prosiłbym o poprawienie. 🙂

Link do komentarza
Share on other sites

Nie rozumiem czemu chcesz podpinać diodę do dwóch pinów?

Biblioteka Servo w arduino działa na dowolnej nóżce, nie musi mieć ona PWM. Dodatkowo, możesz używać większości nóżek analogowych także jako cyfrowe (poza A6 i A7, jeśli nawet masz je wyprowadzone).

Może narysuj schemat?

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

Może postaram się to na kodzie pokazać, takim prowizorycznym.

Jeżeli do pinu 9 dojdzie sygnał (wytwarzany z pinu 10) wtedy dioda mruga co sekundę.

Jeżeli tego połączenie nie ma, wtedy miga szybko.

Program działa, ale nie tak jak powinien. Mianowicie, jeżeli go odpalę wtedy mruga szybko. Jeżeli połączę ze sobą piny 10 oraz 9 wtedy mruga co sekundę. Natomiast jeżeli odłączę ponownie piny, wtedy chwilę pomruga co sekundę po czym zaś szybko. Dlatego nie ma natychmiastowej reakcji?

void setup() {
 pinMode(13, OUTPUT);
 pinMode(10, OUTPUT);
 pinMode(9, INPUT);
 digitalWrite(10, HIGH);
}

void loop() { 

 if ( digitalRead(9) == HIGH ) {
 digitalWrite(13, HIGH); 
 delay(1000);
 digitalWrite(13, LOW);
 delay(1000);
 } else  { 
 digitalWrite(13, HIGH);
 delay(50);
 digitalWrite(13, LOW);
 delay(50);

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

Byłoby zrozumiałe, że procek zajmuje się delay(1000) gdyby nie fakt, że on jeszcze mrugnie tak z 5 razy w odstępach 1 sekundy. To nie jest tak, że po odłączeniu on robi sekundę i leci dalej, tylko to trwa "parę mignięć".

Jutro zainteresuje się tematem co podesłałeś i zobaczymy co z tego będzie.

Link do komentarza
Share on other sites

Dokładnie o to chodziło. 🙂 Teraz chciałbym żeby informacja o połączeniu lub nie była dawana na wyświetlacz LCD.

Zmajstrowałem coś takiego:

#include <LiquidCrystal.h> 
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() { 
 pinMode(13, OUTPUT); 
 pinMode(10, INPUT_PULLUP); 

 if ( digitalRead(10) == HIGH ) { 
 lcd.begin(16, 2); 
 lcd.setCursor(0, 0); 
 lcd.print("Odłączono.");
 } else  { 
 lcd.begin(16, 2); 
 lcd.setCursor(0, 0); 
 lcd.print("Załączono.");

 } 
} 

void loop() { 


}

Niby spoko, lecz ekran wyświetla tylko stan po podłączeniu układu. Nie działa w czasie "rzeczywistym".

Wiem, musiałbym to dać do loop() lecz wtedy ekran migocze przez co odczytanie informacji jest ciężkie. Wiem, że on ciągle robi tą pętle, stąd migotanie, lecz nie wiem jak się go pozbyć.

Link do komentarza
Share on other sites

Dwie najprostsze opcje:

1. Dodać opóźnienie (np. 100ms) pomiędzy kolejnymi sprawdzeniami stanu i uaktualnieniem LCD

2. Porównywanie stanu przełącznika ze stanem poprzednim i uaktualnianie informacji na LCD tylko wtedy gdy nastąpi zmiana stanu.

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

Chcesz po naciśnięciu włączyć diodę i wyświetlić na LCD informację "załączono", a po ponownym naciśnięciu wyłączyć diodę i wyświetlić odłączono?

Dokładnie tak. Przy przełączeniu przycisku dźwigniowego na pozycję zwarcia napis "ZAŁĄCZONO", po rozwarciu "ODŁĄCZONO". Nie mam pomysłu jak to wykonać na ifach, czy w ogóle się da. Jeżeli nie to jak to inaczej "ugryźć"? Nawet bez tego "odłączono" by się obeszło, lecz im więcej tym lepiej... wiedzy nigdy za mało. 😉

Link do komentarza
Share on other sites

Program aktualizujący LCD tylko przy zmianach stanu będzie mniej więcej taki (szkic):

currentSwitchState = digitalRead(x);
if(currentSwitchState != previousSwitchState) {
 // aktualizacja LCD w zależności od stanu
 previousSwitchState = currentSwitchState ;
}
// tutaj możesz jeszcze robić inne rzeczy, pętla nie jest blokowana

Program nie bierze pod uwagę drgań styków, ale jak uda Ci się uruchomić podstawowy program to z modyfikacją uwzględniającą drgania styków chyba nie będziesz miał problemów 🙂

  • Pomogłeś! 1
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.