Wyświetlacz 7-segmentowy z TM1637, wyświetlanie kropek - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Wyświetlacze (https://forum.arduinopolska.pl/dzial-wy%C5%9Bwietlacze) +--- Wątek: Wyświetlacz 7-segmentowy z TM1637, wyświetlanie kropek (/watek-wy%C5%9Bwietlacz-7-segmentowy-z-tm1637-wy%C5%9Bwietlanie-kropek) |
Wyświetlacz 7-segmentowy z TM1637, wyświetlanie kropek - Scislov - 27-06-2018 W jaki sposób wyświetlić na wyświetlaczu led z kontrolerem TM1637 wyświetlić kropki? Czy w ogóle biblioteka obsługująca ten wyświetlacz ma taką możliwość? W przykładzie kodu nie są wyświetlane kropki, lecz mi się wydaje, że drugi argument tej funkcji: display.showNumberDec(0, true, 1, 0) jest za to odpowiedzialny, ale nie działa poprawnie. Poniżej wstawiam całą funkcję z przykładów. #include <Arduino.h> #include <TM1637Display.h> // Module connection pins (Digital Pins) #define CLK 2 #define DIO 3 // The amount of time (in milliseconds) between tests #define TEST_DELAY 2000 const uint8_t SEG_DONE[] = { SEG_B | SEG_C | SEG_D | SEG_E | SEG_G, // d SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // O SEG_C | SEG_E | SEG_G, // n SEG_A | SEG_D | SEG_E | SEG_F | SEG_G // E }; TM1637Display display(CLK, DIO); void setup() { } void loop() { int k; uint8_t data[] = { 0xff, 0xff, 0xff, 0xff }; display.setBrightness(0x0f); // All segments on display.setSegments(data); delay(TEST_DELAY); // Selectively set different digits data[0] = 0b01001001; data[1] = display.encodeDigit(1); data[2] = display.encodeDigit(2); data[3] = display.encodeDigit(3); for(k = 3; k >= 0; k--) { display.setSegments(data, 1, k); delay(TEST_DELAY); } display.setSegments(data+2, 2, 2); delay(TEST_DELAY); display.setSegments(data+2, 2, 1); delay(TEST_DELAY); display.setSegments(data+1, 3, 1); delay(TEST_DELAY); // Show decimal numbers with/without leading zeros bool lz = false; for (uint8_t z = 0; z < 2; z++) { for(k = 0; k < 10000; k += k*4 + 7) { display.showNumberDec(k, lz); delay(TEST_DELAY); } lz = true; } // Show decimal number whose length is smaller than 4 for(k = 0; k < 4; k++) data[k] = 0; display.setSegments(data); // Run through all the dots for(k=0; k <= 4; k++) { display.showNumberDecEx(0, (0x80 >> k), true); delay(TEST_DELAY); } display.showNumberDec(153, false, 3, 1); delay(TEST_DELAY); display.showNumberDec(22, false, 2, 2); delay(TEST_DELAY); display.showNumberDec(0, true, 1, 3); delay(TEST_DELAY); display.showNumberDec(0, true, 1, 2); delay(TEST_DELAY); display.showNumberDec(0, true, 1, 1); delay(TEST_DELAY); display.showNumberDec(0, true, 1, 0); delay(TEST_DELAY); // Brightness Test for(k = 0; k < 4; k++) data[k] = 0xff; for(k = 0; k < 7; k++) { display.setBrightness(k); display.setSegments(data); delay(TEST_DELAY); } // On/Off test for(k = 0; k < 4; k++) { display.setBrightness(7, false); // Turn off display.setSegments(data); delay(TEST_DELAY); display.setBrightness(7, true); // Turn on display.setSegments(data); delay(TEST_DELAY); } // Done! display.setSegments(SEG_DONE); while(1); } RE: Wyświetlacz 7-segmentowy z TM1637, wyświetlanie kropek - es2 - 27-06-2018 Kropka to bit nr 7. Wystarczy więc wykonać OR 0x80 na danych segmentów do wyświetlenia gdzie bit0 segment A, bit1 segment B, itd. RE: Wyświetlacz 7-segmentowy z TM1637, wyświetlanie kropek - kaczakat - 27-06-2018 Jeśli korzystasz z biblioteki o której myślę, bo oczywiście mógłbym do Twojej zajrzeć, jeślibyś załączył, to: Kod: //! Displayes a decimal number, with dot control RE: Wyświetlacz 7-segmentowy z TM1637, wyświetlanie kropek - Scislov - 28-06-2018 Załączam //! Displayes a decimal number, with dot control //! //! Dispalyes the given argument as a decimal number. The dots between the digits (or colon) //! can be individually controlled //! //! @param num The number to be shown //! @param dots Dot/Colon enable. The argument is a bitmask, with each bit corresponding to a dot //! between the digits (or colon mark, as implemented by each module). i.e. //! For displays with dots between each digit: //! * 0.000 (0b10000000) //! * 00.00 (0b01000000) //! * 000.0 (0b00100000) //! * 0.0.0.0 (0b11100000) //! For displays with just a colon: //! * 00:00 (0b01000000) //! For displays with dots and colons colon: //! * 0.0:0.0 (0b11100000) //! @param leading_zero When true, leading zeros are displayed. Otherwise unnecessary digits are //! blank //! @param length The number of digits to set. The user must ensure that the number to be shown //! fits to the number of digits requested (for example, if two digits are to be displayed, //! the number must be between 0 to 99) //! @param pos The position least significant digit (0 - leftmost, 3 - rightmost) void showNumberDecEx(int num, uint8_t dots = 0, bool leading_zero = false, uint8_t length = 4, uint8_t pos = 0); Jestem tak zwanym samoukiem w arduino i najlepiej bym zrozumiał działanie kropek na jakimś przykładzie. Gdybyś mógł napisać najprostszy program wyświetlający kropkę samemu bym sobie to rozszyfrował RE: Wyświetlacz 7-segmentowy z TM1637, wyświetlanie kropek - es2 - 28-06-2018 (28-06-2018, 12:50)Scislov napisał(a): Jestem tak zwanym samoukiem w arduino i najlepiej bym zrozumiał działanie kropek na jakimś przykładzie. Gdybyś mógł napisać najprostszy program wyświetlający kropkę samemu bym sobie to rozszyfrowałAkurat miałem nieprzyjemność pisać soft sterujący tym beznadziejnym kontrolerem. Funkcje skopiowałem z jakieś beznadziejnej biblioteki Arduino i zmodyfikowałem. Niestety żenująca amatorska obsługa została ale co złego to nie na mnie. Kod: //----------------------------------------------------------------------// A tu jak tego użyć: Kod: TM1637Display_showNumberDecEx(VER, 2<<4, false, 3, 1); Reszta kodu: Kod: void TM1637Display_init() RE: Wyświetlacz 7-segmentowy z TM1637, wyświetlanie kropek - kaczakat - 28-06-2018 @Scislov, ... to ... sobie przeczytaj, a nie załączaj mi tego samego, o bosze. No masz ten sam opis, ta sama biblioteka, opis funkcji z dopiskiem Ex, zresztą Pan ES2 wyjaśnił łopatologicznie przykładem. Zrób sobie jakiś kurs, teraz jest wszystko za darmo, tylko brać: https://forbot.pl/blog/kurs-arduino-podstawy-programowania-spis-tresci-kursu-id5290 , a na youtubie filmy dla nieumiejących czytać/niewidomych, wiele kanałów również w PL. Chyba że jak jest coś po angielsku to widzisz tylko plamę na kartce, ale przy programowaniu bez podstawowych słów ang. to szybka droga do zniechęcenia - nie da się tyle zakuć bez zrozumienia - Shakespeare. RE: Wyświetlacz 7-segmentowy z TM1637, wyświetlanie kropek - es2 - 28-06-2018 Myślę, że panu @Scislov przydałaby sie podstawowa wiedza: - Co to wyświetlacz 7-segmentów. - Jak się nim steruje. - Jak działa dekoder BCD na 7-segmentów np 7447, 74LS247. - Jak reprezentuje się liczby w mikroprocesorach. - Konwersje bin-dec-hex. - Jak skonwertować liczbę na kod 7-segmentów. - Co to kod ASCII. - Konwersja ASCII dec-bin-hex. - Wyświetlanie multiplesowe. - Magistrala I2C, bo TM1637 to magistrala podobna do I2C, tyle, że 10 razy wolniejsza od najwolniejszej I2C i nie ma adresowania przez co do jednej magistrali w zasadzie nie da się podłączyć kilku układów a już na pewno nie (przynajmniej nie w prosty sposób) kilu takich samych aby np obsłużyć więcej wyświetlaczy. Z tą wiedzą, bez problemu zaświeci kropkę a nawet napisze swoją obsługę TM1637 i to na przerwaniach, bo ze względu na powolność komunikacji, obsługa TM1637 bez przerwań nie jest dobrym pomysłem. PS Mnie np liczba siedem podoba się z zaświeconym segmentem F dlatego często modyfikuję biblioteki. RE: Wyświetlacz 7-segmentowy z TM1637, wyświetlanie kropek - Scislov - 08-07-2018 Chinol miał po prostu atrapy kropek... RE: Wyświetlacz 7-segmentowy z TM1637, wyświetlanie kropek - es2 - 09-07-2018 (08-07-2018, 23:26)Scislov napisał(a): Chinol miał po prostu atrapy kropek... Czego to złodzieje nie wymyślą aby naciągnąć klienta. Mnie to na razie nie grozi, nie kupuję badziewia (ale moi klienci czasem tak, tyle, ze to nie mój problem). Pewnie niedługo wzrosna cła, skarbówka też jusz się zaczyna czepiać. Dzięki temu chłam nie będzie tak łatwo dostępny. |