Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 7400|回復: 25

Roboard 的 GPIO for .NET

[複製鏈接]
發表於 2010-7-1 09:43:18 | 顯示全部樓層 |閱讀模式
請問一下在vb .net中
gpio要怎麼使用,需要初始化嗎

RoBoIO_DotNet.RoBoIO.io_outpb
RoBoIO_DotNet.RoBoIO.io_outpdw
RoBoIO_DotNet.RoBoIO.io_outpw
RoBoIO_DotNet.RoBoIO.io_InUse
RoBoIO_DotNet.RoBoIO.io_CpuID
RoBoIO_DotNet.RoBoIO.io_inpb()
RoBoIO_DotNet.RoBoIO.io_inpdw
RoBoIO_DotNet.RoBoIO.io_inpw
RoBoIO_DotNet.RoBoIO.io_close()

這些方法有沒有文件可以看?或是直接跟我說怎麼用?謝謝
發表於 2010-7-1 20:27:05 | 顯示全部樓層
是的

要經過初始化, 流程如下

1. 先呼叫RoBoIO.rcservo_SetRBVer(RoBoIO.RB_100);

2. RoBoIO.rcservo_Initialize(RoBoIO.RCSERVO_USECHANNEL0 +
                                       RoBoIO.RCSERVO_USECHANNEL1);

3. 上面用到的channel會轉換成PWM channel, 其他的是GPIO(也就是
     channel 2 ~ 23都是GPIO), 然後就可以用
     rcservo_Outp(channel , 0/1)和rcservo_Inp(channel) 函數了

例如 : rcservo_Outp(2, 1) -> channel 2 為high
         rcservo_Outp(2, 0) -> channel 2 為low
         rcservo_INp(3) -> 讀取channel 3是 high 或是 low

最後記得rcservo_Close 就OK了
 樓主| 發表於 2010-7-1 21:45:58 | 顯示全部樓層
我的做法是
在vb.net將RoBoIO_DotNet.dll加入參考
然後將WinIo.dll,WinIo.sys,WINIO.VXD
copy到 roboard 上的 c:\windows\system32\
然後在程式裡寫
        RoBoIO.roboio_SetRBVer(RoBoIO_DotNet.RoBoIO.RB_100)
        RoBoIO.rcservo_Initialize(RoBoIO.RCSERVO_USECHANNEL0)

然後就執行時,就會失敗,不知為何?
發表於 2010-7-1 22:47:45 | 顯示全部樓層
失敗的訊息為何呢?!
我執行是可以的
但是我DLL都放到程式的同一目錄
 樓主| 發表於 2010-7-1 23:38:14 | 顯示全部樓層
失敗訊息是看不到,就出現一個視窗說錯誤
也沒說是什麼錯誤,但是我只要mark有關的
roboard程式碼,就可以執行~~
發表於 2010-7-1 23:53:20 | 顯示全部樓層
咦?
忽然發現
你的RoBoIO.dll ??
這也要進去喔
發表於 2010-7-2 13:14:29 | 顯示全部樓層
Hi

請問你的RoBoard上有安裝.NET FrameWork 2.0 和
VC2008 SP1 Redistributable Package 嗎?
發表於 2010-7-2 17:42:24 | 顯示全部樓層
我裝.NET FrameWork 2.0 就能跑囉
我是跑XPE的環境
 樓主| 發表於 2010-7-3 17:45:09 | 顯示全部樓層
後來可以了,不過,好像執行後high ,low好像都沒有發生
之前是在vc++是可以用,現在.net好像就不行。
真奇怪
 樓主| 發表於 2010-7-4 21:40:04 | 顯示全部樓層
我在.net 寫了這樣的code,發現,初始化就失敗了,請問有大大可以指點嗎?
謝謝。
        RoBoIO.roboio_SetRBVer(RoBoIO.RB_100)
        RoBoIO.rcservo_SetServo(0, RoBoIO.RCSERVO_SERVO_DEFAULT_NOFB)

        If RoBoIO.rcservo_Initialize(RoBoIO.RCSERVO_USECHANNEL0) = False Then
            Me.Label1.Text = "rcservo_Initialize failed!!!"
        Else
            Me.Label1.Text = "rcservo_Initialize succeesed!!!"
        End If
        RoBoIO.rcservo_EnterPWMMode()
