[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 2
  • «
  • 1
  • 2
PureBasic. Работа с COM портом
Aleks8383Дата: Вторник, 28.05.2013, 13:32 | Сообщение # 51
Группа: Проверенные
Сообщений: 104

Статус: Offline
Вот спасибо самое то,я то просто хотел чтобы полоска бегала,что то на подобии как тут,просто не как не разберусь как с графикой работать.

 
ПетрДата: Вторник, 28.05.2013, 16:42 | Сообщение # 52
Группа: Проверенные
Сообщений: 47

Статус: Offline
В простейшем случае, можно обойтись без работы с графикой. 
Код
If OpenWindow(0, 0, 0, 400, 50, "Timer Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   ProgressBarGadget(0, 10, 10, 380, 20, 0, 100)
   AddWindowTimer(0, 123, 10)
    
   Value = 0 : State = 0
   Repeat
     Event = WaitWindowEvent()
      
     If Event = #PB_Event_Timer And EventTimer() = 123
       If State = 0
         Value + 4
         If Value>100 : State=1 : EndIf
       Else
         Value - 4
         If Value<0 : State=0 : EndIf
       EndIf
       SetGadgetState(0, Value)
     EndIf     
      
   Until Event = #PB_Event_CloseWindow
EndIf


 
Aleks8383Дата: Вторник, 28.05.2013, 17:01 | Сообщение # 53
Группа: Проверенные
Сообщений: 104

Статус: Offline
Спасибо,возьму на заметку.Я как раз и пытался из  ProgressBar сделать,но не получилось.Но "спидометр" мне больше понравился применю его.

 
Aleks8383Дата: Среда, 29.05.2013, 10:28 | Сообщение # 54
Группа: Проверенные
Сообщений: 104

Статус: Offline
Пётр,а вы не пробовали этот индикатор(стрелочный) куда небудь применять??У меня не хочет работать,выдаёт ошибку" строка1:структура отсутствует:pbi" версия последняя стоит 5.11 библиотеки тоже вроде стоят.В чём может быть проблема??

 
ПетрДата: Среда, 29.05.2013, 12:51 | Сообщение # 55
Группа: Проверенные
Сообщений: 47

Статус: Offline
Цитата (Aleks8383)
не пробовали этот индикатор(стрелочный) куда небудь применять
Пока нет.

Цитата (Aleks8383)
выдаёт ошибку" строка1:структура отсутствует:pbi"
Выложите содержимое строки. В ней что-то не так.

Но судя по всему, производится попытка подключить файл с исходником. Это нужно делать следующим образом:
Код
IncludeFile "MeterGadget.pbi"
где MeterGadget.pbi это файл с исходником стрелочного индикатора, находящийся в той же папке, где и основой исходник.


 
Aleks8383Дата: Среда, 29.05.2013, 14:20 | Сообщение # 56
Группа: Проверенные
Сообщений: 104

Статус: Offline
Всё заработало, всё было очень просто.Когда копировал код,одну ковычку не скопировал и из за этого выдовало ошибку.

 
foxitДата: Воскресенье, 09.06.2013, 10:55 | Сообщение # 57
Группа: Пользователи
Сообщений: 5

Статус: Offline
Здравствуйте
Заинтересовался программой PUREBASIC
Хочу с ее помощью принимать и обрабатывать сообщения с GPS приемника через UART.

Помогите начать.


 
ПетрДата: Воскресенье, 09.06.2013, 22:23 | Сообщение # 58
Группа: Проверенные
Сообщений: 47

Статус: Offline
То есть приемник будет подключен к COM порту компа не используя микроконтроллер?
Тогда нужно принимать данные из приемника (функции) и обрабатывать их.
Обычно приемники выдают информацию в текстовом виде, поэтому нужно освоить работу со строками.


 
foxitДата: Понедельник, 10.06.2013, 00:32 | Сообщение # 59
Группа: Пользователи
Сообщений: 5

Статус: Offline
Да, приемник будет подключен к Com порту ПК.
А можете помочь примером?


 
ПетрДата: Понедельник, 10.06.2013, 01:16 | Сообщение # 60
Группа: Проверенные
Сообщений: 47

Статус: Offline
Чтобы сделать пример, нужно иметь GPS приемник....

 
foxitДата: Понедельник, 10.06.2013, 11:55 | Сообщение # 61
Группа: Пользователи
Сообщений: 5

Статус: Offline
Вместо приемника можно использовать эмулятор Fidelity Satellite Emulator  http://www.rampro.ru/?page_id=570
Для эмуляции COM портов пригодится  Virtual Serial Ports Emulator http://www.addictivetips.com/windows....mulator




Сообщение отредактировал foxit - Понедельник, 10.06.2013, 11:55
 
BoyKotДата: Понедельник, 09.09.2013, 12:41 | Сообщение # 62
Группа: Пользователи
Сообщений: 2

Статус: Offline
PureBasic ругается на строку ComWrite(SerialPortID(#COM_Port),@send_data,1) из примера на сайте. Чтобы ее использовать нужна лицензия?

 
ПетрДата: Понедельник, 09.09.2013, 13:29 | Сообщение # 63
Группа: Проверенные
Сообщений: 47

Статус: Offline
Цитата (BoyKot)
PureBasic ругается на строку ComWrite(SerialPortID(#COM_Port),@send_data,1) из примера на сайте.
Нет лицензия для этого не нужна. Это функция одной из дополнительных библиотек, но она использовалась раньше, когда в PB не было нативной поддержки порта. Сейчас в ней нет необходимости.
В текущих версиях, имеются встроенные функции работы с портом. http://purebasic.ru/manual.php?id=1148&lng=rus

Судя по строке кода, имеется в виду эта статья?
Посмотрите 9 и 10 комментарий к статье.

Замените проблемную строку на эту.
Код
WriteSerialPortData(#COM_Port, @send_data, 1)


 
BoyKotДата: Понедельник, 09.09.2013, 14:21 | Сообщение # 64
Группа: Пользователи
Сообщений: 2

Статус: Offline
Помогло. Спасибо огромное!

 
ПетрДата: Пятница, 20.12.2013, 01:52 | Сообщение # 65
Группа: Проверенные
Сообщений: 47

Статус: Offline
Еще один пример работы с COM портом - градусник на DS18B20.
Схема устройства, исходники и скомпилированная программа (для Windows и Linux) в архиве.
Для компиляции нужна версия PureBasic 5.20 и выше. Подойдет демо версия.
Прикрепления: DS18B20_Thermo_.zip (80.9 Kb)




Сообщение отредактировал Петр - Пятница, 20.12.2013, 01:57
 
AlekSДата: Пятница, 20.12.2013, 23:38 | Сообщение # 66
Группа: Проверенные
Сообщений: 247

Статус: Offline
Петр, спасибо интересно.

 
DzhylliДата: Четверг, 28.04.2016, 10:44 | Сообщение # 67
Группа: Пользователи
Сообщений: 1

Статус: Offline
Доброго времени суток. Нужна помощь. Задача такая: необходимо принять данные по нажатию кнопки и в зависимости от нажатой кнопки вывести данные в соответствующие поля. Далее нужно записать принятые данные в файл. Проблема: при нажатии кнопки информация выводится во все три поля, если вставляю в принятие данных условие (If i= 3, 4, 6) и по этому условию вписывать данные в нужное поле, то система совсем ничего не принимает. Задача вторая, записать данные в файл. В данной проге попробовала сделать только при нажатии времени, файл создается, но данные в него не записываются( 
Подскажите где ошибка.   

#Com_Port=7
If IsSerialPort (#Com_port)
  CloseSerialPort (#Com_port)
EndIf
If OpenSerialPort(#Com_port, "COM7", 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
    Debug "Порт открыт успешно"
  Else
    Debug "Порт не обнаружен"
  EndIf
 
  Procedure InData() ; Прием данных. 
    Protected InBytes 
      
    If IsSerialPort(#COM_Port)   ; С таким ИД порт открыт. 
      InBytes = AvailableSerialPortInput(#COM_Port) 
      If InBytes>0 ; Получены данные. 
       
        Protected Dim InBuffer.a(InBytes), RealInBytes 
          
        RealInBytes = ReadSerialPortData(#COM_Port, @InBuffer(), InBytes) 
        If RealInBytes>0  
     ;    If i=3 
           AddGadgetItem(3, -1, PeekS(@InBuffer(), RealInBytes, #PB_Ascii)) 
      ;      EndIf
         
       ;   If i=4 
          AddGadgetItem(4, -1, PeekS(@InBuffer(), RealInBytes, #PB_Ascii)) 
        ;EndIf
        ;  If i=6 
          AddGadgetItem(6, -1, PeekS(@InBuffer(), RealInBytes, #PB_Ascii)) 
      ;
      ;
     ; EndIf
        EndIf 
          
      EndIf 
    EndIf 
  EndProcedure 
  
  Procedure ComOut (Sent_data.s)
    If IsSerialPort(#Com_port)
      ;ComWrite (SerialPortID(#Com_port),@Sent_data,1)
     WriteSerialPortData(#Com_Port,@Sent_data,1)  
    Else
      ;MessageRequester("Ошибка!Порт не доступен!",16)
       Debug "Куда данные посылать?"
    EndIf
  EndProcedure
  
  ;http://www.purebasic.com/documentation/file/openfile.html

OpenWindow(0,0,0,700,500,"Тестовая программа",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered); открываем окно

ButtonGadget(1,50,120,100,35,"Время ", #PB_Button_Default); выводим кнопку
EditorGadget(3, 50, 160, 330, 50); место для внесения текста к времени
ButtonGadget(2,50,10,170,35,"температура за бортом", #PB_Button_Default); выводим кнопку
EditorGadget(4, 50, 50, 330, 50); место для внесения текста к датчикам

ButtonGadget(5,50,230,170,35,"Давление", #PB_Button_Default); выводим кнопку
EditorGadget(6, 50, 270, 330, 50); место для внесения текста к датчикам

Repeat
  Event=WaitWindowEvent() ; Получаем идентификатор события. 
   Gadget=EventGadget() ; Узнаём идентификатор активного гаджета. 
  If Gadget=1 ; Условие будет выполнено при щелчке по кнопке. 
    i=3
   ComOut("M")
   InData()

   
   If OpenFile(0,"Данные датчиков.xls")
     WriteByte(0, RealInBytes)
     CloseFile(0)
     EndIf

    EndIf
   If Gadget=2; условие для кнопки температура 
     i=4
     ComOut("T")
     InData() 
   ;   If OpenFile(1,"шшш.txt")
   ;  WriteString(1, "Температура"+ RealInBytes$)
   ;  CloseFile(1)
   ;  EndIf
     ;StringGadget(3,70,70,150,35,"",#PB_String_ReadOnly)
     ;EditorGadget(3, 10, 100, 330, 50); место для внесения текста
   EndIf  
  If Gadget=5; условие для кнопки температура 
     i=6
     ComOut("P")
     InData() 
    

EndIf
  Until Event = #PB_Event_CloseWindow ; Прерываем цикл при закрытии окна 
   
  End ;



 
ПетрДата: Вторник, 03.05.2016, 22:07 | Сообщение # 68
Группа: Проверенные
Сообщений: 47

Статус: Offline
Цитата Dzhylli ()
если вставляю в принятие данных условие (If i= 3, 4, 6) и по этому условию вписывать данные в нужное поле, то система совсем ничего не принимает.
В переменную i ничего не записывается и в ней по умолчанию будет 0. Нужно например через аргумент процедуры передать номер гаджета в который следует вывести информацию.

Цитата Dzhylli ()
В данной проге попробовала сделать только при нажатии времени, файл создается, но данные в него не записываются
Они записываются, но в файле будет 0 вместо данных. Переменная RealInBytes локальная и существует только в пределах процедуры. Ее значение можно возвратить как результат.
Код
#Com_Port=7
If IsSerialPort (#Com_port)
  CloseSerialPort (#Com_port)
EndIf
If OpenSerialPort(#Com_port, "COM7", 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
  Debug "Порт открыт успешно"
Else
  Debug "Порт не обнаружен"
EndIf

Procedure InData(Gadget) ; Прием данных.
  Protected InBytes
  
  If IsSerialPort(#COM_Port)   ; С таким ИД порт открыт.
    InBytes = AvailableSerialPortInput(#COM_Port)
    If InBytes>0 ; Получены данные.
      
      Protected Dim InBuffer.a(InBytes), RealInBytes
      
      RealInBytes = ReadSerialPortData(#COM_Port, @InBuffer(), InBytes)
      If RealInBytes>0
        
        AddGadgetItem(Gadget, -1, PeekS(@InBuffer(), RealInBytes, #PB_Ascii))
        
;         ;    If i=3
;         AddGadgetItem(3, -1, PeekS(@InBuffer(), RealInBytes, #PB_Ascii))
;         ;      EndIf
;         
;         ;   If i=4
;         AddGadgetItem(4, -1, PeekS(@InBuffer(), RealInBytes, #PB_Ascii))
;         ;EndIf
;         ;  If i=6
;         AddGadgetItem(6, -1, PeekS(@InBuffer(), RealInBytes, #PB_Ascii))
;         ;
;         ;
;         ; EndIf
      EndIf
      
    EndIf
  EndIf
  
  ProcedureReturn RealInBytes
EndProcedure

Procedure ComOut (Sent_data.s)
  If IsSerialPort(#Com_port)
    ;ComWrite (SerialPortID(#Com_port),@Sent_data,1)
    WriteSerialPortData(#Com_Port,@Sent_data,1)  
  Else
    ;MessageRequester("Ошибка!Порт не доступен!",16)
    Debug "Куда данные посылать?"
  EndIf
EndProcedure

;http://www.purebasic.com/documentation/file/openfile.html

OpenWindow(0,0,0,700,500,"Тестовая программа",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered); открываем окно

ButtonGadget(1,50,120,100,35,"Время ", #PB_Button_Default); выводим кнопку
EditorGadget(3, 50, 160, 330, 50)                         ; место для внесения текста к времени
ButtonGadget(2,50,10,170,35,"температура за бортом", #PB_Button_Default); выводим кнопку
EditorGadget(4, 50, 50, 330, 50)                    ; место для внесения текста к датчикам

ButtonGadget(5,50,230,170,35,"Давление", #PB_Button_Default); выводим кнопку
EditorGadget(6, 50, 270, 330, 50)                           ; место для внесения текста к датчикам

Repeat
  Event=WaitWindowEvent() ; Получаем идентификатор события.
  Gadget=EventGadget()    ; Узнаём идентификатор активного гаджета.
  If Gadget=1             ; Условие будет выполнено при щелчке по кнопке.
    i=3
    ComOut("M")
    RealInBytes = InData(3)
    
    
    If OpenFile(0,"Данные датчиков.xls")
      WriteByte(0, RealInBytes)
      CloseFile(0)
    EndIf
    
  EndIf
  If Gadget=2; условие для кнопки температура
    i=4
    ComOut("T")
    InData(4)
    ;   If OpenFile(1,"шшш.txt")
    ;  WriteString(1, "Температура"+ RealInBytes$)
    ;  CloseFile(1)
    ;  EndIf
    ;StringGadget(3,70,70,150,35,"",#PB_String_ReadOnly)
    ;EditorGadget(3, 10, 100, 330, 50); место для внесения текста
  EndIf  
  If Gadget=5; условие для кнопки температура
    i=6
    ComOut("P")
    InData(6)
    
    
  EndIf
Until Event = #PB_Event_CloseWindow ; Прерываем цикл при закрытии окна

End ;




Сообщение отредактировал Петр - Вторник, 03.05.2016, 22:08
 
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск: