Delphi ComPort - ComTerminal + Atmega

Delphi ComPort - ComTerminal + Atmega
JA
  • Rejestracja:około 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:11
0

Witam!

Mam problem z komponentem ComTerminal wchodzącego w skład kontrolek ComPort. Otóż założenie jest takie, aby po wciśnięciu buttona, w terminalu (ComTerminal) pojawiał się np. string do wysłania, a następnie został wysłany do urządzenia przez rs232 (w tym wypadku do Atmegi8). Po ustawieniu focusa na ComTerminal i wciśnięciu klawisza Enter, dane zostają wysłane, ale jak w procedurze buttona napiszę string + #13#10, to pomimo tego, że w terminalu karetka przejdzie do nowej linii, to żadne dane nie są wysyłane. Dopiero jak wcisnę fizycznie enter, do dane przechodzą. Czy ktoś mógłby mi pomóc?

Pozdrawiam!

0

Znaczy się chcesz tym buttonem wywoływać to coś z terminala wpisując do niego #13#10 ?
Jak dla mnie to tak wygląda...

JA
  • Rejestracja:około 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:11
0

Chcę wywoływać buttonem enter w terminalu, ale jeżeli jest jakaś inna możliwość niż #13#10, to jestem otwarty na propozycję.

PR
  • Rejestracja:około 16 lat
  • Ostatnio:ponad 9 lat
  • Postów:304
0

daj mi źródła tej aplikacji albo komponentu co ci powiem co zrobić...


CodeGear Delphi 2007 | Windows 7 |
Jak to dobrze że istnieje opcja edytuj post ;]
JA
  • Rejestracja:około 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:11
0

Ok, ale dopiero w poniedziałek. Źródła mam w pracy, ale nie mogę się coś dostać przez pulpit zdalny.
Pozdrawiam!

PR
  • Rejestracja:około 16 lat
  • Ostatnio:ponad 9 lat
  • Postów:304
0

przed wyłączeniem kompa pokusiłem się na znalezienie paczki i coś takiego
ComPort.WriteStr({String z linia poleceń...});
a dalej w innej proceduże coś takiego

Kopiuj
ComPort.WriteStr('AT'+CHR(13));

{Send modem Command}
tzn wystarczy dać string danych które chcesz wysłać i i zakończyć go Char(13) inaczej #13 tylko ;]
ale nie sprawdzałem czyli jak chcesz mieć np edit1 gdzie podajesz komende i button (Wyslij)
do do buttona musisz dać

Kopiuj
ComPort.WriteStr(Edit1.text+CHR(13));

wiedz że nie piszę tego na trzeźwo więc nie mam pewności ;]


Z Demo Example to wziąłem ale nie testowałem...


CodeGear Delphi 2007 | Windows 7 |
Jak to dobrze że istnieje opcja edytuj post ;]
edytowany 1x, ostatnio: proqix
JA
  • Rejestracja:około 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:11
0

Hmm, ciekawe. Może zadziałać, ale mogę to sprawdzić dopiero jutro. Dam znać czy się udało.
Dzięki i pozdrawiam!

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 7 godzin
  • Lokalizacja:Tuchów
  • Postów:12167
0

Tak przy okazji: chcesz dodać znak nowej linii czy powrotu karetki? Bo Ty próbujesz wpisać dwa (jeden po drugim);

Dec Hex Oct Symbol Opis (ang.) Opis (pl)
10 A 012 LF Line Feed, new line znak nowej linii
13 D 015 CR Carrige Return znak powrotu karetki
Jeśli interesuje Cię Enter - wyślij znak #13, jeśli znak nowej linii - #10;

Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
xeo545x39
Zawsze się zastanawiałem czym się to różni? Jak dawałem w Delphi #13 to miałem nową linię :D
flowCRANE
Różnić się musi, bo po co by były dwa takie same znaki? Ja używałem "#10" zawsze np. w "MessageBox", bo wcześniej studiowałem tabelkę kodów ASCII i wolałem wiedzieć co używam :) Chocicaż to nawet inaczej wyszło, bo bardzo dawno temu w ogóle nie wiedziałem jak w jednym łańcuchu można np. dwie linie odstępu zrobić, dlatego poczytałem o ASCII;
JA
  • Rejestracja:około 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:11
0

