• COSPLAY 3D 建模
  • 3D列印服務
  • #maker+t=market
  • 1
  • 2
  • 3

DIY CNC Machine.Taipei 造訪社團 » IDE

原文網址 石小川
2019-09-15 18:13:06

使用飛行搖桿控制CNC C#版程式範例

這個羅技飛行搖桿本來是用在一個從頭城出發要去一個遙遠地方的大台UAV,看到挑戰國內法令的罰款可能會罰到脫褲子, 所以只能收手不玩了, 天空不能玩了, 就換地上及海上囉, 於是把程式移植到CNC, 運作起來還蠻順手的, 像是 夾娃娃機, 其實不管是CNC軸控、太空船、飛機或機器人, Joystick程式是一樣的。

以前玩Apple-II時曾經用6502組合語言改寫地球保衛戰的電玩, 大意是太空衛星發射雷射光射向入侵地球的飛碟, 但不可以射到底下建築物否則扣分, 這個CNC Demo頗有幾分神似呢, 特別是雷射扳機打開發射時, 感覺還蠻爽的^^

下面是控制搖桿程式庫TJoystick, 分享給有興趣的好友參考一下, 可很容易地加入自已的機台:

因為主程式很長, 所以只列出TJoystick程式庫, 主程式就不po了, 有興趣再私下討論了。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using SharpDX;

using SharpDX.DirectInput;

namespace TJoystick

{

public enum JoyDirectionType

{

Center,

zUp,

zDown,

Up,

Right,

Down,

Left

}

//-------------------------------------------------------------------------

public class Joystick

{

SharpDX.DirectInput.DirectInput dirInput;

SharpDX.DirectInput.DeviceType typeJoystick;

IList<DeviceInstance> Devices;

SharpDX.DirectInput.Joystick curJoystick;

bool bJoystick;

int X, Y;

int RZ;

int Slider;

int POV;

int[] Buttons;

//-----------------------------------------------------------------------

public Joystick()

{

bJoystick = false;

X = 0;

Y = 0;

RZ = 0;

Slider = 0;

POV = -1; //中心點 = -1

Buttons = new int[7];

for(int i=0;i <7; i++)

Buttons[i] = 0;

}

//-----------------------------------------------------------------------

public SharpDX.DirectInput.DeviceInstance FindDevice()

{

SharpDX.DirectInput.DeviceInstance deviceInstance = new DeviceInstance();

deviceInstance.ProductName = "";

deviceInstance.InstanceName = "";

deviceInstance.InstanceGuid = Guid.Empty;

dirInput = new SharpDX.DirectInput.DirectInput();

typeJoystick = SharpDX.DirectInput.DeviceType.Joystick;

Devices = dirInput.GetDevices();

foreach (var device in Devices)

{

if (typeJoystick == device.Type)

{

deviceInstance.ProductName = device.ProductName;

deviceInstance.InstanceName = device.InstanceName;

deviceInstance.InstanceGuid = device.InstanceGuid;

break;

}

}

return deviceInstance;

} //public SharpDX.DirectInput.DeviceInstance Open()

//-----------------------------------------------------------------------

public bool Connect(SharpDX.DirectInput.DeviceInstance deviceInstance)

{

bJoystick = false;

if(deviceInstance.InstanceGuid != Guid.Empty)

{

bJoystick = true;

curJoystick = new SharpDX.DirectInput.Joystick(dirInput, deviceInstance.InstanceGuid);

// Set BufferSize in order to use buffered data.

//curJoystick.Properties.BufferSize = 128;

curJoystick.Acquire();

//curJoystick.Poll();

//curJoystick.GetCurrentState();

//Thread t1 = new Thread(PollThreadFunction);

//t1.IsBackground = true;

//t1.Start();

}

return bJoystick;

}

//-----------------------------------------------------------------------

public bool IsGetJoystick()

{

return bJoystick;

}

//-----------------------------------------------------------------------

public int[] GetJoystickData()

{

int[] data = new int[12];

data[0] = X;

data[1] = Y;

data[2] = RZ;

data[3] = Slider;

data[4] = POV;

for(int i=0; i<7; i++)

data[5 + i] = Buttons[i];

return data;

}

//-----------------------------------------------------------------------

public double NormalizationScale(double a, double b, int mindata, int maxdata)

{

double k=(b-a)/(maxdata - mindata);

return k;

}

//-----------------------------------------------------------------------

public double NormalizationData(double data, double a, double b, int mindata, int maxdata)

{

double k=(b-a)/(maxdata - mindata);

double normdata = a + k * (data - mindata);

if(normdata > b)

normdata = b;

else

if(normdata < a)

normdata = a;

return normdata;

}

//-----------------------------------------------------------------------

public double[] Signal_XY()

{

double[] data = new double[2];

data[0] = X;

data[1] = Y;

data[0] = NormalizationData(data[0], -128, 127, 69, 164);

data[1] = NormalizationData(data[1], -128, 127, 71, 201);

return data;

}

//-----------------------------------------------------------------------

public double Signal_RZ()

{

double rz = NormalizationData(RZ, -128, 127, 80, 216);

return rz;

}

//-----------------------------------------------------------------------

public double Signal_Slider()

{

double slider = NormalizationData(Slider, 0, 10, 45, 180);

return slider;

}

//-----------------------------------------------------------------------

public int[] Signal_POV()

{

int[] data = new int[2];

if(POV == -1) //Center

{

data[0] = -1;

data[1] = 0;

}

else

if(POV == 0) //Up

{

data[0] = 0;

data[1] = 0;

}

else

if(POV == 35) //Right

{

data[0] = 1;

data[1] = 0;

}

else

if(POV == 70) //Down

{

data[0] = 2;

data[1] = 0;

}

else

if(POV == 105) //Down

{

data[0] = 3;

data[1] = 0;

}

return data;

}

//-----------------------------------------------------------------------

public bool Signal_Button0()

{

if(Buttons[0] == 1)

return true;

return false;

}

//-----------------------------------------------------------------------

public void Poll()

{

try

{

//curJoystick.Acquire();

// poll the joystick

curJoystick.Poll();

// update the joystick state field

var joys = curJoystick.GetCurrentState();

X = joys.X >> 8; // X/256

Y = joys.Y >> 8; // Y/256

RZ = joys.RotationZ >> 8;

Slider = joys.Sliders[0] >> 8;

POV = joys.PointOfViewControllers[0] >> 8;

for(int i=0; i<7; i++)

Buttons[i] = Convert.ToInt32(joys.Buttons[i]);

}

catch (SystemException)

{

}

} //public void Poll()

//-----------------------------------------------------------------------

public void PollThreadFunction()

{

while(true)

{

Poll();

} //while(true)

} //public void JoystickThreadFunction()

} //public class TJoystick

} //namespace TJoystick

