logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak wysyłać znaki ASCII 0-255 przez RS232 w VisualBasic?

KJ 06 Maj 2005 02:21 12831 52
Najlepsze odpowiedzi

Jak wysyłać przez RS232 w Visual Basicu bajty 0–255 jako dane ASCII, także 0 i znaki rozszerzone?

Nie wysyłaj tego przez `Print #`, tylko użyj kontrolki MSComm32.ocx, bo pozwala na wysyłanie danych binarnych albo tekstowych; jeśli jej nie masz, można też skorzystać z InpOut32.dll do bezpośredniego dostępu do portów [#1466016] Do zamiany 8-bitowego wzorca na znak autor podaje prostą funkcję składającą zapis hex i potem użycie `Chr(&H...)`, np. `Chr("&H" & Convert_(11111111))`, co daje znak odpowiadający wysyłanemu bajtowi [#1478371] Jeśli przygotowujesz dane wcześniej w pliku, otwieraj go w trybie binarnym i korzystaj z `Get`/`Put`, bo w trybie tekstowym (`Input`/`Print`) takie bajty sprawiają problemy [#1474015][#1534418]
Wygenerowane przez model językowy.
REKLAMA
  • #1 1465566
    KJ
    Poziom 31  
    Posty: 2370
    Pomógł: 68
    Ocena: 945
    Witam mam taki problem potrzebuję wysyłać przez port com danie w taki sposób, aby były one traktowane jako znaki ASCII bo tylko takie mogę poprawnie odebrać mikroprocesorem. Z tego co zauważyłem jedynym działającym w przerwaniu od UARTa poleceniem odbioru, w bascom AVR jest inkey a to odbiera tylko znaki ASCII :/ No i tu pojawia się problem bo o ile wartości z przedziału 1-127 (standardowa tablica ASCII) idą bez kłopotów to tablica rozszerzona i 0 "null" stanowią problem :/ Potrzebne mi to do wysyłania grafiki na tablicę diodową więc potrzebne mi wartości z przedziału 0-255 na początek przydałby się program wysyłający po kolei dane od 0 do 127 i od 128 do 255 COM a w VB obsługuję tak:

    Private Sub Command1_Click()
    Open "COM3:115200,N,8,1,asc" For Output As #2
    Print #2, "DANE"
    Close
    End Sub


    Kod oczywiście wykonuje się po naciśnięciu klawisza.
    Program ten wysyła do tablicy ciąg znaków w tym przypadku "DANE" Po z czytaniu binarnych wartości wyświetlonych na tablicy ciąg jest poprawnie wyświetlany czyli: "68;65;78;69" docelowo taki ciąg ma mieć 240 znaków, bo tyle wchodzi na tablicę. Trzeba będzie jeszcze napisać coś, co będzie konwertowało bitmapy na odpowiednie znaki ASCII ale to potem. Nie wiem, co z tym zrobić wprowadzenie do ciągu znaków niestandardowych metodą lewy ALT i z numerycznej kod znaku np 255 owocuje niczym :| 255 wyświetlane jest jako spacja i jako spacja leci do procka :| Jest to mój pierwszy program który pisze na kompa :D ale wydaje mi się że nie jest zemną tak źle i jakoś sobie dam radę:D
  • REKLAMA
  • #2 1466016
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    Rozumiem ze nichcesz do tego celu urzywac kontrolki mscomm32.ocx poniewasz masz podstawowa wersje visuala? jezeli jednak masz taka kontrolke to dodaj ja (Ctrl+t)
    Masz wtedy mozliwosc wysylania danych binarnych lub textowych.
    Mozesz sobie jeszcze sciagnac darmowy InpOut32.dll ktory daje bezposredni dostep do portow (troche "na piechote" ale bardzo dokladnie).

    Konwertowanie bitmapy tez znajdziesz w internecie szukajac w google albo innym szukaju. W obrazie sa dane jekie wystepuja w naglowku
    wazne jest jaki rodzaj bitmapy czyli w ilu kolorach jest zapisana i rozdzielczosc, przyda sie przy cztaniu danych o kolorze piksela.

    Jak wysyłać znaki ASCII 0-255 przez RS232 w VisualBasic?

    Po naglowku juz jest obraz, pamietaj ze jest zapisany od lewego dolnego rogu!

    Oczywiscie nieocenionym narzedziem jest portmonitor. wtedy dopiero zobaczysz co naprawde jest wysylane na port i gdzie urosly kwiatki :)
    powinien byc chociazby tu:
    http://www.sysinternals.com/ntw2k/freeware/portmon.shtml

    Napisz jaki ciag chcesz wyslac konkretnie to napewno poradzimy.

    pozdro
  • #3 1466891
    KJ
    Poziom 31  
    Posty: 2370
    Pomógł: 68
    Ocena: 945
    Wspomnianego komponentu do portów niestety nie posiadam :(
    Co do bitmap to potrzebna mi analiza 8 pixelowych słupków z dołu do góry od lewej do prawej bitmapa o wymiarach 15x126. Odczyt ma przebiegać jak na rysunku poniżej po dotarciu do góry pierwszego słupka przeskakuje do dołu drugiego i takich słupków będzie 16 z tym że ostatni będzie węższy o 3 pixele ale to chyba nie problem. Każde 8 bitów na szerokości słupka należy skonwertować na odpowiedni znak ASCII i wysłać COMem. Procek to sobie odbierze do pamięci i wyświetli jako binarną wartość na matrycy powinno to odpowiadać graficznie temu co w BMP.
    Załączniki:
    • Jak wysyłać znaki ASCII 0-255 przez RS232 w VisualBasic? odczyt.gif (1.66 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #4 1471968
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    Bitmapa w kompie tez musi miec taka rozdzielczosc stworz sobie bmp naprzyklad w programie Paint, o rozdzielczosci 126x15. narysuj szarna kreske albo jakis znaczek. Zapisz w formacie 24bitowym. Uzywaj tylko bielego i czarnego koloru ( konwerter zrobisz sobie pozniej).
    Przydatny jest edytor binarny np HexEdit. odrazu zobaczysz jak to jest zapisane. znajdziesz tam wszystko identycznie jak poprzednio napisalem. jest naglowek i sa dane obrazu.

    Zacznij czytac od 55 bajtu po trzy (trzy kolory skladowe). jezeli pierwszy pixel (lewy dolny rog) byl bialy to otrzymasz (FF FF FF) jezeli czarny to (00 00 00). Jezeli obrazek ma szerokosc 126pixeli wiec pomnoz przez 3 i wtedy bedzie do jedna linijka obrazu. Wielkosci sa zapisane w naglowku.
    na koncu linii sa jeszcze niepotrzebne bajty dopisane tak zeby dzielilo sie przez 4 (to sa zera)

    Wiec stworz sobie stringa i jezeli to bedzie "FF FF FF" to zapisz zero a jezeli "00 00 00" to zapisz jeden i tak po kolei efekt np taki:
    "00010000"
    Pamietaj rzeby poukladac bitmape czyli :
    1.zczytaj w ten sposob piersza linie bitmapki zapisz do zmiennej String np. Str1
    2.zczytaj w ten sposob druga linie bitmapki zapisz do zmiennej String np. Str2
    .......
    15.zczytaj w ten sposob 15 linie bitmapki zapisz do zmiennej String np. Str15

    I poniewaz czytamy od dolu w koncowej zmiennej typu String np. TheBestOfBmp zapisz je od konca.

    TheBestOfBmp = Str15 & Str14 &...... Str1

    TheBestOfBmp bedzie mial 1890 jedynek i zer!

    Dodaj do tego jescze 6 zer bo nie dzieli sie na 8.

    Potem dzielac po kolei na 8 powstaja bity "00001000" zamien to na ascii i juz masz jeden bajt do wyslania.
    Jak zrobisz to w petlach to bedzie pare linijek kodu.


    Problem jest tylko taki ze 126x15 to jest 1890 pixeli my to zmiescimy w 237 baitach po 8 bitow. czy to napewno taka rozdzielczosc?
    W kazdym razie tak zamienisz Bmp na ASCii. Wiem ze sa moze lepsze sposoby ale ten powinien byc dla kazdego zrozumialy.

    Jezeli wkradl sie blad to prosze o poprawke innyCh forumowiczow. pisalem to z pamieci.

    pozdro
  • REKLAMA
  • #5 1472887
    KJ
    Poziom 31  
    Posty: 2370
    Pomógł: 68
    Ocena: 945
    Taki odczyt jest prawie dobry. Jeśli przyjmiemy że bitmapa ma 128 pixeli szerokości to uzyskamy z tego 240bajtów tyle właśnie jest mi potrzebne. Tak będzie nawet łatwiej niż dodawać jakieś dane korekcyjne w programie. dwie ostatnie kolumny pxeli po prostu nie będą używane.
  • #6 1473008
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    Ale trzeba pamietac ze dane ida w jednym ciagu jezeli wysylane dane beda pobrane z obrazka o szerokosci 128 a odbior bedzie na szer 126 i nie zmniejszysz tego programowo obraz na wyswiatlaczu bedzie przesuniety linia po linii o 2 pixele.

    Zeby konwertowac kolory mozesz naprzyklad wyciagnac srednia z trzech skladowych i przyrownac do jakiejs wartosci ktora bedzia granica do zakwalifikowania piksela jako czarny lub bialy.

    pozdro
  • #7 1473438
    KJ
    Poziom 31  
    Posty: 2370
    Pomógł: 68
    Ocena: 945
    Jedyna metoda odczytu pliku jakom znam to taka:
    
    Private Sub Command1_Click()
    Dim x               'deklaracje
    Dim odczyt(20)
    Dim odp
    
    Open "c:\bmp.bmp" For Input As #1 'otwarcie bitmapy do odczytu
    
    For x = 1 To 5                       'zmienna x przyjmuje wartość od 1 do 5
    Input #1, odczyt(x)                'odczyt no właśnie czego ??
    odp = MsgBox(odczyt(x))      'wyświetlenie wyniku odczytu
    Next x                                  'następny x
    
    Close                                     'zamkniecie pliku
    
    End Sub
    


    Problem w tym że taka procedura odczytuje naraz całą bitmapę od deski do deski a ja chce tylko 5 pierwszych bajtów. wiem że będzie to nagłówek ale chce się jakoś nauczyć sterowania pozycjom w pliku. Jak nie Input to jakie polecenie do tego ?? A może jest jakiś komponent do odczytywania bitmap ??
  • #8 1474015
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    O ile pamietam to bylo jakos tak


    Dim Read1 As String
    Dim Read2 As String

    Read1 = String(1, " ") 'przeczyta jeden bajt
    Read2 = String(2, " ") 'przeczyta dwa bajty

    Open "C:\test.bmp" For Binary As #1

    Get #1, 1, Read2 'przeczyta dwa bajty, sygnature pliku bmp czylo "BM"
    Get #1, 55, Read1 'przeczyta jeden bajt od 55 bajtu czyli pierwsza skladowa pixela bitmapki.

    Close #1



    Klaniaja sie podstawy VB chociaz sam nie wiem czy sie nie pomylilem :)

    pozdro
  • #9 1478118
    KJ
    Poziom 31  
    Posty: 2370
    Pomógł: 68
    Ocena: 945
    No posiedziałem nad tym trochę i napisałem program czytający jeden bajt bitmapy dorobienie odczytu kolejnych nie będzie już problemem ale na razie eksperymentuję na jednym. Nie potrafię za Chiny ludowe rozpoznać czy kolor jest biały czy czarny no bo nie zrobie przecież warunku którego argumentem jest wartość w hex-ach odczytana z bitmapy ani nie wprowadzę znaku ASCII odpowiadającego zeru lub 255 da się wprawdzie takie "znaczki" wklepać z numerycznej ale to nie działa. Obszedłem więc ten problem stosując inne kolory których wartości mogę łatwo odkorować. Ograniczyłem się do odczytywania wartości tylko jednego z trzech kolorów opisujących dany pixel więc z bitmapy czytam co trzeci bajt. Program wygląda tak Jeśli odpowiednio po za pentlam to będzie czytało całą bitmapę ale ten temat na razie zostawmy
    Private Sub Command1_Click()
    
    Dim Read2 As String
    Dim odp
    Dim x
    Dim y(8)
    Dim z
    Dim v(15)
    Dim q
    
    
    z = 1
    q = 1
    Read2 = String(1, " ") 'przeczyta dwa bajty
    
    Open "C:\bmp.bmp" For Binary As #1
    Open "c:\bmp.txt" For Output As #2
    
    
    
    For x = 55 To 76 Step 3 '412 Step 3
    
    Get #1, x, Read2 'przeczyta jeden bajt od 55 bajtu czyli pierwsza skladowa pixela bitmapki.
    
    
    
    If Read2 = "0" Then
    y(z) = 1
    Else: y(z) = 0
    End If
    
    
    z = z + 1
    If z = 9 Then
    z = 1
    End If
    
    
    
    Next x
    v(q) = (y(1) & y(2) & y(3) & y(4) & y(5) & y(6) & y(7) & y(8))
    
    
    Write #2, v(q)
    
    
    
    odp = MsgBox(v(q))
    
    
    
    Close #1
    Close #2
    End Sub


    Dorobiłem sobie jeszcze logowanie do pliku *.txt. w zmiennej V znajduje się dana odczytana z bitmapy w postaci 01010101 i teraz pytanie jak taką daną zamienić na ASCII ?? na wartość dziesiętną mogę przeliczyć zmieniając linijkę składającą "igreki" w zmienną V ale wartość dziesiętną też nie wiem jak zamienić na ASCII. bo polecenie zmienna docelowa=asc(wartość) działa w dokładnie odwrotną stronę. Cienki jestem z tego języka w sumie miałem kontakt wyłącznie z bascomem. Przeczytałem podstawowy kurs znaleziony gdzieś w sieci. Brakuje mi wielu elementów składni a pomocy do VB niestety ni posiadam.
  • REKLAMA
  • Pomocny post
    #10 1478371
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    Zamiast szukac ja to zrobilem tak i wlasnie tak juz zostalo :)

    Public Function Convert_(Dane As String) As String
    
    Dim Temp(1) As String
    Dim i As Byte
    Dim EndStr As String
    
    For i = 0 To 1
    
    If i = 0 Then Temp(i) = Left(Dane, 4)
    If i = 1 Then Temp(i) = Right(Dane, 4)
    
    If Temp(i) = "0000" Then Temp(i) = "0"
    If Temp(i) = "0001" Then Temp(i) = "1"
    If Temp(i) = "0010" Then Temp(i) = "2"
    If Temp(i) = "0011" Then Temp(i) = "3"
    If Temp(i) = "0100" Then Temp(i) = "4"
    If Temp(i) = "0101" Then Temp(i) = "5"
    If Temp(i) = "0110" Then Temp(i) = "6"
    If Temp(i) = "0111" Then Temp(i) = "7"
    If Temp(i) = "1000" Then Temp(i) = "8"
    If Temp(i) = "1001" Then Temp(i) = "9"
    If Temp(i) = "1010" Then Temp(i) = "A"
    If Temp(i) = "1011" Then Temp(i) = "B"
    If Temp(i) = "1100" Then Temp(i) = "C"
    If Temp(i) = "1101" Then Temp(i) = "D"
    If Temp(i) = "1110" Then Temp(i) = "E"
    If Temp(i) = "1111" Then Temp(i) = "F"
    
    EndStr = EndStr & Temp(i)
    Next i
    
    Convert_ = EndStr
    
    End Function


    Wiem Wiem mozna to zrobic innymi "Lepszymi" sposobami ale tak jest OK i napewno zrozumiale.

    Zapisz to w module i teraz jak wklepiesz

    Dim Test as string
    
    Test = Convert_(11111111)                '(Test = "FF")
    Test = Chr("&H" & Convert_(11111111))  '(test = "˙" czyli znak ascii ktory chcesz wyslac)


    (oj stawiasz browary) :lol:

    Jak dowiedziec sie czy czarny czy bialy????
    a bitmapa jest czarno biala?
  • #11 1481377
    KJ
    Poziom 31  
    Posty: 2370
    Pomógł: 68
    Ocena: 945
    No programik już działa :D Mogę sobie wysyłać bitmapki do matrycy a wszystko dzięki koledze sivex :D Mam problem tej postaci że nadal nie wiem jak dowiedzieć się czy pixel czarny czy biały na razie operuję na szarych i białych (nie rozpoznaje białych tylko szare o parametrach 48,48,48 co w hex daje 000 a wszystkie inne traktuję jak białe) jest to dość niewygodna opcja :/ jak bym mógł rozpoznać najlepiej biały to mógł bym tak samo rozpoznawać tylko białe tło i nie przejmować się kolorem jakim rysuję.

    PS
    Czy może mnie ktoś oświecić w jaki sposób dodać do exeka własną ikonke ??
  • #12 1481443
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    Nie pozostaje mi nic jak tylko odpisac :)

    Bialy to jest "FF FF FF" czyli RGB o najwyzszych parametrach. Czarny to "00 00 00". Oczywiscie zamieniasz 0 na potrzeby wyswietlacza na 255 bo to jest wyswietlony pixel na matrycy i odwrotnie.

    Czerwony "FF 00 00"
    zielony "00 FF 00"
    niebieski "00 00 FF"

    i potem mieszanie kolorow. Otworz painta i tam na palecie masz to zobrazowane. Dodaj trzy skladowe i podziel na trzy. Zamienisz w ten sposob na skale szarosci. i potem zadecydujesz o wartosci, ktora bedzie granica zakwalifikowania do bieli i czerni. otrzumasz Monochromatyczna bitmape idealna do wyslania na matryce.




    &H
  • #13 1483883
    KJ
    Poziom 31  
    Posty: 2370
    Pomógł: 68
    Ocena: 945
    Napotkałem na problem z com-em :( wszystko działa poprawnie do momentu wyłączenia kompa lub przejścia na inny numer portu. Potem trzeba odpalić terminala z ustawieniami portu takimi jak w programie i coś wysłać żeby zaczęło działać. Czemu tak się dzieje może ktoś mi powie ?? Korzystam dalej z tej samej procedury sterowania COM-em:
    
    Open "COM3:115200,N,8,1,asc" For Output As #2 
    Print #2, "DANE" 
    Close 
    


    Ustaliłem że po włączeniu komputera dane na com w prawdzie idą ale z jakimś bliżej nieokreślonym bitrate. Dopiero włączenie terminala i wysłanie czegoś ustala bitrate portu. Nie daje nic zmienianie parametrów com-a w panelu sterowania. ten sposób sterowania portem został wyjęty wprost z dosowego qbasic-a nie wiem czy tam zachodziło to samo zjawisko, Trzeba będzie znaleźć inny sposób obsługi portu bo ten chyba nie umie wymusić bitrate co bym nie wpisał w miejsce 115200 to po wymuszeniu bitrate innym programem i tak działa z predkością 115200
  • #14 1484329
    SACZI
    Poziom 16  
    Posty: 302
    Pomógł: 6
    Ocena: 14
    [quote]Wspomnianego komponentu do portów niestety nie posiadam[code]
    Proszę, to on (dostępny jest równiez w internecie):
    Załączniki:
    • ms_comm.ZIP (48.94 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #15 1484822
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    Najlepiej jest ustawiac i strowac comem wlasnie z tej kontrolki. Jakiego mas visual basica? mozesz miec problem z dolaczeniem jej do projektu.

    MOze chcesz to tak rozwiazac?


    Private Declare Function ConfigurePort Lib "winspool.drv" Alias "ConfigurePortA" (ByVal pName As String, ByVal hwnd As Long, ByVal pPortName As String) As Long


    Jezeli chcesz ustawic COM1 w Form_Load() na samym poczatku wpisz:


    ConfigurePort "", Me.hwnd, "COM1" 



    pozdro
  • #16 1487328
    KJ
    Poziom 31  
    Posty: 2370
    Pomógł: 68
    Ocena: 945
    Pracuję nad wykorzystaniem kontrolki mscomm ale póki co jest do rozwiązania kolejny problem w postaci opóźnień czasowych. Mianowicie chce sobie np. suwakiem ustawić czas na powiedzmy 15sekund i żeby po tych 15 sekundach został wysłany kolejny obrazek. próbowałem to zrobić timerem w taki sposób że program pętli się tak długo aż różnica czasów (odczytywany na bieżąco w pętli-odczytany przed wejściem w pętlę) wyniesie 15sek. Rozwiązanie w prawdzie działa ale przeraźliwie muli kompa może jest jakiś komponent który umożliwia coś takiego ?? nie musi być jakieś super dokładne odmierzanie czasu.
  • #17 1487421
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    Zaraz zaraz jak klikniesz dwa razy na timera na formatce bedziesz mial miejse do wpisania kodu ktory bedzie wykonywany cyklicznie tak czesto jak ustawisz sobie czas. pamietaj jednak ze przekonwertowanie bitmapy i wyslanie comem tez trwa pewnie niezla chwile.
  • #18 1487828
    KJ
    Poziom 31  
    Posty: 2370
    Pomógł: 68
    Ocena: 945
    Wysyłka trwa moment bo baud 115200 a bajtów do wysłania tylko 240 konwersja bitmapy tez nie zabiera za wiele czasu (przynajmniej na kompie 1.3ghz). już zrobiłem to na tym timeże :D To prawie tak jak na procku ;) ale mam pytanie czy da się ten timer zatrzymać programowo ? czyli np. wyłączam coś i kod przestaje się wykonywać można zrobić tak że np. robię warunek z checkboxem i jak checkbox zahaczony to kod się wykonuje a jak odhaczony to się nie wykonuje ale timer dalej "tyka" a ja chcę go zatrzymać.
  • #20 1490846
    KJ
    Poziom 31  
    Posty: 2370
    Pomógł: 68
    Ocena: 945
    Działam ostro już mogę robić animacje, Wyłączać timer programowo i wysyłać obrazki ręcznie ;) a teraz chcę mieć w programie zakładki takie jak są np. w windowsowych właściwościach ekranu. Jak to zrobić ?

    PS. Władowałem na formę obrazek i nie mogę się go już pozbyć a nie chce mi się robić całej formy od nowa da się to jakoś odkręcić ?
  • #21 1491085
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    Nawet sie nad tym nigdy nie zastanawialem. najprosciej jak otworzysz zapisana formatke np Notatnikiem i w czesci gdzie sa dane formy wykasujesz cala linie picture.

    zakladki:
    Dodaj kontrolke "Microsoft Windows Common controls" i wstaw zakladki na forme. kliknij prawym myszy i wybierz wlasciwosci. tam sobie wszystko poustawiasz.

    pozdro
  • #22 1496491
    KJ
    Poziom 31  
    Posty: 2370
    Pomógł: 68
    Ocena: 945
    Mam w programie podgląd tego co idzie na matryce zrobiony w postaci pola image ładowanego plikiem który będzie analizowany za chwilę przez procedury wysyłania pytanie 128x15 to troszkę mała bitmapa jak ją powiększyć tak ze 2 lub 3 razy wiem ze będzie to kosztem rozdzielczości (większe klocki) ale mi to nie przeszkadza da się to zrobić ? jak ?

    PS. Czy da się tak skompilować program aby działał na innym PC na którym nie ma zainstalowanego Visual Basic-a ?
  • #24 1498258
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    Oczywiscie ze mozna ladowac ocx'y i dll'e ale poco?
    przeciez mozna to zrobic samemu :) jak wszystkow VIsual Basicu.

    mozesz ladowac obraz do picture box'a?

    to chociazby tak:
    picture box ma taka funkcje jak "Point"
    Podajesz tam punk x i y on wylicza jaka jest wartosc RGB.
    Zrob petle zeby zczytala caly rysunek pixel po pixelu i :
    1. albo zaladuj do pamieci
    2. albo np. po kliknienciu na przycisk ZOOM otworz nowe okno
    i taka sama petla 1() lub na zywca(2) rysuj kwadraty BOX jeden przy drugim takiego samego koloru jak wartosc zwrucona przez wlasciwosc Point pikczera boksa.
    Jakiej wielkosci beda kwadraty taki bedzie zoom.
    Dzieki temu mozesz robic z tym co chcesz.

    Wiekrze, mniejsze, podmiana kolorow, filtry itp

    pozdro
  • #25 1508963
    KJ
    Poziom 31  
    Posty: 2370
    Pomógł: 68
    Ocena: 945
    Jak wywołać okno otwierania plików takie jak jest w paincie czy winampie co wyświetla listę katalogów i plików gdzie można sobie wybrać plik do załadowania ? Mogę to w prawdzie zrobić na piechotę za pomocą list katalogów i plików ale wtedy będzie to przypominało eksplorator windows a ja nie chce tak tylko zwykłe okno open szukałem tego po sieci ale nie bardzo coś konkretnego jest. Jeszcze mam problem z tymi zakładkami jak je się wstawia ? Pewnie trzeba do tego jeszcze jakąś kontrolkę dodać oprócz common albo robi silę je ze zwykłych przycisków ?
  • #27 1510130
    KJ
    Poziom 31  
    Posty: 2370
    Pomógł: 68
    Ocena: 945
    Mam w programie timer który wykonuje kod z częstotliwością zależną od parametru interval. Wartość tego parametru zmieniam sobie suwakiem z najmniejszą wartością 1 największą około 2000 przy małych wartościach interval rzędu 1 czy 5 program po jakimś czasie zawiesza się i nie da się nic zrobić porucz resetu kompa :( takie częste wykonywanie kodu timera jest mi potrzebne do animacji a nie mogę z niego korzystać bo mi kompa wywala :(
  • #28 1510150
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    ruszyć temat "Programowanie wielowatkowe" ? ;) Nie jestem pewny, czy nie pora przesiąść się na asm lub C, poprawiając tym samym czas wykonywania tej procedury...
  • #29 1510204
    KJ
    Poziom 31  
    Posty: 2370
    Pomógł: 68
    Ocena: 945
    Na asm to raczej nie. C zamierzam zacząć przez wakacje :D ale póki co to musi jakotako działać na VB.
  • #30 1510767
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    Napewno poradzisz sobie i w VB. Musisz anlezc przyczyne. moze to wina przetwarzania danych i wysylania na port. sprobuj zrobic zmienna typu boolean ktora bedzie miala wartosc False w momecie przetwarzania obrazu i wysylania go do zyswietlacza. Jezeli wszystko sie zakonczy nabierze ona wartosc True.
    W Timerze wstaw ta zmienna tak by wykonywal kod tylko wtedy jak zmienna ma wartosc True.

Podsumowanie tematu

✨ Dyskusja dotyczy problemu wysyłania znaków ASCII o wartościach 0-255 przez port RS232 w Visual Basic, tak aby mikroprocesor odbierał je jako dane binarne do sterowania matrycą diodową. Autor opisuje trudności z wysyłaniem znaków spoza standardowego zakresu ASCII (0-127), zwłaszcza znaku null (0) i rozszerzonej tablicy ASCII. Proponowane rozwiązania obejmują użycie kontrolki MSComm32.ocx do obsługi portu szeregowego, która umożliwia wysyłanie danych binarnych, oraz bibliotek takich jak InpOut32.dll do bezpośredniego dostępu do portów. Omówiono także metody odczytu i konwersji bitmap 15x126 lub 128x15 pikseli na dane binarne, które są następnie wysyłane do wyświetlacza. Wskazano na konieczność analizy kolorów RGB pikseli i konwersji do wartości binarnych (0 lub 1) w celu uzyskania monochromatycznego obrazu. Poruszono kwestie programowego sterowania portem COM, problemów z ustawianiem prędkości transmisji oraz konieczności inicjalizacji portu przez terminal po restarcie komputera. W dyskusji pojawiły się także zagadnienia dotyczące obsługi timera w VB do animacji, problemów z wydajnością przy niskich wartościach interwału, a także sugestie dotyczące wielowątkowości i użycia funkcji DoEvents dla poprawy responsywności. Autor opisuje również metody odczytu i zapisu plików binarnych, w tym użycie instrukcji Get i Put, oraz sposoby rozpoznawania końca pliku (EOF). Poruszono temat filtrowania plików w oknach dialogowych CommonDialog oraz problemów z ikonami i zakładkami w interfejsie VB. Wskazano na możliwość przetwarzania obrazów w zewnętrznych programach graficznych (np. IrfanView) w celu uproszczenia konwersji do formatu RAW. W końcowej części dyskusji pojawiła się wzmianka o programie i wtyczce do Winampa służącej do wyświetlania analizatora widma i VU metra na matrycy, z prośbą o wyjaśnienie działania w VB.
Wygenerowane przez model językowy.
REKLAMA