Chcę po prostu stworzyć programowo (w kodzie) enter. Aby wysłać coś przez rs muszę ręcznie wciskać enter, a ja nie chcę robić tego manualnie.

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 7 godzin
  • Lokalizacja:Tuchów
  • Postów:12167
0

Jeśli chcesz to zrobić w łańcuchu - wykorzystaj znak o kodzie #13; Możesz także symulować wciśnięcie i puszczenie klawisza dzięki keybd_event:

Kopiuj
keybd_event(VK_RETURN, 0, 0, 0);
keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);

Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
JA
  • Rejestracja:około 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:11
0

Witam!

Komenda ComPort.WriteStr(Edit1.text+CHR(13)) zadziałała. Myślałem, że aby coś wysłać przez rs to trzeba robić to przez ComTerminal:)). Ale teraz pojawił się następny problem. Jak korzystam z powyższej komendy, to wysyłane są tylko dwa pierwsze znaki, chociaż znaków jest więcej.

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 7 godzin
  • Lokalizacja:Tuchów
  • Postów:12167
0

Dziwne to... Jakiego typu jest argument w metodzie ComPort.WriteStr()?

Jeśli używasz znaku o kodzie 13 to podaj go tak:

Kopiuj
ComPort.WriteStr(Edit1.Text + #13)

Funkcja Chr() to przeżytek, spuścizna starego pascal'a...


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
cimak
przeżytek? a jak numer kodu trzymasz w zmiennej?:)
flowCRANE
Chodzi mi o to, że popularniejszym rozwiązaniem jest użycie znaku "#" i numeru znaku niż wywoływanie funkcji "Chr" :P
JA
  • Rejestracja:około 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:11
0

