• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Wyswietlacz lcd, wejscia i wyjscia
#1
czy ktos wie gdzie znajde przykladowe szkice wykorzystujace wyswietlac lcd jako pokazujacy stay wyjscia i wejscia oraz sterowanie wyjsciami poprzez porty wejsciowe.
pozdrawiam
 
Odpowiedź
#2
A nie chcesz sam napisać takiego programu?
Polecenie zwracające stan danego pinu to digitalRead(nrPinu), wyświetlenie go na lcd to lcd.print("Twoj tekst"), natomiast sterowanie wyjściami przez wejścia - to już zależy od tego, co chcesz zrobić, ale generalnie robi się to za pomocą if.
 
Odpowiedź
#3
(21-04-2017, 12:09)krn78 napisał(a): A nie chcesz sam napisać takiego programu?
Polecenie zwracające stan danego pinu to digitalRead(nrPinu), wyświetlenie go na lcd to lcd.print("Twoj tekst"), natomiast sterowanie wyjściami przez wejścia - to już zależy od tego, co chcesz zrobić, ale generalnie robi się to za pomocą if.

tak chętnie bym napisał coś co mi będzie wykonywało te czynności, ale uczę się i podpatruje inne różne programy. Kilka programów które napisałem okazało się że zapętlają się i nie wykonywały tych czynności jakie bym chciał.

Głównie miałem zawsze problem z właśnie z pętlą if.
 
Odpowiedź
#4
If wykonuje się raz, pod warunkiem spełnienia warunku. Warunek musi być skonstruowany tak, żeby był albo prawdziwy, albo fałszywy, dla przykładu:
Niech to będzie włączenie diody (na pinie 13) pod wpływem przycisku (na pinie 12).
Kod:
if(digitalRead(12)==LOW) {
digitalWrite(13, HIGH);
}
else
{digitalWrite(13, LOW);
}
Jak widać, odczytanie stanu przycisku (digitalRead(12)==LOW) to sprawdzenie, czy przycisk zwiera się do masy, czy też nie. Jeśli tak, to pin 13 zyskuje stan wysoki, jeśli nie - niski.

Programy zapętlają się, jak sądzę dlatego, że są umieszczone w funkcji loop(), która jest naturalną pętlą. Jeśli umieścisz cały kod w funkcji setup(), wykona się tylko raz, chyba że umieścisz w środku nie kończącą się pętlę.
 
Odpowiedź
#5
(24-04-2017, 13:06)bond napisał(a):
(21-04-2017, 12:09)krn78 napisał(a): A nie chcesz sam napisać takiego programu?
Polecenie zwracające stan danego pinu to digitalRead(nrPinu), wyświetlenie go na lcd to lcd.print("Twoj tekst"), natomiast sterowanie wyjściami przez wejścia - to już zależy od tego, co chcesz zrobić, ale generalnie robi się to za pomocą if.

tak chętnie bym napisał coś co mi będzie wykonywało te czynności, ale uczę się i podpatruje inne różne programy. Kilka programów które napisałem okazało się że zapętlają się i nie wykonywały tych czynności jakie bym chciał.