發表於 2010-7-4 22:41:14 | 顯示全部樓層
失敗?
前兩行能執行應該roboard的函式庫都有正確加入了
是說If RoBoIO.rcservo_Initialize(RoBoIO.RCSERVO_USECHANNEL0) = False  
這個條件是false 嗎?

你給roboard的電壓是多少呢?
這好奇怪
前面的初始化真的就是這幾行而已居然失敗
你要不要看能不能找機會去參加安東尼辦的免費課程活動,實際去那邊測試看看呢
因為前面這部分我自己測試是都會初始化成功
不太曉得你會失敗的原因在哪裡

而且測試的時候馬達不一定需要裝
我測試中隨便把馬達插插拔拔也是都可以正常動喔
目前測試過的電壓範圍從5~24V都有測試過(24V我是接祥儀的馬達來測的,轉很快喔, 哈哈)
不過5V已經接近roboard極限低壓, 馬達只能插一顆, 而且要單獨供電
不然一動馬達, roboard會直接重開
 樓主| 發表於 2010-7-5 09:39:01 | 顯示全部樓層
我是接7.4v的電池,之前用vc++是可以動的。
現在移到.net就不行,不知道我還少什麼東西? 是不是 winio之類的

對了,m大你的直接接馬達成功了嗎?我覺得用com去送命令有點慢,所以也想改成直接接pwm
發表於 2010-7-5 16:25:12 | 顯示全部樓層
我之前不是在哪篇文章裡面就說過我已經可以隨便動嗎?!
只是用6V電源會不穩而已, 因為很接近roboard極限
馬達一動, 電壓會被拉下來導致roboard重開或是不穩

現在接11.8V, +祥儀的馬達
隨便動都很OK
24軸一起上...然後roboard會很燙, 哈哈, 只好加小風扇幫忙散熱^^
反正操壞了有教授會幫忙出維修費, 就勇敢的操下去了

初始化的動作就是你不會跑的那三行而已
所以我才說你該想辦法去參加DMP的研習營
看看到底是怎麼回事喔
roboard控制PWM真的是神奇的力量的展現啊, 又快又準
而且程式又簡單到不可思議咧
發表於 2010-7-5 22:44:37 | 顯示全部樓層
Initialize 會 false 那邊, 你可以試著用 roboio_GetErrMsg()
來看看 false 的原因...
 樓主| 發表於 2010-7-5 23:37:16 | 顯示全部樓層
本帖最後由 miaoichi 於 2010-7-5 23:42 編輯

他寫說
I/O library fails to initialize
發表於 2010-7-6 00:14:16 | 顯示全部樓層
你是不是把接線的照片直接寄給我看看比較快啊
 樓主| 發表於 2010-7-6 08:51:27 | 顯示全部樓層
本帖最後由 miaoichi 於 2010-7-6 09:38 編輯

找到原因了~~~
已經可以動了。
謝謝m大與a大的協助

不過發現

RoBoIO.rcservo_Outp(RoBoIO.RCSERVO_USECHANNEL15, 1) 不等於RoBoIO.rcservo_Outp(16, 1)
發表於 2010-7-6 12:03:34 | 顯示全部樓層
miaoichi 大大,
什麼樣的原因, 分享一下,
讓我也學習學習 ~"~
 樓主| 發表於 2010-7-6 13:59:29 | 顯示全部樓層
本帖最後由 miaoichi 於 2010-7-6 14:01 編輯

如a大所說的,可以看失敗的原因
-----------------------------------------------------------------------------
Initialize 會 false 那邊, 你可以試著用 roboio_GetErrMsg()
來看看 false 的原因...
-----------------------------------------------------------------------------
後來才發現原來用.net與vc++不同處
就是在vb.net將RoBoIO_DotNet.dll加入參考後
將WinIo.dll,WinIo.sys,WINIO.VXD,RoBoIo.dll copy到同一目錄下,就可以運作
而RoBoIO.rcservo_Outp(RoBoIO.RCSERVO_USECHANNEL15, 1) 不等於RoBoIO.rcservo_Outp(16, 1)
也是因為 資料type(bit wise的issue)的不同 ,所以在vc++ 用RCSERVO_USECHANNEL15這樣的方式是
可以操作的,但是.net一定要用0~23的方式來指定。

以上是我個人的心得,希望後來的人就不會再有這樣的問題了。
發表於 2010-7-6 14:10:30 | 顯示全部樓層
原來是這樣阿, 感謝分享~
你現在要先控制什麼呢?
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2022-8-12 17:07 , Processed in 0.234787 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表