pawel1218 Grudzień 12, 2019 Udostępnij Grudzień 12, 2019 Witam dlaczego pin 5 naszego wyświetlacza (RW) podłączamy do masy? Skoro jest to wybór opcji zapis/odczyt? Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Grudzień 12, 2019 Udostępnij Grudzień 12, 2019 @pawel1218 ponieważ korzystamy z 4-bitowego trybu komunikacji bez odczytu flagi zajętości (to jest najpopularniejsza opcja) 🙂 Więcej na ten temat znajdziesz np. w dokumentacji sterownika HD44780. 1 Cytuj Link do komentarza Share on other sites More sharing options...
bakardi92 Grudzień 31, 2019 Udostępnij Grudzień 31, 2019 (edytowany) Zadanie 7.4 #include <LiquidCrystal.h> #define S1 6 #define S2 7 int czas=1; byte blokada=0; bool blokadabool=0; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); int foto=0; float napiecie=0; void setup(){ pinMode(S1,INPUT_PULLUP); pinMode(S2,INPUT_PULLUP); lcd.begin(16,2); lcd.setCursor(0,0); lcd.print("Stoper"); lcd.setCursor(0,1); lcd.print("S1 - START"); Serial.begin(9600); } void loop(){ if (digitalRead(S1)==LOW &&blokadabool==0){ blokada++; blokadabool=1; while (digitalRead(S1)==LOW){} } if (digitalRead(S2)==LOW){ blokada=3; } switch (blokada){ case 1: lcd.clear(); lcd.setCursor(0,0); lcd.print("Stoper wyzerowany"); lcd.print("wcisnij S1"); lcd.setCursor(0,1); czas=0; lcd.print(czas); delay(250); blokadabool=0; break; case 2: lcd.clear(); lcd.setCursor(0,0); lcd.print("Pomiar start"); lcd.setCursor(0,1); lcd.print(czas); czas++; delay(1000); break; case 3: lcd.clear(); lcd.setCursor(0,0); lcd.print("Pomiar stop"); lcd.setCursor(0,1); lcd.print(czas); delay(250); blokada=0; blokadabool=0; break; } } oraz link jak działa https://drive.google.com/file/d/18mGBxmrTXebu3yKe6bRSTS851vt-fS10/view?usp=sharing Jest to trochę ulepszona wersja gdyż S1 najpierw zeruje pomiar, drugie naciśnięcie S1 powoduja rozpoczęcie pomiaru. Teraz program nie reaguje więcej na naciskanie S1 i czeka aż S2 będzie naciśnięte. Po naciśnięciu S2 pomiar jest zatrzymywany i teraz dopiero naciskając S1 pomiar można wyzerować a ponowne nacisnięcie S1 rozpoczyna pomiar od nowa. @Treker Czy dałoby się jakoś usprawnić działąnie kodu aby był jak najbardziej optymalny? Czy taki zapis będzie wystarczająco lekki dla procesora? Pytam gdyż chcę się uczyć dobrych nawyków programowania w trakcie nauki i za bardzo nie wiem na co jeszcze mogę zwrócić uwagę aby się poprawić. ps. poradnik 1 klasa, moim zdaniem żadna z książek o arduino nie jest tak przyjazna użytkownikom którzy nigdy nie mieli wcześniej z tym styczności, jak właśnie ten kurs. Spokojnie mógłby on być płatny gdyż kontent jest na prawdę bardzo pomocny i konkretny, a do tego można rozmawiać z autorem kursu - dla mnie bomba. ps2 powiedz jak inaczej i lepiej byś zapisał warunek if który ma się wykonać tylko raz? czy taki zapis byłby odpowiedni czy masz na to lepszy sposób ? Wydaje mi się że mój jest trochę zawiły z tą blokadabool, ciekaw jestem jak ty rozwiązujesz ten problem. Blokada while jest tylko po to aby jak trzymam przycisk S1 żeby zablokować program tak aby nie dodawał zmiennej blokada++ bo jak wiemy w ciągu sekundy dodał by ją jakieś 16 milionów razy a ja chcę żeby blokada++ była dodana tylko po jednym fizycznym wciśnięciu. Edytowano Grudzień 31, 2019 przez bakardi92 1 Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Grudzień 31, 2019 Udostępnij Grudzień 31, 2019 2 godziny temu, bakardi92 napisał: ps. poradnik 1 klasa, moim zdaniem żadna z książek o arduino nie jest tak przyjazna użytkownikom którzy nigdy nie mieli wcześniej z tym styczności, jak właśnie ten kurs. Spokojnie mógłby on być płatny gdyż kontent jest na prawdę bardzo pomocny i konkretny, a do tego można rozmawiać z autorem kursu - dla mnie bomba. Dziękuję za miłe słowa, cieszę się, że kurs jest pomocny! Na ten moment wszystkie nasze materiały pozostają darmowe, jeśli kursy są ciekawe to warto po prostu zamawiać nasze zestawy, bo dzięki temu mogą powstawać kolejne materiały 😉 2 godziny temu, bakardi92 napisał: @Treker Czy dałoby się jakoś usprawnić działąnie kodu aby był jak najbardziej optymalny? Czy taki zapis będzie wystarczająco lekki dla procesora? Pytam gdyż chcę się uczyć dobrych nawyków programowania w trakcie nauki i za bardzo nie wiem na co jeszcze mogę zwrócić uwagę aby się poprawić. Program wygląda dobrze, na pewno coś tam da się zmienić, ale nie będą to zmiany zauważalne pod względem wydajności 🙂 2 godziny temu, bakardi92 napisał: ps2 powiedz jak inaczej i lepiej byś zapisał warunek if który ma się wykonać tylko raz? czy taki zapis byłby odpowiedni czy masz na to lepszy sposób ? Wydaje mi się że mój jest trochę zawiły z tą blokadabool, ciekaw jestem jak ty rozwiązujesz ten problem. Taka metoda jest dość popularna - zmienna pomocnicza w takich sytuacjach zawsze się przydaje 🙂 2 godziny temu, bakardi92 napisał: Blokada while jest tylko po to aby jak trzymam przycisk S1 żeby zablokować program tak aby nie dodawał zmiennej blokada++ bo jak wiemy w ciągu sekundy dodał by ją jakieś 16 milionów razy a ja chcę żeby blokada++ była dodana tylko po jednym fizycznym wciśnięciu. Pamiętaj tylko, że istnieją drgania styków. Program zadziała w symulatorze, ale w praktyce mogą już być problemy - wróć do tego przykładu jak będziesz miał sprzęt i wtedy sprawdź jak to zadziała. W między czasie polecam lekturę tego artykułu: Kurs elektroniki II – #3 – przyciski, diody RGB, kontaktron 😉 Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
BHBmacieg Luty 1, 2020 Udostępnij Luty 1, 2020 Kolejna część kursu za mną. Super dawka wiedzy. Prace domowe: 7.1: Tutaj raczej nic innowacyjnego 🙂 7.2. Przy całkowitym usunięciu opóźnienia widać jakby wyświetlane wyniki "falowały" rysując się z góry na dół. 7.3. U mnie nie dało to w zasadzie żadnych zmian, tekst w pierwszej linijce był cały czas na swoim miejscu, a w drugiej zmieniał się normalnie. Chyba, że mówimy tu o bardzo niskim czasie odświeżania. 7.4. to trochę pokombinowałem. Zrezygnowałem ze stopera. Postanowiłem wykorzystać pomiar napięcia na fotorezystorze. Dołożyłem opcje regulacji jasności wyświetlacza przy pomocy potencjometru, do tego dołożyłem analogowy wskaźnik jasności podświetlenia oraz dwa przyciski. Jeden do zatrzymania pomiaru i drugi do ponownego wystartowania. Jedyna wada to taka, że w momencie zatrzymania pomiaru nie działa regulacja podświetlenia. Musiałbym po prostu zdefiniować odpowiednią funkcję na zmianę podświetlenia i wrzucić ją w pętle while w momencie zatrzymania. Jednak tworzenie funkcji to coś co muszę sobie przypomnieć, a dziś już niestety zabrakło czasu. Mógłbym oczywiście w pętle while wrzucić cały kod odpowiedzialny za zmianę podświetlenia, ale czy jest sens tak sztucznie wydłużać kod? Jeśli udoskonalę kod i regulacja podświetlenia będzie również działać po zatrzymaniu pomiaru to oczywiście się nim podzielę 😉 . #include <LiquidCrystal.h> //dołączenie biblioteki ekranu #include <Servo.h> //implementacja serva #define fotorezystor A5 #define wyswietlacz 11 #define potencjometr A4 #define przyciskStart 8 #define przyciskStop 9 Servo serwomechanizm; //utworzenie obiektu serwo LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //informacja o podłączeniu nowego wyświetlacza double odczyt = 0; //deklaracja zmiennej dla odczytu byte jasnosc = 0; //deklaracja zmiennej do sterowania jasnoscia wyswietlacza int wartoscPotencjometr = 0; //zmienna do odczytu wartosci z potencjometru byte pozycja = 0; //zmienna odpowiedzialna za pozycje serwa byte poprzedniaPozycja = 40; //zmienna potrzebna do likwidacji zbyt małych zmian pozycji serva void setup() { serwomechanizm.attach(10); //serwinecgabuzn na pinie 10 lcd.begin(16, 2); //Deklaracja typu lcd.setCursor(0, 0); //ustawienie kursora lcd.print("Nap. odczytane:"); //wyswietlenie tekstu pinMode(przyciskStart, INPUT_PULLUP); //zdefiniowanie pinow dla przyciskow pinMode(przyciskStop, INPUT_PULLUP); } void loop() { odczyt = analogRead(A5) * 5.0 / 1024.0; // odczytanie wartosci napiecia lcd.setCursor(0, 1); //ustawienie kursosa lcd.print(String(odczyt) + "V"); wartoscPotencjometr = analogRead(potencjometr); //odczytanie wartosci z potencjometru pozycja = map(wartoscPotencjometr, 0, 1024, 180, 40); //wykorzystanie odczytu z potencjometru do sterowania serverm jasnosc = map(wartoscPotencjometr, 0, 1024, 0, 255); //wykorzystanie odczytu z potencjometru do sterowanie jasnoscia LCD analogWrite(11, jasnosc); //generuje sygnal PWM dla podswietlenia if (abs(poprzedniaPozycja - pozycja) > 5) {//usunięcie zbyt małych zmian położenia ramienia serva serwomechanizm.write(pozycja); //zmiana pozycji ramienia poprzedniaPozycja = pozycja; //zapamiętanie nowej poprzedniej pozycji } while (digitalRead(przyciskStop) == LOW) { //wcisniecie przycisku stop delay(50); while (digitalRead(przyciskStart) == HIGH) { //oczekiwanie na wcisniecie przycisku start delay(50); } } delay(100); } 1 Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Luty 3, 2020 Udostępnij Luty 3, 2020 @BHBmacieg miło obserwować Twoje postępy! Gratuluję ładnie sformatowanego i skomentowanego programu 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
ceiem Marzec 15, 2020 Udostępnij Marzec 15, 2020 (edytowany) Coś się udało zrobić 🙂 #include <LiquidCrystal.h> //Dołączenie bilbioteki LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Informacja o podłączeniu nowego wyświetlacza String linia1="Dbaj o innych"; int n1=linia1.length(); String linia2="#zostanwdomu"; int n2=linia2.length(); void setup() { lcd.begin(16, 2); //Deklaracja typu } void loop() { lcd.setCursor(0, 0); //Ustawienie kursora for(int i=0; i<n1; i++) { lcd.print(linia1[i]); delay(500); } lcd.setCursor(0, 1); //Ustawienie kursora for(int i=0; i<n2; i++) { lcd.print(linia2[i]); delay(500); } delay(1000); for(int i=0; i<5; i++) { lcd.noDisplay(); delay(500); lcd.display(); delay(500); } lcd.clear(); } Edytowano Marzec 15, 2020 przez ceiem 2 Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Marzec 15, 2020 Udostępnij Marzec 15, 2020 @ceiem witam na forum! Super, że działa - akurat na czasie 😉 Zaraz udostępnię na naszym Facebooku! 1 Cytuj Link do komentarza Share on other sites More sharing options...
ceiem Marzec 16, 2020 Udostępnij Marzec 16, 2020 Dziękuję 🙂 Przeskoczyłam 4 lekcje, by zrobić coś z wyświetlaczem 🙂 Pytanie jednak brzmi jak zapamiętać ten system połączeń...? Samo programowanie jest bardzo łatwe, ale ten system podłączeń, połączeń... Mimo iż zrobiłam Wasz kurs elektroniki poziom 1, to nadal jest to dla mnie trudne do ogarnięcia. Cytuj Link do komentarza Share on other sites More sharing options...
Gieneq Marzec 17, 2020 Udostępnij Marzec 17, 2020 @ceiem są wyświetlacze w których większość połączeń komunikacji równoległej zastąpiono szeregowym ekspanderem I2C - sytuacja jest tam nieco prostsza ale jak kto woli 🙂 W tym przypadku nie obędzie się raczej bez tabelki oznaczeń wyprowadzeń wyświetlacza (bo któż to spamięta). Jeżeli chodzi o to jak to później podłączyć, to sytuacja jest raczej prosta, tylko później musisz konsekwentnie wprowadzić zmiany w programie 🙂 1 Cytuj Link do komentarza Share on other sites More sharing options...
ciesla1220 Marzec 23, 2020 Udostępnij Marzec 23, 2020 (edytowany) Witam, tutaj moje zadanie domowe 😄 Edytowano Marzec 24, 2020 przez Gieneq Cytuj Link do komentarza Share on other sites More sharing options...
Gieneq Marzec 24, 2020 Udostępnij Marzec 24, 2020 @ciesla1220 fajnie że wszystko działa, powodzenia w kolejnych projektach! 🙂 1 Cytuj Link do komentarza Share on other sites More sharing options...
Rsx_Wroclaw Marzec 29, 2020 Udostępnij Marzec 29, 2020 (edytowany) Hi, Postępowałem zgodnie z instrukcją. LCD zadziałał, potencjometr działa, Nie można sterować LCD tzn nie reaguje na kod programu. Nie pojawia się kursor ani tekst Czy można w jakiś sposób przetestować LCD czy nie jest uszkodzony? Rsx Edytowano Marzec 29, 2020 przez Rsx_Wroclaw Cytuj Link do komentarza Share on other sites More sharing options...
Gieneq Marzec 30, 2020 Udostępnij Marzec 30, 2020 @Rsx_Wroclaw witam na forum 🙂 mógłbyś wrzucić zdjęcie układu? Może gdzieś jakiś kabelek nie styka? Cytuj Link do komentarza Share on other sites More sharing options...
Lorenzini Kwiecień 3, 2020 Udostępnij Kwiecień 3, 2020 Witam! Zrobiłem zadania z kursu Arduino na temat wyświetlaczy LCD. Tworzenie tego układu sprawiło mi wiele frajdy, bo musiałem powtarzać łaczenie chyba z 5 razy ponieważ zawsze kabelka brakowało. Przysyłam zdjęcie mojego układu 🙂 2 Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!