Głównie miałem zawsze problem z właśnie z pętlą if.
Nie udało mi się zająć tym tematem wcześniej, ale wracam teraz chcąc realizować swoją przygodę z Arduino.
Jak już opisywałem wcześniej mam wielki problem bo nie mogę osiągnąć zamierzonego efektu z pętlą if.
Mam 4 wejścia NO, po zamknięciu styku ma sygnalizację zaświecenie LED o stania otwarcia. W przypadku pojedynczych informacji nie mam problemu, ale gdy otwieram kilka w różnych konfiguracjach to zaczyna mi się zapętlać i po rozłączeniu zdarza się że któreś z LED dalej świecą.
Dodatkowo chcę wyświetlać te stany na wyświetlaczu LCD 16x2 (np. styk nr 1 otwarty i tak dla każdego.
Proszę o informacje jak mogę ten problem rozwiązać
Pozdrawiam
 
Odpowiedź
#6
Cytat:W przypadku pojedynczych informacji nie mam problemu, ale gdy otwieram kilka w różnych konfiguracjach to zaczyna mi się zapętlać i po rozłączeniu zdarza się że któreś z LED dalej świecą.

Może spróbuj skonstruować swój program wykorzystując bibliotekę Timers.h.

Kod przykładowego programu poniżej.
Może to rozwiąże Twój problem.

Kod:
//Timers LED

//Załadowanie bibliotek.
#include <Timers.h>
Timers <2> Akcja;

//Zdefiniowanie zmennych.
int led = 13;

//Ustawienia programu.
void setup()
{              
 pinMode(led, OUTPUT);      
 Akcja.attach (0, 500, Dioda1);
 Akcja.attach (1, 770, Dioda1);
}

//Pętla główna programu.
void loop()
{
 Akcja.process();
}

//Podprogram 1.
void Dioda1()
{
 digitalWrite (led, !digitalRead (led));
}

//Podprogram 2.
void Dioda2()
{
 digitalWrite (led, !digitalRead (led));
}
Jeżeli pomogłem, to poproszę o punkt reputacji Big Grin
 
Odpowiedź
#7
(10-10-2017, 17:39)ANT napisał(a):
Cytat:W przypadku pojedynczych informacji nie mam problemu, ale gdy otwieram kilka w różnych konfiguracjach to zaczyna mi się zapętlać i po rozłączeniu zdarza się że któreś z LED dalej świecą.

Może spróbuj skonstruować swój program wykorzystując bibliotekę Timers.h.

Kod przykładowego programu poniżej.
Może to rozwiąże Twój problem.

Kod:
//Timers LED

//Załadowanie bibliotek.
#include <Timers.h>
Timers <2> Akcja;

//Zdefiniowanie zmennych.
int led = 13;

//Ustawienia programu.
void setup()
{              
 pinMode(led, OUTPUT);      
 Akcja.attach (0, 500, Dioda1);
 Akcja.attach (1, 770, Dioda1);
}

//Pętla główna programu.
void loop()
{
 Akcja.process();
}

//Podprogram 1.
void Dioda1()
{
 digitalWrite (led, !digitalRead (led));
}

//Podprogram 2.
void Dioda2()
{
 digitalWrite (led, !digitalRead (led));
}

Mam problem z biblioteką 'timers.h' nie mogę jej znaleźć.
 
Odpowiedź
#8
Cytat:Mam problem z biblioteką 'timers.h' nie mogę jej znaleźć.

Bardzo proszę - tylko kilka kliknięć u Wujka Google Smile

https://github.com/nettigo/Timers
Jeżeli pomogłem, to poproszę o punkt reputacji Big Grin
 
Odpowiedź
#9
(10-10-2017, 17:39)ANT napisał(a):
Cytat:W przypadku pojedynczych informacji nie mam problemu, ale gdy otwieram kilka w różnych konfiguracjach to zaczyna mi się zapętlać i po rozłączeniu zdarza się że któreś z LED dalej świecą.

Może spróbuj skonstruować swój program wykorzystując bibliotekę Timers.h.

Kod przykładowego programu poniżej.
Może to rozwiąże Twój problem.

Kod:
//Timers LED

//Załadowanie bibliotek.
#include <Timers.h>
Timers <2> Akcja;

//Zdefiniowanie zmennych.
int led = 13;

//Ustawienia programu.
void setup()
{              
 pinMode(led, OUTPUT);      
 Akcja.attach (0, 500, Dioda1);
 Akcja.attach (1, 770, Dioda1);
}

//Pętla główna programu.
void loop()
{
 Akcja.process();
}

//Podprogram 1.
void Dioda1()
{
 digitalWrite (led, !digitalRead (led));
}

//Podprogram 2.
void Dioda2()
{
 digitalWrite (led, !digitalRead (led));
}
Zainstalowałem bibliotekę 'Timers.h' i przegrałem zamieszczony kody, ale wyskakuje mi jakiś błąd, więc nie udało mi się przeanalizować mojego problemu.
 
Odpowiedź
#10
Dla lepszego zobrazowania zamieszczę rysunek i jeszcze raz opiszę przykład.
Mam trzy zbiorniki, w każdym jest woda. W przypadku braku wody w danym zbiorniku ma zasygnalizować zaświeceniem czerwoną LED. Może się zdarzyć, iż wody nie będzie w dwóch lub trzech zbiornikach i wtedy ma wskazać w których niema wody. Ponadto mam dwa włączniki ciśnienia na sieci wskazuje spadek ciśnienia lub wzrost w przypadku małej lub za dużej ilości wody. Ponadto chciał bym aby były te komunikaty wyświetlane na LCD 16x2 lub innym.
Proszę o pomoc. Abym mógł zrozumieć działanie poszczególnych instrukcji. Jak już opisywałem poprzednio to mój program się zapętla przy poleceniu pętli 'if'


Załączone pliki Miniatury
   
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości