PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Помогите изменить программу!!


Помогите изменить программу!!

Сообщений 1 страница 9 из 9

1

Всё мне это нужно чтобы подключить аккумулятор к мини пк и сделать переносным...

Это вольтметр usb и в программе надо выбрать диапазон сначала, а потом поялвляются данные..

Так вот нужно сделать:

1) так чтобы кнопка с диапазоном 20 нажималась автоматически или кнопки вообще не было, но команда передавалась на устройство
2) программа подсчитывала и выводила в окне не вольты а проценты оставшегося заряда 0%-7,5В  100%-12,6В
3) чтобы программа сворачивалась в трей и там был значек с батарейкой или с цифорками (проценты заряда), или всё сразу
4) выскакивало предупреждение о малом остатке заряда, как на ноутбуке короче..

ПРОШУ ПОМОЩИ ПОЖАЛУЙСТА...очень для проекта нужно, но я не умею проги писать

Код:
#USB_PID=$EF01
#USB_VID=$AAAC


Declare FindDevice_Timer()
Declare SendDevice()
Dim OutBytes.c(8)
Global R_DeviceHandle, W_DeviceHandle
Global FontID1
FontID1 = LoadFont(1, "Times New Roman", 36)

OpenWindow(0, 497, 191, 565, 404, "USB Вольтметр", #PB_Window_MinimizeGadget | #PB_Window_SizeGadget  )
      ButtonGadget(10, 350, 40, 140, 100, "10")
      ButtonGadget(20, 350, 160, 140, 100, "20")
      ButtonGadget(30, 350, 280, 140, 100, "200")
      StringGadget(40, 40, 40, 100, 100, "", #PB_String_ReadOnly)
      SetGadgetFont(40,FontID(1))
      StringGadget(50, 40, 160, 100, 100, "", #PB_String_ReadOnly)
      SetGadgetFont(50,FontID(1))
      TextGadget(60,280,10,100,30,"Устройство не подключено")
   
      AddWindowTimer(0, 1, 200)  
     

Procedure FindDevice_Timer()
     
;Shared DeviceHandle
  
Static Old_Test
Test=HID_Lib_DeviceTest(#USB_PID, #USB_VID)
  If Test<>Old_Test
   Old_Test=Test 
  If Test 
     HID_Lib_CloseDevice(R_DeviceHandle) : HID_Lib_CloseDevice(W_DeviceHandle)
     W_DeviceHandle=HID_Lib_OpenDevice(#USB_PID, #USB_VID)
     R_DeviceHandle=HID_Lib_OpenDevice(#USB_PID, #USB_VID)
     SetGadgetText(60,"")
  Else
    HID_Lib_CloseDevice(R_DeviceHandle) : HID_Lib_CloseDevice(W_DeviceHandle)
     R_DeviceHandle=0 : W_DeviceHandle=0
     SetGadgetText(60,"Устройство неподключено")
   EndIf
    EndIf
   
EndProcedure

Procedure ReadDevice_Thread(*x)
  
 Dim InBytes.c(9)
 
Repeat
  If R_DeviceHandle
    
    HID_Lib_ReadDevice(R_DeviceHandle, @InBytes(), 9) 
        
       If  InBytes(1)=1
         SetGadgetText(40,Str( InBytes(2)))
       EndIf
       If  InBytes(1)=2
         SetGadgetText(50,Str( InBytes(2)))
         
       EndIf
    EndIf
    
   Delay(20) 
 ForEver
EndProcedure

Procedure SendDevice()
 
  Shared OutBytes()
  
  If W_DeviceHandle
       
  HID_Lib_WriteDevice(W_DeviceHandle, @OutBytes(), 9) 
 
  
EndIf
EndProcedure



 
   
CreateThread(@ReadDevice_Thread(),0)


Repeat
  
  
  Event=#PB_Event_Timer
       If EventTimer()
         FindDevice_Timer()
       EndIf
       
       
  Event=#PB_Event_Gadget
    Select EventGadget()
       Case 10 
          SetGadgetText(50,"10")
          OutBytes(1) = 3
          OutBytes(2) = 10
          SendDevice()
        Case 20
          SetGadgetText(50,"20")
          OutBytes(1) = 3
          OutBytes(2) = 20
          SendDevice()
        Case 30
          SetGadgetText(50,"200")
          OutBytes(1) = 3
          OutBytes(2) = 200
          SendDevice()
      EndSelect
       
      
  Event=WaitWindowEvent()
Until Event=#PB_Event_CloseWindow

0

2

http://bascom.at.ua/publ/quot_usb_rozet … a/1-1-0-77

0

3

Пётр написал(а):

http://bascom.at.ua/publ/quot_usb_rozet … a/1-1-0-77

это в совсем не то, у меня же на мини пк нет аккумулятора, а это программа , как я понял считывает показания с аккумулятора....
А мне надо сделать этот самый аккум, я же всё подробно описал....
  %-)

0

4

Pavel906 написал(а):

чтобы кнопка с диапазоном 20 нажималась автоматически

При каких условиях, или периодически, тогда используй таймер.

Pavel906 написал(а):

программа подсчитывала и выводила в окне не вольты а проценты оставшегося заряда  0%-7,5В  100%-12,6В

Набросал по быстрому.

Код:
x.f=10.5
Debug ((x-7.5)/(12.6-7.5))*100
Pavel906 написал(а):

но я не умею проги писать

Пойми, если написать все за тебя, то это уже платно....

Кстати, USB девайс собрал и отладил?

0

5

Пётр написал(а):

Кстати, USB девайс собрал и отладил?

Да само устройство и программа работают отлично.

Буду пытаться что нибудь делать...

0

6

вопрос, так можно????

Код:
x.f=InBytes(2)

если нет, то как

0

7

Можно.
Но результат может быть не таким, какой ожидается.

0

8

Пока так...

Код:
#USB_PID=$EF01
#USB_VID=$AAAC

Declare FindDevice_Timer()
Declare SendDevice()
Dim OutBytes.c(8)
Global R_DeviceHandle, W_DeviceHandle
Global FontID1
FontID1 = LoadFont(1, "Times New Roman", 36)

OpenWindow(0, 0, 0, 500, 500, "Аккумулятор", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_Invisible)
      ButtonGadget(10, 350, 40, 140, 100, "10")
      ButtonGadget(20, 350, 160, 140, 100, "20")
      ButtonGadget(30, 350, 280, 140, 100, "200")
      StringGadget(40, 40, 40, 100, 100, "", #PB_String_ReadOnly)
      SetGadgetFont(40,FontID(1))
      StringGadget(50, 40, 160, 100, 100, "", #PB_String_ReadOnly)
      SetGadgetFont(50,FontID(1))
      TextGadget(60,280,10,100,30,"Устройство не подключено")
   
      AddWindowTimer(0, 1, 200)  
      
      AddSysTrayIcon(67, WindowID(0), ExtractIcon_(0,ProgramFilename(),0))
      
Procedure FindDevice_Timer()
     
;Shared DeviceHandle
  
Static Old_Test
Test=HID_Lib_DeviceTest(#USB_PID, #USB_VID)
  If Test<>Old_Test
   Old_Test=Test 
  If Test 
     HID_Lib_CloseDevice(R_DeviceHandle) : HID_Lib_CloseDevice(W_DeviceHandle)
     W_DeviceHandle=HID_Lib_OpenDevice(#USB_PID, #USB_VID)
     R_DeviceHandle=HID_Lib_OpenDevice(#USB_PID, #USB_VID)
     SetGadgetText(60,"")
  Else
    HID_Lib_CloseDevice(R_DeviceHandle) : HID_Lib_CloseDevice(W_DeviceHandle)
     R_DeviceHandle=0 : W_DeviceHandle=0
     SetGadgetText(60,"Устройство неподключено")
   EndIf
    EndIf
   
EndProcedure

Procedure ReadDevice_Thread(*x)
  
 Dim InBytes.c(9)
 
 Repeat
   

  If R_DeviceHandle 
    
    HID_Lib_ReadDevice(R_DeviceHandle, @InBytes(), 9) 
    
    If  InBytes(1)=1
      x.f=((InBytes(2)-7.5)/5.1)*100
      SetGadgetText(40,Str(x)+"%")
    EndIf
    If  InBytes(1)=2
      SetGadgetText(50,Str(InBytes(2)))
    EndIf
  EndIf
    
   Delay(20) 
 ForEver
EndProcedure

Procedure SendDevice()
 
  Shared OutBytes()
  
  If W_DeviceHandle
       
  HID_Lib_WriteDevice(W_DeviceHandle, @OutBytes(), 9) 
 
  
EndIf
EndProcedure

CreateThread(@ReadDevice_Thread(),0)


Repeat
  
      Window = EventWindow()
      Gadget = EventGadget()
      
      If Event = #PB_Event_SysTray 
        If EventType() = #PB_EventType_RightClick ; Обработка правой кнопки мышки 
          HideWindow(0, 1); Свернуть
        EndIf 
        If EventType() = #PB_EventType_LeftClick; Обработка левой кнопки мышки
          HideWindow(0, 0); Развернуть
          SetWindowState(0, #PB_Window_Normal) 
        EndIf
      EndIf
      
       Event=#PB_Event_Timer
       If EventTimer()
         FindDevice_Timer()
       EndIf       
       
       Event=#PB_Event_Gadget
       Select EventGadget()
       Case 10 
          SetGadgetText(50,"10")
          OutBytes(1) = 3
          OutBytes(2) = 10
          SendDevice()
        Case 20
          SetGadgetText(50,"20")
          OutBytes(1) = 3
          OutBytes(2) = 20
          SendDevice()
        Case 30
          SetGadgetText(50,"200")
          OutBytes(1) = 3
          OutBytes(2) = 200
          SendDevice()
      EndSelect
       
      
      Event=WaitWindowEvent()
      
Until Event=#PB_Event_CloseWindow

Сейчас буду искать как сообщение выводить..

0

9

В настройках компилятора (есть такой пункт в меню "Компилятор") не забыли отметить "Создать приложение с безопасным потоком"? Это необходимо, поскольку в программе имеется один дополнительный поток.
Это следует сделать при открытом исходнике проги, поскольку данная настройка в нем же и хранится.

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Помогите изменить программу!!