99teki Napisano Luty 2, 2022 Udostępnij Napisano Luty 2, 2022 (edytowany) - LCD ST7032i podłączony do nodeMCU (ESP8266) do portów GPIO 4,5, poniżej program znaleziony w internecie. - do programu potrzebna biblioteka , adres podany w programie, druga biblioteka z makro załączona do tematu . - kod programu pod arduino /* * library name=ST7032_asukiaaa * version=1.0.5 * author=tomozh <tomozh@gmail.com>, Asuki Kono <asukiaaa@gmail.com> * maintainer=Asuki Kono <asukiaaa@gmail.com> * sentence=This library controls ST7032 on LCD. * paragraph=This library can control LCDs that using ST7032. Ex: SB1602B, SB0802G, AQM0802A-RN-GBW, AQM1602 and so on. * category=Display * url=https://github.com/asukiaaa/ST7032_asukiaaa * architectures=* * includes=ST7032_asukiaaa.h */ #include <Wire.h> #include "ST7032_asukiaaa.h" #include "bin.h" // Hardware required: // 1: I2C LCD connected on standard pins // 2: Linear Pot connected on analog pin 1 long sensorValue = 0; // variable to store the value coming from the sensor int angle = 0; unsigned long sumTimer; unsigned long tempTimer; long okresOdczytu = 2000; // odczyt co 1 sekunde ST7032_asukiaaa lcd; //Large chars char bn1[]={6,1,6, 1,6,32, 1,3,4, 3,3,4, 6,2,2, 6,3,1, 5,3,1, 1,1,4, 5,3,4, 5,3,4}; char bn2[]={6,2,6, 2,6,2, 5,2,2, 2,2,4, 32,6,32, 2,2,4, 5,2,4, 32,6,32, 5,3,4, 32,32,6}; // --------------------- void loadlargeChars() { uint8_t cc1[8] = { // Custom Character 1 B8(11111), B8(11111), B8(11111), B8(00000), B8(00000), B8(00000), B8(00000), B8(00000) }; uint8_t cc2[8] = { // Custom Character 2 B8(00000), B8(00000), B8(00000), B8(00000), B8(00000), B8(11111), B8(11111), B8(11111) }; uint8_t cc3[8] = { // Custom Character 3 B8(11111), B8(11111), B8(11111), B8(00000), B8(00000), B8(00000), B8(11111), B8(11111) }; uint8_t cc4[8] = { // Custom Character 4 B8(11100), B8(11110), B8(11111), B8(11111), B8(11111), B8(11111), B8(11110), B8(11100) }; uint8_t cc5[8] = { // Custom Character 5 B8(00111), B8(01111), B8(11111), B8(11111), B8(11111), B8(11111), B8(01111), B8(00111) }; uint8_t cc6[8] = { // Custom Character 6 B8(11111), B8(11111), B8(11111), B8(11111), B8(11111), B8(11111), B8(11111), B8(11111) }; uint8_t cc7[8] = { // Custom Character 7 Degree B8(01110), B8(10001), B8(10001), B8(10001), B8(01110), B8(00000), B8(00000), B8(00000) }; lcd.createChar(1, cc1); lcd.createChar(2, cc2); lcd.createChar(3, cc3); lcd.createChar(4, cc4); lcd.createChar(5, cc5); lcd.createChar(6, cc6); lcd.createChar(7, cc7); } // ------------------------------------------ setup -------------------------- void setup() { Serial.begin(115200); Serial.println(); lcd.begin(16, 2, LCD_5x8DOTS); // lcd.setContrast(40); lcd.display(); lcd.setCursor(0, 0); lcd.print("ST7032 LCD Test"); loadlargeChars(); delay(2000); lcd.clear(); for (int y =0; y <13; y++) { display(y); delay(3000); } tempTimer = millis(); } // ------------------------------------------------ loop -------------------- void loop() { sumTimer = millis(); static int licz = 0; sensorValue = analogRead(A0); // adjust the value below to compensate e.g. a 300 degree pot would sensorValue = 100; angle = (sensorValue * 3600 / 1024); angle = 200; if (sumTimer - tempTimer > okresOdczytu) { licz = random (0, 2000); display(licz); tempTimer = millis(); Serial.println("1"); } delay(10); } // --------------------- void display(int i) //Display the value in large characters { lcd.clear(); PrintBigDeg(15); if (i == 0) { PrintBigDigit(8, 0); PrintBigDot(11); PrintBigDigit(12, 0); } int pos = 15; while(i > 0) { if (pos == 15) PrintBigDot(pos); pos -= 3; PrintBigDigit( pos, i % 10 ); // col, row i /= 10; } } // ------------------------------------------ void PrintBigDigit(uint8_t offset, uint8_t digit) { // Line 1 of the one digit number lcd.setCursor(offset, 0); // col, row lcd.write(bn1[digit*3]); lcd.write(bn1[digit*3+1]); lcd.write(bn1[digit*3+2]); // Line 2 of the one-digit number lcd.setCursor(offset, 1); lcd.write(bn2[digit*3]); lcd.write(bn2[digit*3+1]); lcd.write(bn2[digit*3+2]); } // ----------------------------- void PrintBigDot(uint8_t offset) { lcd.setCursor(offset, 1); // col, row lcd.print('.'); } // ----------------------------- void PrintBigDeg(int8_t offset) { lcd.setCursor(offset, 0); lcd.write(7); } // ---------------------------------- end ------------------ bin.zip Edytowano Luty 2, 2022 przez 99teki 1 Cytuj Link do komentarza Share on other sites More sharing options...
Gieneq Luty 3, 2022 Udostępnij Luty 3, 2022 @99teki ciekawie wyglądają te duże cyfry 🙂 ewentualnie można by dopełnić brzuszek w 6 i 9 bo są troche nieczytelne ale koncepcja super! Mam w planach zbudować timer i może skorzystam. Możesz napisać coś o sposobie zapisu znaków: uint8_t cc1[8] = { // Custom Character 1 B8(11111), B8(11111), B8(11111), B8(00000), B8(00000), B8(00000), B8(00000), B8(00000) }; i w szczególności to, bo domyślam się jaka jest idea, ale nie widzę jak to działa: //Large chars char bn1[]={6,1,6, 1,6,32, 1,3,4, 3,3,4, 6,2,2, 6,3,1, 5,3,1, 1,1,4, 5,3,4, 5,3,4}; char bn2[]={6,2,6, 2,6,2, 5,2,2, 2,2,4, 32,6,32, 2,2,4, 5,2,4, 32,6,32, 5,3,4, 32,32,6}; Cytuj Link do komentarza Share on other sites More sharing options...
99teki Luty 3, 2022 Autor tematu Udostępnij Luty 3, 2022 (edytowany) - znaków do RAM w tym COG można wpisać tylko 7, a jak jest symbol stopnia C to jest tylko 6 miejsc. tablica cc1 to "beleczka" u góry, cc2 to "beleczka" u dołu., cc3 "beleczka" gruba u góry, cienka u dołu, itd. cc7 to znak stopnia C. teraz z bn1, bn2 wstawiasz znaki do 1 i 2 linii., bn1 6, 1, 6 czyli brzuszek z lewej, beleczka u góry i brzuszek na prawej stronie. bn2 6, 2, 6 te same brzuszki ale beleczka u dołu. czyli masz cyfrę 0. dla cyfry 6 można to poprawić w cc1 ale wtedy inne znaki są odkształcone, wszędzie tam gdzie w bn1, bn2 masz wpis "1". cyfra 9 poprawa w bn2 dla pozycji 9 zamiast 32, 32, 6 ma być 32, 2, 6 czyli dodana 2 - beleczka z dołu. Edytowano Luty 3, 2022 przez 99teki Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Luty 3, 2022 Udostępnij Luty 3, 2022 Powiem tak: Bawiłem się w to przy moim pierwszym omomierzu. Ograniczenie 7 znaków można obejść, mi się udało zrobić znaczek omegi i literki k i M (wyświetlane zamiennie, oczywiście cyfry swoją drogą). Niestety - czytelność glifów jest praktycznie żadna, to taki bajer bez praktycznego zastosowania. No, ale jako bajer może być... chociaż do jakichś praktycznych celów lepiej użyć jakiegoś małego TFT czy nawet OLEDa, a nawet ledowego 7seg. To tak z punktu widzenia przyślepawego dziadka 🙂 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
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!