Возникла необходимость получать данные с Arduino, к ней подключен RC522 и в мониторе порта выводится 1 строка чисел, мне хочется чтобы при считывании эта строка 1)выводилась на экран
2)записывалась в текстовик 3)Отправлялась на сервер Такое возможно?
Отслеживать
задан 10 ноя 2015 в 6:42
45 5 5 бронзовых знаков
Пишете программу, которая слушает COM-порт и принятые данные выводит на экран, в файл и шлет на сервер.
10 ноя 2015 в 6:49
1) Подойдет любой язык? 2) Быстрое ли будет чтение? 3) Любые данные которые пришли в монитор порта можно считать? То есть от любого датчика?
10 ноя 2015 в 7:11
Любой язык, где вы сможете реализовать чтение порта. Быстрое будет чтение, если грамотно реализовать. Любые данные, что пришли в порт, можно читать. Он вообще в винде выглядит как файл.
10 ноя 2015 в 9:01
Как файл? Впервые о таком слышу, можете поподробнее рассказать об этом? Стало интересно
10 ноя 2015 в 14:57
Просто как файл. Открываете файл с именем COM1 и читаете-пишете в него.
Уроки Arduino #2 — работа с монитором COM порта
10 ноя 2015 в 14:58
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Есть два варианта либо искать в интернете программу, которая слушает СОМ-порт и как-то пересылать на сервер, либо писать программу самому. Во втором случае нужно определится с языком программирования.
Например, если вы решите использовать C#, то здесь есть фрагмент кода, который можно незначительно изменить и получить желаемый вами результат.
Обновление
чтение моментальное. Данные пришли данные отобразились. Можете изменять таймауты получения и отправки вручную (это миллисекунды). Программа видит все что пришло в ком порт, неважно какой источник данных. Единственное что замечу в вашем случае возможно придется использовать не ReadExisting , a ReadByte . Зависит от формата передаваемых данных, нужно смотреть.
Если будут вопросы создавайте новый вопрос, поможем.
Источник: ru.stackoverflow.com
Считывание данных с ком порта программа
Сообщение dadreamer » 10 июн 2014, 21:07
gaper писал(а): т.е. что делает терминал?( а то я ни бум бум)
Позволяет считывать данные с COM-порта и записывать данные туда же. Обычно выглядит как готовая программа в виде текстового окна, в котором отображается строковая информация от подключенных устройств, и в этом окне можно набирать текст для отправки с клавиатуры. Используется для диагностики портов и оборудования.
Эмулятор терминала
HyperTerminal
TeraTerm
PuTTY
Free Serial Port Monitor
Попробуйте ещё вот так данные считать, и настройки порта в и в ОС внимательно посмотрите, из-за неверных настроек часто связи нет.
ПОДКЛЮЧАЕМ SERIAL COM PORT — C++ WINAPI ЧАСТЬ #8
Re: Считывание данных через COM порт и вывод на экран
Сообщение gaper » 10 июн 2014, 21:43
спасибо большое, завтра протестирую и отпишусь
Re: Считывание данных через COM порт и вывод на экран
Сообщение gaper » 11 июн 2014, 16:14
dadreamer , чтото не то получается, не приходят данные !
Может чтото еще надо добавить
у меня есть код программы в паскале, может сможешь понять как там, или там какой то сигнал надо посылать на прием
uses Objects,Drivers,Views,Menus,Dialogs,App, crt,PRINTER,m_2008_2; const del_word=0; del_01_word=0; del_02_word=0; del_03_word=0; del_04_word=0; tok_01_real=0; tok_02_real=0; rs_01_byte=0; rs_02_byte=0; rs_03_byte=0; rs_04_byte=0; rs_05_byte=0; rs_06_byte=0; rs_07_byte=0; rs_08_byte=0; rs_09_byte=0; rs_10_byte=0; sr_01_real=0; sr_02_real=0; sr_03_real=0; sr_04_real=0; sr_05_real=0; sr_06_real=0; sr_07_real=0; sr_08_real=0; sr_09_real=0; sr_10_real=0; sr_11_real=0; sr_12_real=0; sr_13_real=0; sr_14_real=0; sr_15_real=0; sm_01_byte=0; brak_byte=0; kol_01_byte=0; ss_01_byte=0; ss_02_byte=0; ss_03_byte=0; ss_04_byte=0; ss_05_byte=0; ss_06_byte=0; ss_07_byte=0; ss_08_byte=0; ss_09_byte=0; ss_10_byte=0; ss_11_byte=0; ss_12_byte=0; ss_13_byte=0; ss_14_byte=0; ss_15_byte=0; ss_16_byte=0; ss_17_byte=0; ss_18_byte=0; ss_19_byte=0; ss_20_byte=0; ss_21_byte=0; ss_22_byte=0; ss_23_byte=0; ss_24_byte=0; ss_25_byte=0; ss_26_byte=0; ss_27_byte=0; ss_28_byte=0; ss_29_byte=0; ss_30_byte=0; ss_31_byte=0; ss_32_byte=0; ss_33_byte=0; ss_34_byte=0; ss_35_byte=0; ss_36_byte=0; ss_37_byte=0; ss_38_byte=0; ss_39_byte=0; ss_40_byte=0; ss_41_byte=0; ss_42_byte=0; ss_43_byte=0; ss_44_byte=0; ss_45_byte=0; ss_46_byte=0; ss_47_byte=0; ss_48_byte=0; ss_49_byte=0; ss_50_byte=0; ss_51_byte=0; ss_52_byte=0; ss_53_byte=0; ss_54_byte=0; ss_55_byte=0; ss_56_byte=0; ss_57_byte=0; ss_58_byte=0; ss_59_byte=0; ss_60_byte=0; st_01_char=’ ‘; st_02_char=’ ‘; st_03_char=’ ‘; st_04_char=’ ‘;st_05:char=’ ‘; st_06_char=’ ‘; st_07_char=’ ‘; st_08_char=’ ‘; st_09_char=’ ‘;st_10:char=’ ‘; st_11_char=’ ‘; st_12_char=’ ‘; st_13_char=’ ‘; st_14_char=’ ‘;st_15:char=’ ‘; tt_01_word=0; tt_02_word=0; tt_03_word=0; tt_04_word=0; tt_05_word=0; tt_06_word=0; tt_07_word=0; tt_08_word=0; tt_09_word=0; tt_10_word=0; tt_11_word=0; tt_12_word=0; tt_13_word=0; tt_14_word=0; tt_15_word=0; tt_16_word=0; tt_17_word=0; tt_18_word=0; tt_19_word=0; tt_20_word=0; tf_01_real=0; tf_02_real=0; tf_03_real=0; tf_04_real=0; tf_05_real=0; tf_06_real=0; tf_07_real=0; tf_08_real=0; tf_09_real=0; tf_10_real=0; tf_11_real=0; tf_12_real=0; tf_13_real=0; tf_14_real=0; tf_15_real=0; tf_16_real=0; tf_17_real=0; tf_18_real=0; tf_19_real=0; tf_20_real=0; as1_byte=0; ta1_word=0; kk_01_word=0; kk_02_word=0; var rs_232 : array[1..5] of byte; procedure Taimer(aa:word); begin for aa:=1 to aa do begin port[$2f8]:=$00; repeat rs_02:= port[$2fD]; rs_02:=rs_02 and $40; until rs_02=$40; END; end; function resul:byte; begin repeat rs_02:= port[$3fD]; rs_02:=rs_02 and $1; if keyPressed then break; until rs_02=$1; resul:= port[$3f8]; end; Type TMyApp = object(TApplication) procedure HandleEvent(var Event: TEvent); virtual; procedure InitStatusLine; virtual; procedure NewDialog; End; PDemoDialog = ^TDemoDialog; TDemoDialog = object(TDialog) POutput00: PInputLine; POutput01: PInputLine; POutput02: PInputLine; POutput03: PInputLine; POutput04: PInputLine; POutput05: PInputLine; POutput06: PInputLine; POutput07: PInputLine; POutput08: PInputLine; < POutput09: PInputLine; POutput10: PInputLine; POutput11: PInputLine; POutput12: PInputLine; POutput13: PInputLine; POutput14: PInputLine; >POutput15: PInputLine; POutput16: PInputLine; POutput17: PInputLine; procedure HandleEvent(var Event:TEvent); virtual; End; Procedure TMyApp.HandleEvent(var Event: TEvent); Begin TApplication.HandleEvent(Event); if Event.What = evCommand then begin case Event.Command of cmNewDialog: NewDialog; else Exit; end; ClearEvent(Event); end; End; Procedure TMyApp.InitStatusLine; var R:TRect; Begin GetExtent(R); R.A.Y := R.B.Y — 1; StatusLine := New(PStatusLine, Init(R, NewStatusDef(0,$FFFF,NewStatusKey(‘~Alt-X~ Exit’, KbAltX,cmQuit, NewStatusKey(‘~Alt-D~ ?в-R’,kbAltD,cmNewDialog, nil)), nil))); End; Procedure TMyApp.NewDialog; var Dlg : PDemoDialog; R : TRect; C : Word; zap : byte; OControl00 : PInputLine; OControl01 : PInputLine; OControl02 : PInputLine; OControl03 : PInputLine; OControl04 : PInputLine; OControl05 : PInputLine; OControl06 : PInputLine; OControl07 : PInputLine; OControl08 : PInputLine; < OControl09 : PInputLine; OControl10 : PInputLine; OControl11 : PInputLine; OControl12 : PInputLine; OControl13 : PInputLine; OControl14 : PInputLine; >OControl15 : PInputLine; OControl16 : PInputLine; OControl17 : PInputLine; Begin R.Assign(1,1,77,16); Dlg:= New(PDemoDialog, Init(R, ‘dinamika_ey5 і?? +25 [?’1308:»5″] (08.04.2014) ‘ )); with Dlg^ do begin R.Assign(3,3,37,4); OControl00:= New(PInputline,Init(R,50)); Dlg^.Insert(OCOntrol00); Dlg^.POutput00 := OCOntrol00; R.Assign(3,4,37,5); OControl01:= New(PInputline,Init(R,50)); Dlg^.Insert(OCOntrol01); Dlg^.POutput01 := OCOntrol01; R.Assign(3,5,37,6); OControl02:= New(PInputline,Init(R,50)); Dlg^.Insert(OCOntrol02); Dlg^.POutput02 := OCOntrol02; R.Assign(3,6,37,7); OControl03:= New(PInputline,Init(R,50)); Dlg^.Insert(OCOntrol03); Dlg^.POutput03 := OCOntrol03; R.Assign(3,7,37,8); OControl04:= New(PInputline,Init(R,50)); Dlg^.Insert(OCOntrol04); Dlg^.POutput04 := OCOntrol04; R.Assign(3,8,37,9); OControl05:= New(PInputline,Init(R,50)); Dlg^.Insert(OCOntrol05); Dlg^.POutput05 := OCOntrol05; R.Assign(3,9,37,10); OControl06:= New(PInputline,Init(R,50)); Dlg^.Insert(OCOntrol06); Dlg^.POutput06 := OCOntrol06; R.Assign(3,10,37,11); OControl07:= New(PInputline,Init(R,50)); Dlg^.Insert(OCOntrol07); Dlg^.POutput07 := OCOntrol07; R.Assign(3,11,37,12); OControl08:= New(PInputline,Init(R,50)); Dlg^.Insert(OCOntrol08); Dlg^.POutput08 := OCOntrol08; < R.Assign(1,1,2,2); OControl09:= New(PInputline,Init(R,50)); Dlg^.Insert(OCOntrol09); Dlg^.POutput09 := OCOntrol09; R.Assign(3,1,4,2); OControl10:= New(PInputline,Init(R,50)); Dlg^.Insert(OCOntrol10); Dlg^.POutput10 := OCOntrol10; R.Assign(5,1,6,2); OControl11:= New(PInputline,Init(R,50)); Dlg^.Insert(OCOntrol11); Dlg^.POutput11 := OCOntrol11; R.Assign(39,9,74,10); OControl12:= New(PInputline,Init(R,50)); Dlg^.Insert(OCOntrol12); Dlg^.POutput12 := OCOntrol12; R.Assign(49,4,74,5); OControl13:= New(PInputline,Init(R,50)); Dlg^.Insert(OCOntrol13); Dlg^.POutput13 := OCOntrol13; R.Assign(49,5,74,6); OControl14:= New(PInputline,Init(R,50)); Dlg^.Insert(OCOntrol14); Dlg^.POutput14 := OCOntrol14; > R.Assign (40,3,48,4); Dlg^.Insert(New(PLabel, Init(R,»’. ‘,OControl16))); R.Assign(49,3,74,4); OControl16:= New(PInputline,Init(R,50)); Dlg^.Insert(OCOntrol16); Dlg^.POutput16 := OCOntrol16; < R.Assign (40,4,48,5); Dlg^.Insert(New(PLabel, Init(R,’. ‘,OControl16))); > < R.Assign (40,5,48,6); Dlg^.Insert(New(PLabel, Init(R,’??»?>:’,OControl16))); > R.Assign(40,7,74,8); OControl17:= New(PInputline,Init(R,50)); Dlg^.Insert(OCOntrol17); Dlg^.POutput17 := OCOntrol17; R.Assign(40,9,74,10); OControl15:= New(PInputline,Init(R,50)); Dlg^.Insert(OCOntrol15); Dlg^.POutput15 := OCOntrol15; R.Assign(40,11,74,13); Dlg^.Insert(New(PButton,Init (R,’?»‘?/’. »,cmConvert1, bfDefault))); C := DeskTop^.ExecView(Dlg); End; end; <**************************>Procedure TDemoDialog.HandleEvent; Begin TDialog.HandleEvent(Event); if Event.What = evCommand then begin Case Event.Command of cmConvert1: Begin pisk1; port[$3fb]:=$ff; port[$3f8]:=$0c; port[$3f9]:=$00; port[$3fb]:=$03; port[$3f9]:=$00; cp_01:=00; ss_01:=0; ss_02:=0; ss_03:=0; ss_04:=0; ss_05:=0; ss_06:=0; ss_07:=0; ss_08:=0; ss_09:=0; ss_10:=0; ss_11:=0; ss_12:=0; ss_13:=0; ss_14:=0; ss_15:=0; ss_16:=0; ss_17:=0; ss_18:=0; ss_19:=0; ss_20:=0; ss_21:=0; ss_22:=0; ss_23:=0; ss_24:=0; ss_25:=0; ss_26:=0; ss_27:=0; ss_28:=0; ss_29:=0; ss_30:=0; ss_31:=0; ss_32:=0; ss_33:=0; ss_34:=0; ss_35:=0; ss_36:=0; ss_37:=0; ss_38:=0; ss_39:=0; ss_40:=0; ss_41:=0; ss_42:=0; ss_43:=0; ss_44:=0; ss_45:=0; ss_46:=0; ss_47:=0; ss_48:=0; ss_49:=0; ss_50:=0; ss_51:=0; ss_52:=0; ss_53:=0; ss_54:=0; ss_55:=0; ss_56:=0; ss_57:=0; ss_58:=0; ss_59:=0; ss_60:=0; aa01:= ‘ ‘; POutput00^.SetData(aa01); POutput01^.SetData(aa01); POutput02^.SetData(aa01); POutput03^.SetData(aa01); POutput04^.SetData(aa01); POutput05^.SetData(aa01); POutput06^.SetData(aa01); POutput07^.SetData(aa01); POutput08^.SetData(aa01); < POutput09^.SetData(aa01); POutput10^.SetData(aa01); POutput11^.SetData(aa01); POutput12^.SetData(aa01); POutput13^.SetData(aa01); POutput14^.SetData(aa01); >POutput15^.SetData(aa01); POutput16^.SetData(aa01); POutput17^.SetData(aa01); rs_01:= $01; delay(2); port[$3f8]:=rs_01; delay(200); aa02:=’ах?я?-а. ‘; POutput17^.SetData(aa02); kol_01:=0; str(kol_01,aa01); aa01:= < ‘вRaa01; POutput16^.SetData(aa01); repeat cp_10:= port[$3f8]; delay(2); if keyPressed then break; str(kol_01,aa01); aa01:=< ‘вR+ aa01; POutput16^.SetData(aa01); aa02:=’R?анп-а. ‘; POutput17^.SetData(aa02); repeat rs_02:= port[$3fD]; rs_02:=rs_02 and $1; if keyPressed then break; until rs_02=$1; ss_01:= port[$3f8]; if ss_01=$55 then begin aa02:=’я?? ss_01:= resul; ss_02:= resul; ss_03:= resul; ss_04:= resul; ss_05:= resul; ss_06:= resul; ss_07:= resul; ss_08:= resul; ss_09:= resul; ss_10:= resul; ss_11:= resul; ss_12:= resul; ss_13:= resul; ss_14:= resul; ss_15:= resul; ss_16:= resul; ss_17:= resul; ss_18:= resul; ss_19:= resul; ss_20:= resul; ss_21:= resul; ss_22:= resul; ss_23:= resul; ss_24:= resul; ss_25:= resul; ss_26:= resul; ss_27:= resul; ss_28:= resul; ss_29:= resul; ss_30:= resul; ss_31:= resul; ss_32:= resul; ss_33:= resul; ss_34:= resul; ss_35:= resul; ss_36:= resul; ss_37:= resul; ss_38:= resul; ss_39:= resul; ss_40:= resul; ss_41:= resul; ss_42:= resul; ss_43:= resul; ss_44:= resul; ss_45:= resul; ss_46:= resul; ss_47:= resul; ss_48:= resul; < ss_49:= resul; ss_50:= resul; > brak :=0; aa02:= ‘ ‘; ss_04:=ss_04 and $1F; sm_01:= (ss_04 div 16)*10+(ss_04 and $0F); str(sm_01,aa03); tt_01:= (ss_05 and $0F)*100+(ss_06 div 16)*10+(ss_06 and $0F); tf_01:=tt_01/10; if tf_01>50 then begin aa02:= ‘* ‘; brak :=1; end; str(tf_01:5:1,aa01); aa01:= aa02 + ‘ч?цч ‘+ aa03+ ‘ [t-пя.1] ‘+aa01+ ‘ -»; <[tr (t-пя.)]>POutput00^.SetData(aa01); aa02:= ‘ ‘; ss_07:=ss_07 and $1F; sm_01:= (ss_07 div 16)*10+(ss_07 and $0F); str(sm_01,aa03); tt_01:= (ss_08 and $0F)*100+(ss_09 div 16)*10+(ss_09 and $0F); tf_01:=tt_01/10; if tf_01>50 then begin aa02:= ‘* ‘; brak :=1; end; str(tf_01:5:1,aa01); aa01:= aa02 +’ч?цч ‘+ aa03+ ‘ [tцд.2] ‘+aa01+ ‘ -»; <[tr (t-пя.)]>POutput01^.SetData(aa01); aa02:= ‘ ‘; ss_10:=ss_10 and $1F; sm_01:= (ss_10 div 16)*10+(ss_10 and $0F); str(sm_01,aa03); tt_01:= (ss_11 and $0F)*100+(ss_12 div 16)*10+(ss_12 and $0F); tf_01:=tt_01/10; if tf_01>50 then begin aa02:= ‘* ‘; brak :=1; end; str(tf_01:5:1,aa01); aa01:= aa02 +’ч?цч ‘+ aa03+ ‘ [t-пя.2] ‘+aa01+ ‘ -»; <[tr (t-пя.)]>POutput02^.SetData(aa01); aa02:= ‘ ‘; ss_13:=ss_13 and $1F; sm_01:= (ss_13 div 16)*10+(ss_13 and $0F); str(sm_01,aa03); tt_01:= (ss_14 and $0F)*100+(ss_15 div 16)*10+(ss_15 and $0F); tf_01:=tt_01/10; str(tf_01:5:1,aa01); if tf_01>50 then begin aa02:= ‘* ‘; brak :=1; end; aa01:= aa02 +’ч?цч ‘+ aa03+ ‘ [tцд.3] ‘+aa01+ ‘ -»; <[MT (^tзв<.)]>POutput03^.SetData(aa01); aa02:= ‘ ‘; ss_16:=ss_16 and $1F; sm_01:= (ss_16 div 16)*10+(ss_16 and $0F); str(sm_01,aa03); tt_01:= (ss_17 and $0F)*100+(ss_18 div 16)*10+(ss_18 and $0F); tf_01:=tt_01; if tf_01>170 then begin aa02:= ‘* ‘; brak :=1; end; str(tf_01:5:1,aa01); aa01:= aa02 +’ч?цч ‘+ aa03+ ‘ [t(1,0)н.я] ‘+aa01+ ‘ -»; <[MT (^tзв<.)]>POutput04^.SetData(aa01); aa02:= ‘ ‘; ss_19:=ss_19 and $1F; sm_01:= (ss_19 div 16)*10+(ss_19 and $0F); str(sm_01,aa03); tt_01:= (ss_20 and $0F)*100+(ss_21 div 16)*10+(ss_21 and $0F); tf_01:=tt_01; if tf_01>120 then begin aa02:= ‘* ‘; brak :=1; end; str(tf_01:5:1,aa01); aa01:= aa02 +’ч?цч ‘+ aa03+ ‘ [t(0,1)н.я] ‘+aa01+ ‘ -»; <[MT (^tзв<.)]>POutput05^.SetData(aa01); aa02:= ‘ ‘; ss_22:=ss_22 and $1F; sm_01:= (ss_22 div 16)*10+(ss_22 and $0F); str(sm_01,aa03); tt_01:= (ss_23 and $0F)*100+(ss_24 div 16)*10+(ss_24 and $0F); tf_01:=tt_01; if tf_01>120 then begin aa02:= ‘* ‘; brak :=1; end; str(tf_01:5:1,aa01); aa01:= aa02 +’ч?цч ‘+ aa03+ ‘ [t(1,0)н.я] ‘+aa01+ ‘ -»; <[tf (tцд.)]>POutput06^.SetData(aa01); aa02:= ‘ ‘; ss_25:=ss_25 and $1F; sm_01:= (ss_25 div 16)*10+(ss_25 and $0F); str(sm_01,aa03); tt_01:= (ss_26 and $0F)*100+(ss_27 div 16)*10+(ss_27 and $0F); tf_01:= tt_01; if tf_01>170 then begin aa02:= ‘* ‘; brak :=1; end; str(tf_01:5:1,aa01); aa01:= aa02 +’ч?цч ‘+ aa03+ ‘ [t(0,1)н.я] ‘+aa01+ ‘ -»; <[tf (tцд.)]>POutput07^.SetData(aa01); aa02:= ‘ ‘; ss_28:=ss_28 and $1F; sm_01:= (ss_28 div 16)*10+(ss_28 and $0F); str(sm_01,aa03); tt_01:= (ss_29 and $0F)*100+(ss_30 div 16)*10+(ss_30 and $0F); tf_01:= tt_01/10; if tf_01>120 then begin aa02:= ‘* ‘; brak :=1; end; str(tf_01:5:1,aa01); aa01:= aa02 +’ч?цч ‘+ aa03+ ‘ [tцд.1] ‘+aa01+ ‘ -»; <[ton (tзв<.)]>POutput08^.SetData(aa01); if brak =1 then aa01 :=’ ***** . ***** ‘; if brak =0 then aa01 :=’—— ??»:? ——‘ ; POutput15^.SetData(aa01); end else aa02:=’цжяRц’; POutput16^.SetData(aa02); until cp_01=1; pisk; end; cmConvert2: Begin pisk1; end; cmConvert3: Begin pisk1; end; <*******************************************>end; end; end; Var MyApp: TMyApp; Begin MyApp.Init; MyApp.Run; MyApp.Done; end.
Источник: labviewportal.org