แสดงบทความที่มีป้ายกำกับ C# แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ C# แสดงบทความทั้งหมด

วันพุธที่ 4 มกราคม พ.ศ. 2555

C# serail


Joy C# For child

การเขียนโปรแกรมจอยเพื่อควบคุมหุ่นยนต์โดยใช้โปรแกรม Microsoft Visual Studio C# นั่นสามารถทำได้ง่ายๆ เรามาดูวิธีทำกันเลยครับ!!

1. เริ่มต้นโดยเข้าสู่โปรแกรม Microsoft Visual Studio C# โดยกดดับเบิ้ลคลิกที่รูปภาพ ดังนี้


2. เมื่อเปิดโปรแกรมขึ้นมาได้แล้ว เราจะสร้าง Project โดยคลิกดังรูป


3. ตั้งชื่อ Project แล้วกดปุ่ม OK


4. เราจะได้ Project ที่เราสร้างดังภาพ

5. ในแทบ Toolbox ให้คลิกที่ Button แล้วไปคลิกที่พื้นที่ของ Form1 ดังภาพ

6. สามารถเปลี่ยนข้อความบน Button ได้ โดยให้คลิกที่ button แล้วในแทบ Properties จะมีข้อมูลของปุ่มให้เราเปลี่ยนได้ การเปลี่ยนข้อความบน Button ให้ไปที่ Text แล้วเปลี่ยนได้ตามต้องการ

7. ต่อไปให้ไปที่ Toolbox คลิกที่ SerialPort แล้วนำมาวางในพื้นที่ Form1 ดังภาพ



8. กดคลิกที่ Button ทำการสร้าง even โดยมีลำดับตาม ดังภาพ


9. เราจะมาอยู่ในแทบ Form1.cs ให้ใส่ Code ดังรูป

10. ให้เรากลับมาที่แทบ Form1.cs[Design] แล้วเพิ่มปุ่มอีก 3 ปุ่มโดยทำเหมือนข้อ3 และทำการสร้าง Even เหมือนข้อ 7


11. ทำการเพิ่มโค๊ดทั้งหมดดังนี้



วันอังคารที่ 14 ธันวาคม พ.ศ. 2553

การใช้งาน USB Joystick ด้วย C#

การใช้งาน USB Joystick ด้วย C#

สวัสดีครับ :D ในที่สุดก็ได้เริ่มงานเขียนกันสักทีหลังจากติดภารกิจมานาน สำหรับบทความนี้จะพาผู้อ่านไปใช้ USB Joystick โดยใช้ภาษา C# ร่วมกับ DirectX นะครับ จะเป็นตัวอย่างที่ง่ายมากครับ แล้วก็พื้นฐานที่สุดเพื่อให้โปรแกรมเบาและสามารถนำไปประยุกต์ใช้อย่างหลากหลายนะครับ เรามาเริ่มกันเลยครับ

System Requirement

  1. Windows7 อาจใช้ OS อื่นได้นะครับ แต่ตอนเขียนผมใช้ Windows7 ไม่รู้ว่า Version อื่นจะมีปัญหาอะไรรึเปล่าน่ะครับ
  2. Microsoft Visual C# 2010 Express โหลดฟรีสำหรับนักพัฒนาได้ที่นี่เลยครับ http://www.microsoft.com/express/Downloads/
  3. DirectX SDK โหลดได้ที่นี่เลยครับ http://www.microsoft.com/express/Downloads/ ในที่นี้ผมใช้ เวอร์ชั่น June 2010 DirectX SDK ซึ่งเวอร์ชั่นอื่นก็น่าจะได้เหมือนกันครับ

เริ่มต้นเขียน

1. สร้าง Project แบบ Window Application Form ขึ้นมาใหม่ ตั้งชื่อตามใจชอบ

2. เพิ่ม DirectX เข้าโปรเจ็ค โดยการ คลิกขวาที่ References -> Add Reference

3. เลือก Browse แล้วหาๆฟล์ Microsoft.DirectX.DirectInput โดยปกติจะอยู่ที่ C:\Windows\Microsoft.NET\DirectX for Managed Code\1.0.2902.0

4. คลิกขวาที่ From1.Designer.cs -> View Code เพื่อแทรก Code

5. ทำการเพิ่ม Code ตามรูป this.Load+=newSystem.EventHandler(this.iJoy_Load);



โดยที่ iJoy_Load เป็นชื่อของ metod



6. ใน Form1 เพิ่ม Code 2 ส่วน ได้แก่ เรียกใช้ namespace DirectX และ code เรียกใช้งาน USB Joystick โดยสามารถ Copy Code จากด้านล่างของบทความนี้

7. เพิ่ม Label แล้วเปลี่ยนชื่อเป็น lbJoystick เพื่อเตรียมตัวใช้แสดงผลการทำงาน


