Arduino Polska Forum

Pełna wersja: Wyswietlacz lcd, wejscia i wyjscia
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2 3
czy ktos wie gdzie znajde przykladowe szkice wykorzystujace wyswietlac lcd jako pokazujacy stay wyjscia i wejscia oraz sterowanie wyjsciami poprzez porty wejsciowe.
pozdrawiam
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.
(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.
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ę.
(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
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));
}
(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źć.
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
(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.
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'
Stron: 1 2 3