Tak wygląda methoda. WriteStr(const Str: String): Integer, a ComPort.WriteStr(Edit.Text+#13) też próbowałem i dalej wysyła tyko dwa pierwsze znaki.

flowCRANE
Zobacz do dokumentacji co jest napisane o ten metodzie;
JA
  • Rejestracja:około 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:11
0

"Call WriteStr function to write Str variable to output buffer. The function does not return until whole string is written or timeout elapses.
The return value is the number of bytes that are actually written."

Czyli, funkcja zapisuje stringa do bufora i nie zwróci niczego, dopóki cały string nie zostanie zapisany albo minie czas oczekiwania. Zwrócona przez funkcję zmienna jest liczbą zapisanych bajtów.

To co mogę zrobić w tym przypadku, skoro w przykładzie jest podane

Kopiuj
 Str := 'Hello';
  ComPort1.WriteStr(Str); // string type variable

?

PR
  • Rejestracja:około 16 lat
  • Ostatnio:ponad 9 lat
  • Postów:304
0

Takie przykład podam

Kopiuj
var Str:String
begin
Str := 'Hello';
 ShowMessage(Format('Wysłano %d bitów',[ComPort1.WriteStr(Str+#13)]));
end;

to ci wyśle do portu dane z Str i zwróci ilość odebranych bitów i wyświetli komunikat


CodeGear Delphi 2007 | Windows 7 |
Jak to dobrze że istnieje opcja edytuj post ;]
flowCRANE
Ciekawe co na to debuger, czy też będzie widział dwa znaki, czy cały łańcuch;
JA
  • Rejestracja:około 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:11
0

O ile wpisując coś z palca w ComTerminalu, Bascom (zarówno jak zmienna input jest typu integer lub string) z łatwością to "łyka", to przy wysyłaniu "raw data" z ComPortu, Bascom ma problemy z interpretacją. Może trzeba przerobić "raw data" (np na kod ASCII), a może kod Bascoma, ale obawiam się, że to już wykracza poza moje umiejętności.

Dziękuję za pomoc.

cimak
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 9 lat
  • Postów:1668
0

z palca wklepujesz wolno. program wysyla to jednym ciagniem bez przerw miedzy znakami, moze dlatego sie chrzani.
pokaz kod od bascoma. swoja droga nie lubie bascoma, nie potrafie podac konkretnego przykladu dlaczego, ale czuje jakby byl niedorobiony. pokochalem arduino, niestety dziala tylko dla kilku mikrokontrolerow, dlatego teraz zaczynam czytac o C.

JA
  • Rejestracja:około 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:11
0

Przepraszam, że tak długo nie odpowiadałem . Załączam kod Bascom:

Kopiuj

$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
$lib "ds1307clock.lib"
Config Sda = Portb.2
Config Scl = Portb.3

Config Portb.4 = Input
Config Portb.1 = Input

Const Ds1307w = &HD0
Const Ds1307r = &HD1

S1 Alias Pinb.4
S2 Alias Pinb.1
Portb.4 = 0
Portb.1 = 0

Portb.4 = 1
Portb.1 = 1

Dim I As Byte
Dim Znak As String * 10
Dim Znak2 As String * 2
Dim Znak4 As String * 2
Dim _sec2 As Byte
Dim _min2 As Byte
Dim _hour2 As Byte

Config Clock = User

Cls

Enable Interrupts

Cursor Off

Do
    I = Ischarwaiting()

    If I = 1 Then
       Cls
       Input Znak
       Locate 1 , 2 : Lcd Znak
       Waitms 1000
       Znak2 = Mid(znak , 4 , 2)
       Znak4 = Mid(znak , 1 , 2)
       Gosub Ustaw_czas
       Print Time$
    End If

Locate 1 , 1 : Lcd Time$

Loop

End

Dim Weekday As Byte
Getdatetime:
  I2cstart
  I2cwbyte Ds1307w
  I2cwbyte 0
  I2cstart
  I2cwbyte Ds1307r
  I2crbyte _sec , Ack
  I2crbyte _min , Ack
  I2crbyte _hour , Ack
  I2crbyte Weekday , Ack
  I2crbyte _day , Ack
  I2crbyte _month , Ack
  I2crbyte _year , Nack
  I2cstop
  _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
  _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return

Setdate:
  _day2 = Makebcd(_day2) : _month2 = Makebcd(_month2) : _year2 = Makebcd(_year2)
  I2cstart
  I2cwbyte Ds1307w
  I2cwbyte 4
  I2cwbyte _day2
  I2cwbyte _month2
  I2cwbyte _year2
  I2cstop
Return

Settime:
  _sec2 = Makebcd(_sec2) : _min2 = Makebcd(_min2) : _hour2 = Makebcd(_hour2)
  I2cstart
  I2cwbyte Ds1307w
  I2cwbyte 0
  I2cwbyte _sec2
  I2cwbyte _min2
  I2cwbyte _hour2
  I2cstop
Return

Ustaw_czas:
   _hour2 = _hour
   _min2 = _min
   _sec2 = _sec
   _min2 = Val(znak2)
   _hour2 = Val(znak4)
   _sec2 = 0
   Gosub Settime
   'Goto Ustaw_czas
Return

Wczoraj spalił mi się ds1307 (nic nie wytrzyma 12V napięcia, nawet atmega:) ), więc muszę się na razie wstrzymać z testami.

Pozdrawiam!

cimak
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 9 lat
  • Postów:1668
0
Kopiuj
Do
    I = Ischarwaiting()
 
    If I = 1 Then
       Cls
       Input Znak
       Locate 1 , 2 : Lcd Znak
       Waitms 1000
       Znak2 = Mid(znak , 4 , 2)
       Znak4 = Mid(znak , 1 , 2)
       Gosub Ustaw_czas
       Print Time$
    End If
 
Locate 1 , 1 : Lcd Time$
 
Loop

no sie nie dziwie ze nie dziala...
raz ze po "odczytaniu" znaku wstrzymujesz caly program na 1000ms=1sekundę.
dwa, że uzywasz "input" do jego odczytania - input sie stosuje w innych sytuacjach np wtedy gdy prosisz usera o wklepanie danych z klawiatury (stad w terminalu dziala). byc moze z serialem tez zadziala, nie wiem, sprawdz, chociaz wydaje mi sie ze moze znikac ten pierwszy przeslany znak. na poczatek pozbadz sie tego waitms.
zacznij uzywac pomocy: http://avrhelp.mcselec.com/index.html?input.htm
ja bym to inaczej rozwiazal:
dodaj sobie zmienna typu string, i odczytany w petli znak dodawaj do tej zmiennej. w momencie gdy otzymasz #13 nie dodawaj tego znaku tylko przejdz do analizy otrzymanej wiadomosci.

edytowany 2x, ostatnio: cimak
JA
  • Rejestracja:około 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:11
0

Dziękuję z a podpowiedź! W końcu sobie poradziłem. Zadziwiająco jest to proste. Komenda "Inkey()" pomogła.

Dziękuję i pozdrawiam wszystkich!

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)