Skocz do zawartości

Dwa przyciski i 14 diod led i wyświetlacz


xirtt

Pomocna odpowiedź

(edytowany)

Masz Przyjacielu całkowicie racje.

Odpowiadam na pierwsze Twoje zdanie...

dokładnie tak jest , tylko  dlaczego tak jest? 

 

Masz całkowicie racje.

Odpowiadam na drugi wpis.... 

 Szczepionkę na wściekliznę wymyślono , przez przypadek, a pomogła w tym sprzątaczka Mari........

Dla tego,  czytam próbuje zrozumieć i kombinuje. Jeśli chodzi o wędkarstwo, powiem Ci Przyjacielu jest to też , potężna wiedza . Kiedyś byłem nad Soliną , i tam  poznałem wędkarza Daniela. Pierwszy raz wżyciu zobaczyłem prawdziwe wędkarstwo, żeby łowić ryby też trzeba mieć potężną wiedzę . Nie jestem wędkarzem.

Pozdrawiam Cię serdecznie

Edytowano przez xirtt
Link do komentarza
Share on other sites

Witam wszystkich serdecznie , i życzę Miłego Dnia.😀

Witam Cię BELFEREK, patrzyłem te funkcje o których pisałeś , czyli millis() i micros(). Napisałeś żebym te funkcje używał zamiast delay().

W moim programie , który staram się go napisać,  tak prościutko jak się da, te funkcje za bardzo go komplikują , zostaje przy delay(), ta funkcja działa bez zarzutu i jest prościutka. Tamte przydadzą się przy bardziej skomplikowanych programach.

Dopisałem do swojego programu drugi przycisk, ale z ciekawą funkcją, można ją nazwać- OK-, czyli zatwierdzam. Teraz mam tak , pierwszym przyciskiem wybieram- MENU-, kiedy chce wybrać konkretne meni zatrzymuje się na nim i drugim przyciskiem -OK-, zatwierdzam wybrany program, dopiero w tedy świecą mi diody ( w twoim programie one świecą od razu, ale na pewno można to jakoś zmienić). Mam teraz dwie wersje swojego programu , z jednym przyciskiem-MENU/OK-, i z dwoma przyciskami -MENU- i -OK-.  Dalej myślę o drugim przycisku , aby miał też miał funkcje -MENU/OK-. Ważne, że drugi przycisk ożył i  jest przydatny w moim programie.

Pisałem wcześnie , o pilocie IR do mojego programu i dla tego.......

Mam do ciebie pytanie , jak można dopisać do -   while (digitalRead(A0) == LOW)   - jest to przycisk , przycisk z pilota IR , żeby tak samo działał jak zwykły przycisk?.👨‍🔧 Początek wygląda tak........

#include <IRremote.h>
#define irPin A2
IRrecv irrecv(irPin);
decode_results results;

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);

