2013. 5. 1. 14:53

C#의 시리얼 통신 기능을 이용하여 아두이노 보드의 LED를 켜고 꺼보겠습니다.

 

 

1. 펌웨어 작성하기

외부에서 신호를 받았는지 확인 하기 위해서는 'Serial.available()'를 사용해야 합니다.

마이컴보드에서 시리얼 포트에서 온신호를 버퍼에 저장해두는데 이 값이 있는지 확인하는 방법이 'Serial.available()'를 호출 하는 것입니다.

(참고 : Arduino Reference - available() )

이것을 이용하면 신호가 왔는지 안왔는지를 확인할수 있죠.

 

이렇게 버퍼에 들어있는 값은 'Serial.read()'를 통해 읽을 수 있습니다.

(참고 : Arduino Reference - read())

void setup()  
{                
   pinMode(13, OUTPUT);
   Serial.begin(9600);  
}

void loop()                    
{
   if(Serial.available())
   {
     int c = Serial.read();
     if (c == '1')
     {    
       digitalWrite(13,HIGH);
     }
     else if (c == '0')
     {
       digitalWrite(13,LOW);
     }
   }
}

 

이제 시리얼 포트에서 '1'이 오면 13번 핀에 연결된 LED가 들어오고 '0'이 오면 꺼지게 됩니다.

 

 

2. 보드 세팅하기

보드는 다른 글에서 LED를 설치하는 것과 같으니 '[Arduino] 하드웨어의 "Hello World" - LED 깜박이기'를 보고 구성해 주세요.

참고 : [Arduino] 하드웨어의 "Hello World" - LED 깜박이기

 

 

3. c# 코드 만들기

C#에서 시리얼 통신을 하려면 'System.IO.Ports'를 유징 해야 합니다.

시리얼 통신을 하기위해 'SerialPort'클래스를 사용하려면 말이죠 ㅎㅎㅎ 

 

3-1. UI 만들기

LED를 켜고 끄기위해 버튼 2개와 정보 출력을 위한 레이블 한개를 배치 합니다.

 

 

3-2. 비하인드 코드 작성

프로그램 구성

(1)프로그램을 실행하면 아두이노 보드에 연결된 포트를 엽니다.

(2)켜기를 누르면 "1"을 지정한 포트로 보냅니다.

(3)끄기를 누르면 "0"을 지정한 포트로 보냅니다.

(4)폼을 닫을때 열린 포트를 닫습니다.

 

시리얼 포트로 메시지를 보낼 때는

'SerialPort.Write("[문자열]");'

를 이용 합니다.

public partial class Form1 : Form
{
	/// <SUMMARY>
	/// 사용할 포트
	/// </SUMMARY>
	private SerialPort insSerialPort = new SerialPort();
		
	public Form1()
	{
		InitializeComponent();

		//아두이노 보드가 연결된 포트의 이름
		insSerialPort.PortName = "COM10";
		//아두이노 보드 통신속도
		insSerialPort.BaudRate = 9600;
		//지정한 포트 열기
		insSerialPort.Open();
	}

	private void Form1_Load(object sender, EventArgs e)
	{

	}

	private void btnOn_Click(object sender, EventArgs e)
	{
		//시리얼 포트로 "1"을 보낸다.
		insSerialPort.Write("1");

		labInfo.Text = "LED 켜짐";
		btnOn.Enabled = false;
		btnOff.Enabled = true;
	}

	private void btnOff_Click(object sender, EventArgs e)
	{
		//시리얼 포트로 "0"을 보낸다.
		insSerialPort.Write("0");

		labInfo.Text = "LED 꺼짐";
		btnOn.Enabled = true;
		btnOff.Enabled = false;
	}

	private void Form1_FormClosing(object sender, FormClosingEventArgs e)
	{
		//포트가 열려있나?
		if (true == insSerialPort.IsOpen)
		{
			//포트를 닫는다.
			insSerialPort.Close();
		}
	}
}

 

 

4. 테스트

이제 테스트를 해봅시다.

 

 

 

마무리

이거 소스코드가 있던 사이트 주소를 잃어버려서 출처를 못적었습니다;;;

아시는분 댓글 남겨 주세요~