8. เพิ่ม Timer แล้วตั้งค่า Enabled จาก False เป็น True


9. ทำการเพิ่มโค้ดเรียกใช้เมดทอด UpdateJoystick ดังรูป โดยทำการ Double-Click ที่



10. จากนั้นทำการ Save ให้เรียบร้อย จากนั้น สั่ง Complied และ run จะได้โปรอกรมแสดงการทำงานของ USB Joystick

สำหรับการนำไปประยุกต์ก็ไล่โค้ดเอานะครับ เป็น C# ธรรมดาครับ หากมีอะไรสงสัยให้เมล์มาถามได้นะครับที่ ks_bomb@hotmail.com หวังว่าคงมีประโยชน์ต่อผู้อ่านนะครับ แล้วเจอกันใหม่บทความหน้านะครับ บ๊าย บาย …….. :D

+++++++++++++++++++++++++++++++++++++++

ในกรณีเกิด Error

ซึ่งอาจจะเกิดจากหลายสาเหตซึ่งมีวิธีแก้ที่ต่างกันดังนี้

Ø กรณียังไม่มี Application Configuration File สำหรับการใช้งาน CRT 4.0

วิธีแก้

1. เพิ่ม Application Configuration File โดย
คลิกขวาที่โปรเจ็ค
-> Add -> New Item…

2. เลือก Application Configuration File แล้วกด Add

3. ทำการเพิ่ม Code ต่อไปนี้ระหว่าง <configuration>..configuration> ได้แก่

<startup useLegacyV2RuntimeActivationPolicy="true">

<supportedRuntime version="v4.0"/>

</startup>


4. ทำการ Save แล้วลอง Run ใหม่

+++++++++++++++++++++++++++++++++++

Ø กรณีเกิดปัญหา LoaderLock หากมีปัญหาคล้ายดังรูป ให้แก้ดังนี้

วิธีแก้

1. ที่เมนู Debug เลือก Exception… จะมีหน้าต่างดังนี้ pop up ขึ้นมา

2. ทำการขายส่วน (กดเครื่องหมาย +) หน้า Managed Debugging Assistants


3. หาคำว่า แล้ว เอาเครื่องหมายถูก ใน Colum Thrown ออก

4. ทำการ Save แล้วลอง Run ใหม่

+___________________________+


Code ที่ต้องเพิ่มเติม

//iAdd Code for init Joystick
private Device joystick;
private void iJoy_Load(object sender, EventArgs e) //iAdd
{
this.InitDevices();
}
private void InitDevices()
{

//create joystick device.
foreach (
DeviceInstance di in
Manager.GetDevices(
DeviceClass.GameControl,
EnumDevicesFlags.AttachedOnly))
{
joystick = new Device(di.InstanceGuid);
break;
}

if (joystick == null)
{
//Throw exception if joystick not found.
throw new Exception("No joystick found.");
}

//Set joystick axis ranges.
foreach (DeviceObjectInstance doi in joystick.Objects)
{
if ((doi.ObjectId & (int)DeviceObjectTypeFlags.Axis) != 0)
{
joystick.Properties.SetRange(
ParameterHow.ById,
doi.ObjectId,
new InputRange(-5000, 5000));
}
}

//Set joystick axis mode absolute.
joystick.Properties.AxisModeAbsolute = true;

//set cooperative level.
joystick.SetCooperativeLevel(
this,
CooperativeLevelFlags.NonExclusive |
CooperativeLevelFlags.Background);
//Acquire devices for capturing.
joystick.Acquire();

}

private void UpdateJoystick()
{
string info = "Joystick: ";

//Get Mouse State.
JoystickState state = joystick.CurrentJoystickState;

//Capture Position.
info += "X:" + state.X + " ";
info += "Y:" + state.Y + " ";
info += "Z:" + state.Z + " ";

//Capture Buttons.
byte[] buttons = state.GetButtons();
for (int i = 0; i < buttons.Length; i++) { if (buttons[i] != 0) { info += "Button:" + i + " "; } } lbJoystick.Text = info; } private void timer1_Tick(object sender, EventArgs e) { UpdateJoystick(); }

+++++++++++++++++++++++++++++++++

เอกสารอ้างอิง

· ตัวอย่าง Code ทีนำมาใช้ http://msdn.microsoft.com/en-us/library/bb153252%28VS.85%29.aspx#dx_DirectInput_creating_device_objects

· แก้ปัญหา CLR http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/5d1186ec-ad55-4929-b1e4-8806cdc758af

· การเพิ่มไฟล์ Config file http://www.devasp.net/net/articles/display/679.html

· แก้ปัญหา LoaderLock http://www.pcreview.co.uk/forums/thread-3741011.php