우노와 레오나르도중 뭘 살까 고민하던중에 레오나르도가 키보드처럼 인식 시킬 수 있다라고 주어 듣고 샀다가 좀 난감한 일을 격었습니다.
알고보니 설정문제라니-_-;
원래 .net에서는 시리얼 포트에 'DataReceived'만 연결하면 시리얼 포트에서 값이 넘어오면 이벤트가 발생해야 합니다.
그런데 'DataReceived'이벤트는 오지 않고.....
그래서 쓰래드를 만들어서 돌리니 쓰래드가 그냥 죽네 ㅡ,.ㅡ;;;
(오류 메시지도 없이 죽는 경우는 처음 봤습니다;;;)
이상해서 타이머추가해서 돌려보니 같은 현상..
(어차피 타이머도 쓰래드같은 역활인지라-_-;;;)
이것 때문에 거의 하루를 날려먹고 망연자실하던중 우연이 검색내용중에 '아두이노 기판 종류에 따라 다른 설정이 필요할 수도 있다.'라는 글을 보고 제가 쓰고 있는 레오나르도 기판은 일반적인 기판이 아니라는것이 떠올랐습니다;;;;
(우노를 많이 쓰더라고요;;;;)
그래서 검색해보니 바로 나오네요.
(참고 : 아두이노 포럼 - Topic: Serial communication with C# program: SerialDataReceivedEventHandler doesnt work )
레오나르도를 사용 할때는 시리얼 포트의 'DtrEnable'속성과 'RtsEnable'속성을 'true'로 설정해야 값을 읽을 수 있습니다.
그러면 간단하게 테스트용 프로그램을 만들어 봅시다.
아두이노에서 시리얼 포트로 값을 내보낼때는 'Serial.print()'나 'Serial.println()'를 사용합니다.
아래와 같이 아두이노의 스케치를 작성하고 업로드 했습니다.
void setup() { Serial.begin(9600); } void loop() { Serial.print(" "); Serial.print("aa22"); Serial.println("bb11"); delay(1); }
데이터를 출력하기전에 빈값을 붙이는 이유는 출력 값이 짤리는 경우가 있기 때문입니다.
컴퓨터에서는 값을 읽어 공백을 제거한후 사용합니다.
아두이노의 '시리얼 모니터'를 통해 값이 출력되고 있음으로 확인합니다.
값이 잘 나오고 있네요.
시리얼 포트를 생성하고 'DataReceived'이벤트를 연결 합니다.
public partial class Form1 : Form { private SerialPort insSerialPort = new SerialPort(); public Form1() { InitializeComponent(); //아두이노 보드가 연결된 포트의 이름 insSerialPort.PortName = "COM6"; //아두이노 보드 통신속도 insSerialPort.BaudRate = 9600; //데이터가 왔을때 이벤트 insSerialPort.DataReceived += new SerialDataReceivedEventHandler(insSerialPort_DataReceived); //레오나르도 기판 사용시 필요한 옵션 insSerialPort.DtrEnable = true; insSerialPort.RtsEnable = true; //지정한 포트 열기 insSerialPort.Open(); } private void Form1_Load(object sender, EventArgs e) { insSerialPort.Open(); } void insSerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { Debug.WriteLine("아두이노 데이터 : " + insSerialPort.ReadLine()); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { //포트가 열려있나? if (true == insSerialPort.IsOpen) { //포트를 닫는다. insSerialPort.Close(); } } }
귀찬아서 그냥 디버그 메시지로 출력했으니 출력(output)창을 열어 확인해 봅시다.
이제야 잘나오네요 ㅡ,.ㅡ;;;
이래서 '처음 무언가를 할때는 그냥 주는데로 해보는게 좋다' 라는 말이 맞는 말이죠;;;
괜이 나름 커스텀좀 해보겠다고 일반적인 기판아닌거 샀다가 고생했네요 ㅎㅎㅎ
뭐.....이런게 피가 되고 살이 되는 거긴 하지만;;;