Robofun 機器人論壇

標題: Roboard 的 GPIO for .NET [打印本頁]

作者: miaoichi    時間: 2010-7-1 09:43
標題: Roboard 的 GPIO for .NET
請問一下在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()

這些方法有沒有文件可以看?或是直接跟我說怎麼用?謝謝
作者: acen2008    時間: 2010-7-1 20:27
是的

要經過初始化, 流程如下

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了
作者: miaoichi    時間: 2010-7-1 21:45
我的做法是
在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)

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

請問你的RoBoard上有安裝.NET FrameWork 2.0 和
VC2008 SP1 Redistributable Package 嗎?
作者: mzw2008    時間: 2010-7-2 17:42
我裝.NET FrameWork 2.0 就能跑囉
我是跑XPE的環境
作者: miaoichi    時間: 2010-7-3 17:45
後來可以了,不過,好像執行後high ,low好像都沒有發生
之前是在vc++是可以用,現在.net好像就不行。
真奇怪
作者: miaoichi    時間: 2010-7-4 21:40
我在.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()
作者: mzw2008    時間: 2010-7-4 22:41
失敗?
前兩行能執行應該roboard的函式庫都有正確加入了
是說If RoBoIO.rcservo_Initialize(RoBoIO.RCSERVO_USECHANNEL0) = False  
這個條件是false 嗎?

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

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

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

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

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

他寫說
I/O library fails to initialize
作者: mzw2008    時間: 2010-7-6 00:14
你是不是把接線的照片直接寄給我看看比較快啊
作者: miaoichi    時間: 2010-7-6 08:51
本帖最後由 miaoichi 於 2010-7-6 09:38 編輯

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

不過發現

RoBoIO.rcservo_Outp(RoBoIO.RCSERVO_USECHANNEL15, 1) 不等於RoBoIO.rcservo_Outp(16, 1)
作者: tommylin    時間: 2010-7-6 12:03
miaoichi 大大,
什麼樣的原因, 分享一下,
讓我也學習學習 ~"~
作者: miaoichi    時間: 2010-7-6 13:59
本帖最後由 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的方式來指定。

以上是我個人的心得,希望後來的人就不會再有這樣的問題了。
作者: tommylin    時間: 2010-7-6 14:10
原來是這樣阿, 感謝分享~
你現在要先控制什麼呢?
作者: miaoichi    時間: 2010-7-6 15:30
六足呀,因為xpe開機要一段時間,所以用led燈來表示開機的進度
這樣不接lcd就可以知道開好機了沒。

最後就可以直接控制我的六足了。
作者: tommylin    時間: 2010-7-6 15:54
miaoichi 大大~
請問你六足的 servo 已經選好了嗎,
是用哪個牌子型號?
作者: miaoichi    時間: 2010-7-6 16:53
選好了,祥儀的
作者: mzw2008    時間: 2010-7-6 22:31
哈哈
這些錯誤都是之前的文章有講過喔
看來真的要仔細看
而且我明明就有說要COPY進去同一目錄啊

不過使用GPIO控制燈號來看狀況真是好主意耶
我是用馬達的動作來看的, 開好機以後頭部搖兩下, 手比出超人的姿勢
哈哈
作者: miaoichi    時間: 2010-7-6 22:33
使用GPIO控制燈號來看狀況
是可以知道你開到什麼狀況
不然你也不知死在哪裡~~~
做嵌入式產品久了就知道
作者: mzw2008    時間: 2010-7-6 22:37
燈號真的是一定要的

不過我更想要知道如何控制roboard左下角那兩顆現成的LED燈
這樣就不用佔用一個PWM了哩




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2