Komentator Napisano Luty 1, 2017 Udostępnij Napisano Luty 1, 2017 Najczęściej w projektach bazujących na Arduino używane są wyświetlacze tekstowe, stosunkowo rzadko pojawiają się LCD graficzne.Zaskakująco dużo osób zapomina o trzeciej opcji, czyli o wyświetlaczach 7-segmentowych. Za ich pomocą możliwe jest prezentowanie stosunkowo prostych informacji. Na pewno każdy kojarzy je z zegarów cyfrowych lub multimetrów. UWAGA, to tylko wstęp! Dalsza część artykułu dostępna jest na blogu.Przeczytaj całość »Poniżej znajdują się komentarze powiązane z tym wpisem. Cytuj Link do komentarza Share on other sites More sharing options...
leepa79 Luty 4, 2017 Udostępnij Luty 4, 2017 Moja interpretacja zadania 6.1 #define SEG_C 2 #define SEG_E 3 #define SEG_D 4 #define SEG_B 5 #define SEG_G 6 #define SEG_A 7 #define SEG_F 8 String odebraneDane = ""; //Pusty ciąg odebranych danych boolean start = true; //Poczatek wpisu String wpis = ""; //Wpisana liczba ile int ile = 0; //Jakas zmienna na potrzeby wyswietlacza ;) void setup() { Serial.begin(9600); //Serial ruszyl z zawrotna predkoscia //Konfiguracja pinow jako wyjscia pinMode(SEG_A, OUTPUT); pinMode(SEG_B, OUTPUT); pinMode(SEG_C, OUTPUT); pinMode(SEG_D, OUTPUT); pinMode(SEG_E, OUTPUT); pinMode(SEG_F, OUTPUT); pinMode(SEG_G, OUTPUT); } void loop() { while (start == true) //Kiedy podano cyferki lub inne liczbusie { Serial.println("Podaj cyfre z zakresu 0-9"); //Tekst jakis while(Serial.available() == 0) //Poczekaj na wpisanie cyfry {} if(Serial.available() > 0) //Jeśli cyfra zostanie wpisana { wpis = Serial.readStringUntil('\n'); //Odczytaj cyfre ile = wpis.toInt(); //Zmien String na int wyswietlacz(ile); //Wrzuc to co odczytales na wyswietlacz Serial.print("Podana cyfra: "); //Pokaz na porcie co wpisales Serial.println(ile); delay(1000); //Delay to przeklenstwo kazdego prgramu... } } } void wyswietlacz(int cyfra) { //Instrukcja switch ustawia odpowiednie stany na wyjsciach //w zaleznosci od podanej cyfry switch (cyfra) { case 0: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, LOW); break; case 1: digitalWrite(SEG_A, LOW); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, LOW); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, LOW); break; case 2: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, LOW); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, HIGH); break; case 3: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, HIGH); break; case 4: digitalWrite(SEG_A, LOW); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, LOW); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 5: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, LOW); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 6: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, LOW); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 7: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, LOW); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, LOW); break; case 8: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 9: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; } //Jesli liczba inna niz z zakresu 0-9 wyswietl blad if (cyfra > 9 || cyfra < 0){ error(); Serial.println("Bledna cyfra - podaj cyfre z zakresu 0-9"); delay(1000); } } //Symbol bledu na wyswietlaczu void error(){ digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, LOW); digitalWrite(SEG_C, LOW); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, HIGH); } I fotka Teraz mała kawa i biorę się za dodawanie przycisków i zadanie 6.2 - mam nadzieję, że nie zapomnę o PULLUPach 😉 PS mała płytka stykowa powędrowała na robota (z kursu) podczas odklejania płytki z tej podstawki z kursu zobaczyłem jak wygląda płytka od środka - bardzo ciekawe doświadczenie 😉 ED: Zadanie 6.2 jednak nie udało mi się na bazie poprzedniego kodu (zbyt mała wiedza) Ale 'naskrobałem' coś takiego //Wyswietlacz #define SEG_C 2 #define SEG_E 3 #define SEG_D 4 #define SEG_B 5 #define SEG_G 6 #define SEG_A 7 #define SEG_F 8 //Przyciski #define przDod 9 #define przUja 10 #define przRes 11 #define przLicz 12 int i = 0; void setup() { Serial.begin(9600); //Serial ruszyl z zawrotna predkoscia //Konfiguracja pinow jako wyjscia pinMode(SEG_A, OUTPUT); pinMode(SEG_B, OUTPUT); pinMode(SEG_C, OUTPUT); pinMode(SEG_D, OUTPUT); pinMode(SEG_E, OUTPUT); pinMode(SEG_F, OUTPUT); pinMode(SEG_G, OUTPUT); //Konfiguracja dla przyciskow pinMode(przDod, INPUT_PULLUP); pinMode(przUja, INPUT_PULLUP); pinMode(przRes, INPUT_PULLUP); pinMode(przLicz, INPUT_PULLUP); } void loop() { wyswietlacz(i); //Wyswietl wartosc na wyswietlaczu if(digitalRead(przDod) == LOW){//Jesli przDod wcisniety i++; //Dodaj 1 do wartosci wyswietlacz(i); //Wrzuc na wyswietlacz Serial.println(i); //Wrzuc na port delay(500); //Delay dla poprawnego działania przycisku } if(digitalRead(przUja) == LOW){//Jesli przDod wcisniety i--; //Wartosc w dol wyswietlacz(i); //Wrzuc na wyswietlacz Serial.println(i); //I serial delay(500); //Delay dla poprawnego działania przycisku } if(digitalRead(przRes) == LOW){//Jesli przRes wcisniety i=0; //Wyzeruj wyswietlacz(i); //I wrzuc na wyswietlacz Serial.println("Reczny restet"); //Plus komentarz na serialu Serial.println(i); delay(500); //Delay dla poprawnego działania przycisku } if(digitalRead(przLicz) == LOW){//Jesli przLicz wcisniety for (i ; i > 0; i--) { //Petla odliczania do zera wyswietlacz(i); //Wyswietl wartosc na wyswietlaczu delay(1000); //Poczekaj 1000 ms (że niby sekunda ;) ) } } } void wyswietlacz(int cyfra) { //Instrukcja switch ustawia odpowiednie stany na wyjsciach //w zaleznosci od podanej cyfry switch (cyfra) { case 0: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, LOW); break; case 1: digitalWrite(SEG_A, LOW); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, LOW); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, LOW); break; case 2: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, LOW); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, HIGH); break; case 3: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, HIGH); break; case 4: digitalWrite(SEG_A, LOW); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, LOW); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 5: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, LOW); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 6: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, LOW); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 7: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, LOW); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, LOW); break; case 8: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 9: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; } //Jesli liczba inna niz z zakresu 0-9 wyswietl blad if (cyfra > 9 || cyfra < 0){ error(); //Smieszny tekst zamrazajacy program na kilka sekund Serial.println("Bledna cyfra - podaj cyfre z zakresu 0-9"); delay(500); Serial.print("Nastapi"); delay(1000); Serial.print(" automatyczny"); delay(1000); Serial.println(" reset licznika"); delay(500); i=0; //Wyzerowanie licznika wyswietlacz(i); delay(500); } } //Symbol bledu na wyswietlaczu void error(){ digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, LOW); digitalWrite(SEG_C, LOW); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, HIGH); } Jeszcze film i lecę dalej. ED2: Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Luty 4, 2017 Udostępnij Luty 4, 2017 leepa79, zastanów się, czy nie dasz rady zrobić rozpoznawania wartości "poza zakresem" również switch'em. Poczytaj jaka jest składnia całej instrukcji, może coś Ci się nasunie 😉 A jeśli chodzi o sklejki/płytki stykowe/roboty, to niedługo będą pierwsze prototypy nowych rozszerzeń, więc będzie sporo nowych możliwości w tych tematach 😉 Cytuj Link do komentarza Share on other sites More sharing options...
leepa79 Luty 5, 2017 Udostępnij Luty 5, 2017 Treker, Na początku miałem takie rozwiązanie: //Wyswietlacz #define SEG_C 2 #define SEG_E 3 #define SEG_D 4 #define SEG_B 5 #define SEG_G 6 #define SEG_A 7 #define SEG_F 8 //Przyciski #define przDod 9 #define przUja 10 #define przRes 11 #define przLicz 12 int i = 0; void setup() { Serial.begin(9600); //Serial ruszyl z zawrotna predkoscia //Konfiguracja pinow jako wyjscia pinMode(SEG_A, OUTPUT); pinMode(SEG_B, OUTPUT); pinMode(SEG_C, OUTPUT); pinMode(SEG_D, OUTPUT); pinMode(SEG_E, OUTPUT); pinMode(SEG_F, OUTPUT); pinMode(SEG_G, OUTPUT); //Konfiguracja dla przyciskow pinMode(przDod, INPUT_PULLUP); pinMode(przUja, INPUT_PULLUP); pinMode(przRes, INPUT_PULLUP); pinMode(przLicz, INPUT_PULLUP); } void loop() { wyswietlacz(i); //Wyswietl wartosc na wyswietlaczu if(digitalRead(przDod) == LOW){//Jesli przDod wcisniety i++; //Dodaj 1 do wartosci wyswietlacz(i); //Wrzuc na wyswietlacz Serial.println(i); //Wrzuc na port delay(500); //Delay dla poprawnego działania przycisku } if(digitalRead(przUja) == LOW){//Jesli przDod wcisniety i--; //Wartosc w dol wyswietlacz(i); //Wrzuc na wyswietlacz Serial.println(i); //I serial delay(500); //Delay dla poprawnego działania przycisku } if(digitalRead(przRes) == LOW){//Jesli przRes wcisniety i=0; //Wyzeruj wyswietlacz(i); //I wrzuc na wyswietlacz Serial.println("Reczny restet"); //Plus komentarz na serialu Serial.println(i); delay(500); //Delay dla poprawnego działania przycisku } if(digitalRead(przLicz) == LOW){//Jesli przLicz wcisniety for (i ; i > 0; i--) { //Petla odliczania do zera wyswietlacz(i); //Wyswietl wartosc na wyswietlaczu Serial.println(i); delay(1000); //Poczekaj 1000 ms (że niby sekunda ;) ) } } } void wyswietlacz(int cyfra) { //Instrukcja switch ustawia odpowiednie stany na wyjsciach //w zaleznosci od podanej cyfry switch (cyfra) { case 0: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, LOW); break; case 1: digitalWrite(SEG_A, LOW); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, LOW); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, LOW); break; case 2: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, LOW); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, HIGH); break; case 3: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, HIGH); break; case 4: digitalWrite(SEG_A, LOW); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, LOW); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 5: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, LOW); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 6: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, LOW); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 7: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, LOW); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, LOW); break; case 8: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 9: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 10: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, LOW); digitalWrite(SEG_C, LOW); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, HIGH); delay(1000); i=0; wyswietlacz(i); delay(500); break; } } Czyli case 10 🙂 Ale nie wiedziałem jak zrobić błąd dla wartości poniżej zera. A jeśli chodzi o sklejki/płytki stykowe/roboty, to niedługo będą pierwsze prototypy nowych rozszerzeń To jest wspaniała wiadomość. Ostatnio częściej zaglądam na forum i zastanawiam się jak to wszystko ogarniasz? 🙂 Robicie naprawdę świetną robotę, więc z tej okazji wielkie dzięki - nie pierwsze i nie ostatnie. 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
Treker (Damian Szymański) Luty 6, 2017 Udostępnij Luty 6, 2017 Czyli case 10 Ale nie wiedziałem jak zrobić błąd dla wartości poniżej zera. Nie do końca 🙂 Można jeszcze dodać coś takiego: switch (wyrażenie) { case wartość1: /* instrukcje, jeśli wyrażenie == wartość1 */ break; case wartość2: /* instrukcje, jeśli wyrażenie == wartość2 */ break; /* ... */ default: /* instrukcje, jeśli żaden z wcześniejszych warunków nie został spełniony */ break; } Fragment zaczerpnięty z: https://pl.wikibooks.org/wiki/C/Instrukcje_steruj%C4%85ce#switch 🙂 To jest wspaniała wiadomość. Ostatnio częściej zaglądam na forum i zastanawiam się jak to wszystko ogarniasz? Robicie naprawdę świetną robotę, więc z tej okazji wielkie dzięki - nie pierwsze i nie ostatnie. Dzięki za miłe słowa, zawsze motywują do dalszej pracy 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
leepa79 Luty 7, 2017 Udostępnij Luty 7, 2017 A więc "default:" 🙂 dzięki za radę. Teraz już wszystko wygląda ładnie. Jedziemy dalej. Następne zadanie robię na bazie tego poprzedniego. Mam już szkic i dwa problemy. Pierwszy - jak pogodzić ten delay (pińcet) który pomaga mi w kontrolowaniu zakłóceń w przycisku z tym szybkim delayem na dwóch wyświetlaczach? Drugi - przycisk odliczający od 99 do zera, ale tu jakoś dojdę do sedna 🙂 (mam nadzieję) trochę się oderwałem od lekcji bo światłolub czekał 😉 Oglądałem też te przykłady z SevSeg i tu z przykładami jakoś to poszło, ale nie idę dalej póki nie rozwiąże poprzednich zadań. Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Luty 8, 2017 Udostępnij Luty 8, 2017 leepa79, w kursie staram się opisywać podstawy, a i tak czasami muszę długo przynudzać, więc niektóre rzeczy od pewnego poziomu warto jeszcze trenować we własnym zakresie. Przy okazji aktualizacja: w związku z tym, że część o gotowej bibliotece zajęła więcej miejsca od tego, które pierwotnie założyłem, to dodałem jednak te informacje do opublikowanej już #6 części kursu. W kolejnej zajmiemy się już tylko termometrami. W związku z tym zainteresowanych wyświetlaczami zachęcam do lektury nowego kawałka artykułu: Kurs Arduino II – #6 – wyświetlacze 7-segmentowe. Publikację kolejnej części przesuwam o jeden dzień, aby nie pojawiło się zbyt dużo rzeczy jednocześnie 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
Loght Czerwiec 12, 2017 Udostępnij Czerwiec 12, 2017 Witam. Próbuję wykonać stoper odliczający 60 sekund w duł. Jednak metodę jaką wykorzystałem podczas robienia takowego na wyświetlaczy LCD zawodzi. To jest { i=i-1; delay (1000);} w funkcji loop. Prosiłbym o pomoc. Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Czerwiec 12, 2017 Udostępnij Czerwiec 12, 2017 Loght, witam na forum 🙂 Z podanego fragmentu ciężko wywnioskować co dokładnie jest źle. Wklej cały kod, najlepiej z komentarzami - bez tego nie damy rady Ci pomóc. Cytuj Link do komentarza Share on other sites More sharing options...
Loght Czerwiec 15, 2017 Udostępnij Czerwiec 15, 2017 Oto cały kod jaki próbowałem pisać. #include "SevSeg.h" SevSeg sevseg; //Instantiate a seven segment controller object int i; void setup() { byte numDigits = 2; byte digitPins[] = {10, 9}; byte segmentPins[] = {7, 5, 2, 4, 3, 8, 6}; bool resistorsOnSegments = true; // Use 'true' if on digit pins byte hardwareConfig = N_TRANSISTORS; // See README.md for options sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments); i = 60; } void loop() { sevseg.setNumber(i, 2); //Wyswietl liczbę 34, korzystając z dwóch wyswietlaczy sevseg.refreshDisplay(); { i=i-1; delay (1000); } } próbowałem również innych metod ta wydaje mi się najłatwiejsza ale nie działa. Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Czerwiec 16, 2017 Udostępnij Czerwiec 16, 2017 Loght, niestety tak jak pisałem w artykule (oraz w poprzednich komentarzach) nie można korzystać z opóźnień (wykonywanych przez funkcję delay), ponieważ zatrzymują cały problem i blokują możliwość multipleksowania wyświetlacza. Jeśli koniecznie chcesz stworzyć taki program, to zainteresuj się funkcją milis(), której wykorzystanie zostało opisane np. tutaj: https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay Za jej pomocą można odliczać czas bez zatrzymywania całego programu. Cytuj Link do komentarza Share on other sites More sharing options...
ponyyou Czerwiec 24, 2017 Udostępnij Czerwiec 24, 2017 Witam zadanie domowe wykonałem (dokładniej kod) w taki sposób : #define C 3 #define E 5 #define D 6 #define B 11 #define G 2 #define A 7 #define F 10 #define button_0 8 #define button_plus 9 #define button_minus 4 void setup() { pinMode(C, OUTPUT); pinMode(E, OUTPUT); pinMode(D, OUTPUT); pinMode(B, OUTPUT); pinMode(G, OUTPUT); pinMode(A, OUTPUT); pinMode(F, OUTPUT); pinMode(button_0, INPUT_PULLUP); pinMode(button_plus, INPUT_PULLUP); pinMode(button_minus, INPUT_PULLUP); } int i = 0; void loop() { if(digitalRead(button_0) == LOW) { i = 0; wysw(i); } if(digitalRead(button_plus) == LOW && i < 11){ i = i+1; wysw(i); while(digitalRead(button_plus) == LOW) { delay(20); } } if(digitalRead(button_minus) == LOW){ i = i-1; wysw(i); while(digitalRead(button_minus) == LOW) { delay(20); } } } void wysw(int cyfra){ switch (cyfra){ case 0: digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, HIGH); digitalWrite(E, HIGH); digitalWrite(F, HIGH); digitalWrite(G, LOW); break; case 1: digitalWrite(A, LOW); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, LOW); digitalWrite(E, LOW); digitalWrite(F, LOW); digitalWrite(G, LOW); break; case 2: digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, LOW); digitalWrite(D, HIGH); digitalWrite(E, HIGH); digitalWrite(F, LOW); digitalWrite(G, HIGH); break; case 3: digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, HIGH); digitalWrite(E, LOW); digitalWrite(F, LOW); digitalWrite(G, HIGH); break; case 4: digitalWrite(A, LOW); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, LOW); digitalWrite(E, LOW); digitalWrite(F, HIGH); digitalWrite(G, HIGH); break; case 5: digitalWrite(A, HIGH); digitalWrite(B, LOW); digitalWrite(C, HIGH); digitalWrite(D, HIGH); digitalWrite(E, LOW); digitalWrite(F, HIGH); digitalWrite(G, HIGH); break; case 6: digitalWrite(A, HIGH); digitalWrite(B, LOW); digitalWrite(C, HIGH); digitalWrite(D, HIGH); digitalWrite(E, HIGH); digitalWrite(F, HIGH); digitalWrite(G, HIGH); break; case 7: digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, LOW); digitalWrite(E, LOW); digitalWrite(F, LOW); digitalWrite(G, LOW); break; case 8: digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, HIGH); digitalWrite(E, HIGH); digitalWrite(F, HIGH); digitalWrite(G, HIGH); break; case 9: digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, HIGH); digitalWrite(E, LOW); digitalWrite(F, HIGH); digitalWrite(G, HIGH); break; case 10: digitalWrite(A, HIGH); digitalWrite(B, LOW); digitalWrite(C, LOW); digitalWrite(D, HIGH); digitalWrite(E, LOW); digitalWrite(F, LOW); digitalWrite(G, HIGH); break; default: digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, HIGH); digitalWrite(E, HIGH); digitalWrite(F, HIGH); digitalWrite(G, LOW); i = 0; break; } } Można w jakiś zastąpić while ale nie samym delay bo wtedy przycisk działa z opóźnieniem ? Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Czerwiec 26, 2017 Udostępnij Czerwiec 26, 2017 ponyyou, pamiętaj o dodawaniu komentarzy do kodu. Dzięki nim postronnym osobom będzie łatwiej analizować kod, a Tobie również będzie łatwiej, gdy będziesz chciał wrócić do swoich kodów w przyszłości 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
Radosław Sierpień 31, 2017 Udostępnij Sierpień 31, 2017 Moje rozwiązanie zadania 6.3 : #define seg_a 7 //Opis #define seg_b 5 //segmentów #define seg_c 2 // i #define seg_d 4 // ich #define seg_e 3 //pinów #define seg_f 6 #define seg_g 8 #define wys_jed 9 // piny do #define wys_dwa 10 // wyświetlaczy void setup() { pinMode(seg_a,OUTPUT); pinMode(seg_b,OUTPUT); pinMode(seg_c,OUTPUT); pinMode(seg_d,OUTPUT); pinMode(seg_e,OUTPUT); pinMode(seg_f,OUTPUT); pinMode(seg_g,OUTPUT); pinMode(wys_jed,OUTPUT); pinMode(wys_dwa,OUTPUT); } void loop() { for(int j=0;j<10;j++) //Pętla do zmiany pierwszej cyfry { for ( int i=0;i<10;i++){ //Pętla do zmiany drugiej cyfry for(int k=0; k<30; k++){ //Pętla do ustawiania szybkości licznika digitalWrite(wys_jed,HIGH); //Włączamy 1. wyświetlacz digitalWrite(wys_dwa,LOW); //Włączamy 2. wyświetlacz showTheNumber(j); //Funkcja dobierająca odopwiednią cyfrę ( kod poniżej ) delay(5); digitalWrite(wys_dwa,HIGH); //Włączamy 2. wyświetlacz digitalWrite(wys_jed,LOW); //Wyłączamy 1. wyświetlacz showTheNumber(i); delay(5); } } } } void showTheNumber(byte number){ switch(number){ case 0: digitalWrite(seg_a,HIGH); digitalWrite(seg_b,HIGH); digitalWrite(seg_c,HIGH); digitalWrite(seg_d,HIGH); digitalWrite(seg_e,HIGH); digitalWrite(seg_f,HIGH); digitalWrite(seg_g,LOW); break; case 1: digitalWrite(seg_a,LOW); digitalWrite(seg_b,HIGH); digitalWrite(seg_c,HIGH); digitalWrite(seg_d,LOW); digitalWrite(seg_e,LOW); digitalWrite(seg_f,LOW); digitalWrite(seg_g,LOW); break; case 2: digitalWrite(seg_a,HIGH); digitalWrite(seg_b,HIGH); digitalWrite(seg_c,LOW); digitalWrite(seg_d,HIGH); digitalWrite(seg_e,HIGH); digitalWrite(seg_f,LOW); digitalWrite(seg_g,HIGH); break; case 3: digitalWrite(seg_a,HIGH); digitalWrite(seg_b,HIGH); digitalWrite(seg_c,HIGH); digitalWrite(seg_d,HIGH); digitalWrite(seg_e,LOW); digitalWrite(seg_f,LOW); digitalWrite(seg_g,HIGH); break; case 4: digitalWrite(seg_a,LOW); digitalWrite(seg_b,HIGH); digitalWrite(seg_c,HIGH); digitalWrite(seg_d,LOW); digitalWrite(seg_e,LOW); digitalWrite(seg_f,HIGH); digitalWrite(seg_g,HIGH); break; case 5: digitalWrite(seg_a,HIGH); digitalWrite(seg_b,LOW); digitalWrite(seg_c,HIGH); digitalWrite(seg_d,HIGH); digitalWrite(seg_e,LOW); digitalWrite(seg_f,HIGH); digitalWrite(seg_g,HIGH); break; case 6: digitalWrite(seg_a,HIGH); digitalWrite(seg_b,LOW); digitalWrite(seg_c,HIGH); digitalWrite(seg_d,HIGH); digitalWrite(seg_e,HIGH); digitalWrite(seg_f,HIGH); digitalWrite(seg_g,HIGH); break; case 7: digitalWrite(seg_a,HIGH); digitalWrite(seg_b,HIGH); digitalWrite(seg_c,HIGH); digitalWrite(seg_d,LOW); digitalWrite(seg_e,LOW); digitalWrite(seg_f,LOW); digitalWrite(seg_g,LOW); break; case 8: digitalWrite(seg_a,HIGH); digitalWrite(seg_b,HIGH); digitalWrite(seg_c,HIGH); digitalWrite(seg_d,HIGH); digitalWrite(seg_e,HIGH); digitalWrite(seg_f,HIGH); digitalWrite(seg_g,HIGH); break; case 9: digitalWrite(seg_a,HIGH); digitalWrite(seg_b,HIGH); digitalWrite(seg_c,HIGH); digitalWrite(seg_d,HIGH); digitalWrite(seg_e,LOW); digitalWrite(seg_f,HIGH); digitalWrite(seg_g,HIGH); break; default: digitalWrite(seg_a,HIGH); digitalWrite(seg_b,LOW); digitalWrite(seg_c,LOW); digitalWrite(seg_d,HIGH); digitalWrite(seg_e,LOW); digitalWrite(seg_f,LOW); digitalWrite(seg_g,HIGH); break; } } Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Sierpień 31, 2017 Udostępnij Sierpień 31, 2017 To teraz spróbuj napisać funkcję showTheNumber() tak, by zajęła kilka linijek kodu. To co zrobiłeś pewnie zadziała, ale tak się tego nie robi. To kurs dla początkujących, wiem i dlatego wysil się bardziej. Nie zawsze pierwszy pomysł jest najlepszy. Zastanów się jak zapalanie segmentów zrobić bardziej ogólnym, żeby nie ciągnęło się przez trzy ekrany. Wskazówka: poczytaj o tablicach i przemyśl sprawę przechowywania w czymś takim wyglądu wszystkich cyfr. 1 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!