void setup() 
{    
  lcd.init();              
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("      WITA         ");
  lcd.setCursor(0,1);
  lcd.print("    Sterownik      ");
  lcd.setCursor(0,2);
  lcd.print("      diod         ");
  lcd.setCursor(0,3);
  lcd.print("      led          ");
  delay(25);

  pinMode(0,  OUTPUT);
  pinMode(1,  OUTPUT);
  pinMode(2,  OUTPUT);
  pinMode(3,  OUTPUT);
  pinMode(4,  OUTPUT);
  pinMode(5,  OUTPUT);
  pinMode(6,  OUTPUT);
  pinMode(7,  OUTPUT);
  pinMode(8,  OUTPUT);
  pinMode(9,  OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  
  pinMode(A0, INPUT_PULLUP);
  pinMode(A1, INPUT_PULLUP);
  
  pinMode(A3, OUTPUT);
  digitalWrite(A3, HIGH);
  
  digitalWrite(0,  LOW);
  digitalWrite(1,  LOW);
  digitalWrite(2,  LOW);
  digitalWrite(3,  LOW);
  digitalWrite(4,  LOW);
  digitalWrite(5,  LOW);
  digitalWrite(6,  LOW);
  digitalWrite(7,  LOW);
  digitalWrite(8,  LOW);
  digitalWrite(9,  LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);
}
 

Oczywiście jak zawsze, proszę wszystkich o pomoc.😀

 

Link do komentarza
Share on other sites

Gość es2
1 godzinę temu, xirtt napisał:

millis() i micros(). Napisałeś żebym te funkcje używał zamiast delay().

W moim programie , który staram się go napisać,  tak prościutko jak się da, te funkcje za bardzo go komplikują

Nieznacznie a dają ogromne możliwości. Musisz zmienić punkt widzenia i pisanie programu wielowątkowego nie będzie problemem. Zgodzę się, że zmodyfikowanie dużego programu napisanego źle, z delay na program wielowątkowy może być trudne, czasem prościej całość napisać od nowa ale jeśli od początku pisze się poprawnie, bez delay, problemu nie ma.

1 godzinę temu, xirtt napisał:

jak można dopisać do -   while (digitalRead(A0) == LOW)   - jest to przycisk , przycisk z pilota IR

Jeśli używasz funkcji blokującej, to w w "while" musisz dodać obsługę przycisku pilota. Jeśli takich funkcji masz kilkanaście, musisz to zrobić wszędzie. Jeśli gdzieś dodasz kolejna blokująca funkcje musisz dodać obsługę pilota. A co gdy dasz delay(10000)? Przez 10 sekund urządzenie nie będzie reagować na pilota. Można oczywiście zrobić pętlę

	for(int x=0; x<10000; x++){
	  delay(1);
	  //kod obsługi pilota IR
	}
	

ale nie tedy droga. Trzeba zrobić program wielowątkowy, więc ponownie do lektury millis().

 

Edytowano przez es2
Link do komentarza
Share on other sites

Witam Cię Przyjacielu "es2" serdecznie, ciesze się że napisałeś.😀

Dziękuje za podpowiedź. Czytam sobie różne rzeczy na temat pętli , ale robię to powoli i  nie spieszy mi się , czas w tym temacie niema dla mnie żadnego znaczenie. Powolutku do przodu.  Lubię uczyć się przez praktyczną ZABAWĘ. Temat programowania jest dla mnie MEGA , MEGA SUPER !. Tylko powolutku , przez zabawę.😀☃️🎄😀

Przyjacielu mam pytania .👨‍🔧

-  ta wartość 10000, do czego przyda się w moim programie?👨‍🔧

- gdzie konkretnie mogę wpisać kod przycisku z pilota (0xFFC03F), żeby mógł reagować tak samo jak pierwszy przycisk , czyli MENU?( Chodzi o tą pętle for)👨‍🔧

-ostatnie pytanie, Jeżeli zastosuję tą pętle for , to muszę chyba zmienić cały mój program?👨‍🔧

Proszę Cię Przyjacielu o odpowiedź. Nie spieszy się.

Pozdrawiam Cię serdeczni.😀

 

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

Gość es2
9 minut temu, xirtt napisał:

gdzie konkretnie mogę wpisać kod przycisku z pilota (0xFFC03F),

Jak juz napiszesz program bez delay i "while" zamienią się na "if", to bardzo prosto

if ( key==KEY_MENU || kod_ir==0xFFC03F ){
  
}

 

Link do komentarza
Share on other sites

Dziękuje Przyjacielu za odpowiedź.😀

- mam pytanie, czy jest jakiś sposób by do mojego programu dopisać pilota , czy jest to nie możliwe?( oczywiście najprościej jak się da)👨‍🔧

 Podoba mi się ta zabawa z moi programem, bawmy się , odkryjmy w sobie dziecko.🚕😀

Pozdrawiam Cię serdecznie.

Link do komentarza
Share on other sites

Witam wszystkich serdecznie i życzę miłego dnia.😀

Przez zabawę , nauka.

Widzę następne słabe punkty ARDUINO UNO.👨‍🔧

-pierwszy- opisałem wcześniej.

-drugi- w chwili włączenia zasilania zawsze na wyjściach  0 i 1 na chwile  pojawiają się napięcia , mimo że zaprogramowane są na stan niski , zakłóca to prace.🤔

-trzeci- tak samo się dzieje na wyjściu 13. ( myślę że konstruktor powinien to poprawić)🤔

Jeżeli nie korzystam z tych wyjść/wejść , to OK niech tak będzie , ale kiedy używam je w programie powinny mnie "słuchać".👨‍🔧

 Zamówiłem sobie inny wyświetlacz, właśnie go odebrałem . Wyświetlacz LCD 12864 128x64 NIEBIESKI 5V ST7920.

Mam pytanie. On posiada taki złącze- GND,VCC,V0,RS,R/W,E,DB0,DB1,DB2,DB3,DB4,DB5,DB6,DB7PSB,NC,RST,VOUT,BLA i BLK.

Mam przejściówkę na I2C złącze-GND,VCC,V0,RS,R/W,E,DB0,DB1,DB2,DB3,DB4,DB5,DB6,DB7,A,K . Do pozycji od GND do DB7 wszystko się zgadza, na tej przejściówce na końcu są wyjścia A i K, czy A = BLA i czy K = BLK?.👨‍🔧

Co z wejściami PSB,NC wiadomo nie ważne,RST i VOUT ?👨‍🔧

Pozdrawiam serdecznie wszystkich i proszę o pomoc.😀

 

 

 

Link do komentarza
Share on other sites

Gość es2
9 minut temu, xirtt napisał:

-drugi- w chwili włączenia zasilania zawsze na wyjściach  0 i 1 na chwile  pojawiają się napięcia , mimo że zaprogramowane są na stan niski , zakłóca to prace.

Zapoznaj się z budową UNO i innych płytek a dowiesz się dlaczego tak się dzieje i co zrobić aby tego problemu nie było.

Fanem Arduino to ja nie jestem , wręcz przeciwnie, ale nie można o czymś mówić, co wynika z zasady działania, że to wada. To tak jakby wadą Ferrari było to, że nie może przewozić 10 ton cementu.

9 minut temu, xirtt napisał:

Zamówiłem sobie inny wyświetlacz, właśnie go odebrałem . Wyświetlacz LCD 12864 128x64 NIEBIESKI 5V ST7920.

To źle zamówiłeś. Za chwile napiszesz, że UNO ma mało wyprowadzeń.Dlaczego nie wybrałeś wyświetlacza z I2C? ST7920 ma tylko tryb równoległy (przynajmniej tyle z chińskiej dokumentacji wyczytałem). Przy małych rozdzielczościach najlepiej wybierać I2C, przy większych SPI, dopiero przy dużych (480x320) interfejs równoległy. Wyjątek stanowią akceleratory graficzne, gdzie przy 800x600 i więcej używa się SPI.

Edytowano przez es2
Link do komentarza
Share on other sites

Witam wszystkich i Ciebie Przyjacielu es2 serdecznie.😀

Obojętnie co się robi to te wyjścia tak działają i tyle. Jednak powinny działać tak jak program chce, myślę że to kiedyś poprawią. 👨‍🔧

Zasadę działania zawsze można zmienić ,  w swoim programie zasad działania pojawiło się kilka. Dla konstruktora ARDUINO jest to pestka , żeby to poprawić.👨‍🔧

Nie chodzi oto , żeby Ferrari przewoziło cement, tylko oto , aby w momencie  przekręcenia kluczyka nie mrugały światła.🚕😀 

Jeśli chodzi o wyświetlacz to pisałem , że mam  konwerter do tego wyświetlacza który przechodzi na I2C, ja mam 16 pin, dowiedziałem się , że potrzebny jest 20 pin. W internecie chłopaki pokazują, że 16 pin też da rade tylko, w wyświetlaczu pin RST do masy i jest OK. Jeżeli jest taki 20 pin, to taki sobie zamówię , nich będzie porządnie.👨‍🔧

Co do mojego programu , to dzieła tak jak chciałem, dwie rzeczy mi przeszkadzały po usunięciu ich ,czyli po uproszczeniu ( słowo klucz).👨‍🔧

 Pokaże kawałek  gdzie był problem.

Teraz będę się uczył na programie od BELFERKA, jest skomplikowany dla tego proszę wszystkich o pomoc.😀

Pozdrawiam serdecznie.😀

   while (digitalRead(A0) == LOW); delay(200)
   while (digitalRead(A1) == LOW);

   
   while (digitalRead(A0) == LOW) delay(200)
   while (digitalRead(A1) == LOW)

 

 

Link do komentarza
Share on other sites

Gość es2
2 godziny temu, xirtt napisał:

Jeśli chodzi o wyświetlacz to pisałem , że mam  konwerter do tego wyświetlacza który przechodzi na I2C,

Konwerter pewnie na przestarzałym PCF8574. Liczyłeś ile czasu będzie trwało odświeżenie całego ekranu? Raczej nie, bo byś nie zdecydował się na konwerter.

Dalej, konwerter na PCF nadaje się TYLKO do wyświetlaczy ciekłokrystalicznych, które mogą działać na NIBBLE a graficzne takiego trybu nie mają (wyjątek, wyświetlacze mogące pracować w trybie alfanumerycznym i graficznym). Tak więc konwerter do niczego się nie przyda.

Edytowano przez es2
Link do komentarza
Share on other sites

Witam wszystkich serdecznie i życzę miłego dnia.😀

Dziękuje serdecznie za odpowiedzi.😀

Odpowiadam mojemu Przyjacielowi BELFERKOWI.😀

- jeszcze tego nie wiem dla czego tak jest, ale kiedy dodałem właśnie w tym miejscu dileya i usunąłem średniki, drogi przycisk ożył i stał się OK-ejem .👨‍🔧

Było by fajnie jak by ktoś to przeanalizował i wytłumaczy dlaczego tak się stało.🤔

 

Odpowiadam mojemu Przyjacielowi es2.😀

- być może tak jest , ale muszę to sprawdzić. Może da się z tym coś zrobić, oczywiście jak najprościej się da, a że mam jedno i drugie 🤔, to oczywiście pokombinuje. 👨‍🔧

Proszę dalej wszystkich o pomoc.

Serdecznie Pozdrawiam. 😀🎄☃️😀

 

Link do komentarza
Share on other sites

Napisałeś: while (digitalRead(A0) == LOW); delay(200)

To raczej niemożliwe by program, który "pozjadał" średniki zadziałał, a tu np. po delay() brakuje średnika.Więc nie ma tu czego analizować.  W czasie kompilacji zostanie zgłoszony błąd "expected ';' before......" i nie będzie możliwości wgrania takiego błędnego programu do Arduino. Każde polecenie musi być zakończone średnikiem. Proponowana przez Ciebie konstrukcja pętli while(warunek); jest równoważna pętli while(warunek){} i oznacza: w wolnym tłumaczeniu, że dopóki warunek jest prawdziwy czekaj i nic nie rób.

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

Gość es2
28 minut temu, Belferek napisał:

while(warunek){} i oznacza: w wolnym tłumaczeniu, że dopóki warunek jest prawdziwy czekaj i nic nie rób.

Ale taka forma nie jest zalecana.Optymalizator może taka pętlę usunąć w kodzie wynikowym.

 

Link do komentarza
Share on other sites

Witam serdecznie.

Faktycznie mój błąd. Tak  wygląda to w programie........

 

 while (digitalRead(A0) == LOW) delay(200); 
 while (digitalRead(A1) == LOW)

Co do Optymalizator, to nie  wiem o co chodzi, ale program działa SUPER..........

Link do komentarza
Share on other sites

Anonim
Ten temat został zamknięty.
×
×
  • 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.