黃俊凱
2019-09-15 19:02:51

水喔,這個蠻實用

廖元佑
2019-09-15 19:39:01

感謝分享

Don Si
2019-09-16 13:25:58

感謝大大分享


原文網址 Per Willy Haarberg
2017-08-04 03:06:03

Build video 2 :)

翻譯年糕


原文網址 Ashraf Riad
2017-07-03 07:49:35

A new video I just made about making the tool holder of my DIY CNC lathe

翻譯年糕


原文網址 張嘉傑
2017-06-23 21:45:26

初代機組裝前的合照
6/27 增加進度照片
6/29 補一下三軸馬達動作試機影片
https://www.facebook.com/chiajay/videos/1565092140169914/

尤宏耀
2017-06-23 21:47:49

厲害了!

張嘉傑
2017-06-23 22:01:55

Jacky Yu 大哥你比較厲害,我的工件都是委外處理的,您都是自製的,

Eric Lin
2017-06-23 22:07:59

造一台多少?

張嘉傑
2017-06-23 22:08:25

Eric Lin 還沒統計,等都出來我再上來回一下

Eric Lin
2017-06-23 22:09:51

Peter Chen
2017-06-23 22:57:57

機架材質是?

張嘉傑
2017-06-23 23:30:53

Peter Chen 鋁合金

張嘉傑
2017-06-23 23:35:46

底座組裝完成,

Yo Yu Chen
2017-06-24 17:37:44

請問你這樣機架組裝費用花多少?

張嘉傑
2017-06-25 22:30:23

沒有負載測試塊,只好讓女兒上去座搖搖車了

Eric Lin
2017-06-25 22:33:05

也想買一台……

張嘉傑
2017-06-26 22:37:52

進度報告

張嘉傑
2017-06-26 22:38:19

Eric Lin
2017-06-26 22:55:10

陳炯煒
2017-06-27 20:16:55

請問是伺服馬達嗎?還是步進馬達

張嘉傑
2017-06-27 21:05:10

陳炯煒 步進馬達

David Chuang
2017-06-28 23:24:54

多少錢啊

張嘉傑
2017-07-07 09:43:52

這是大家期待的價格資料,這個價格不含加工費...因為加工廠老板還沒算給我......不過基本的1.2萬可能要,真的是一個坑ㄚ....

曾豪仁
2017-09-19 09:00:00

完成度很高的机机,cnc用什樣的?


原文網址 David Chuang
2017-05-13 15:44:43

哪個支援五軸???

CNC

bCNC - Open-Source CNC host with great preview and other operations. Set machine type to smoothie, and add grbl_mode true to your smoothie config (Note: You must update to the latest version of Smoothieware to ensure compatibility with bCNC).
OpenSCAM.org - Open-Source Simulation & Computer Aided Machining (Free 3-axis CNC Simulator which understands G-Code)
CNC.js - Open-Source CNC host with lots of features, running in your browser.
OpenSCAD.org - Open-Source CAD software.
GCode plug-in for InkScape - CAM, Output GCode from SVG files in Inkscape.
PyCAM - Open-Source CAM software.
jscut - Open-Source in-browser CAM software.
CamBam - Closed-Source, but cheap and feature-full CAM software. Widely used by hobbyists.
Fusion360 - Closed-source CAM with very advanced features, free for hobby/fablab/small business.
Universal Gcode Sender Host program
Fabrica - Easy to use web control interface ( Host )
Kiri:Moto by Grid.Space - Free web based toolpath generator with support for FDM, Laser Cutting and CNC Milling.
More links at ShapeOko.com.

翻譯年糕

David Chuang
2017-05-13 15:45:33

Fushino 360 有 @@

李派克
2017-05-13 21:55:09

看你要的是什麼。。 cam還是cnc router不太一樣


原文網址 Maker Tu
2016-11-19 15:45:08

分享好康的....買CNC 送 3DP 哇 還含課程喔
http://www.makerslide-machines.com/zh/workshop/
Maker 的不歸路 —— 升級升級再升級…
為自己創造副業, 機會只給願意付出行動的早鳥
搶先預訂 —-Formosa U-500 CNC/3D 二合一機
2017 Workshop⋯⋯


原文網址 Maker Tu
2016-05-02 19:00:35

升級版Makerslide Formosa-U CNC 在Maker Faire Paris (4/30, 5/1)
(反應很不錯)