코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2015-10-14 14:11:00
c#은 마이크로 소프트에서 개발한 객제 지향 프로그래밍 언어입니다. 닷넷이라는 플랫폼에 걸맞게 새로운 프로그래밍 언어라는 슬로건을 달고 만든 언어인데요.
마이크로소프트의 프로그래밍 언어라고하면 대표적인 C언어가 있으나 C#은 C언어보다는 JAVA언어와 유사한 문법을 지니고 있습니다.
아래의 코드는 C#에서 Hello world!를 출력하는 코드입니다.
프로그래밍 언어를 공부하는 유저라면 아래의 코드를 보더라도 한눈에 JAVA와 비슷한것을 볼 수 있습니다.
하지만 JAVA와 비슷한 문법을 따라가지만 C언어의 특징도 가지고 있기 때문에(구조체나 포인터) 어떻게 보면 프로그래밍 언어를 대표하는 C와 JAVA의 장점만을 모아서 섞어 만든 언어라고도 볼 수 있습니다.
아래의 사진을 보시면 C#이 프로그래밍 개발에서 얼마나 많이 쓰이는 언어인지 알 수 있습니다.(출처 : REDMONK 2015년 6월 기준)
(1위부터 순서대로 => 1 JavaScript, 2 Java, 3 PHP, 4 Python, 5 C#, 5 C++, 5 Ruby, 8 CSS, 9 C, 10 Objective-C)
또 C#의 장점이라 하면 비주얼베이직과 같이 UI개발이 쉽습니다.
손쉽게 UI개발이 가능한데 사용법도 쉬우니까 조금만 공부하면 아두이노와 연동하기도 쉽습니다.
이번글에서는 버튼을 만들어서 LED를 켜고 꺼보겠습니다.
C#을 사용하기 위해서는 비주얼 스튜디오의 설치가 필요합니다.
비주얼 스튜디오는 마이크로소프트 홈페이지에서 설치할 수 있는데요. 설치 방법에 대해서는 인터넷에서 손쉽게 정보를 얻을 수 있습니다.
(학생일 경우 무료로 비주얼스튜디오를 사용할 수 있습니다.)
코코아팹의 아래 링크에서도 간단한 설명을 볼 수 있습니다. (Visual Micro 사용할때도 비주얼 스튜디오 2013을 사용하였습니다~!!)
http://kocoafab.cc/tutorial/view/462
비주얼 스튜디오가 다 설치되었다면 아래 사진을 따라해보시면 됩니다.
FILE - NEW - PROJECT를 클릭합니다.
프로젝트를 누르시면 아래와 같은 창을 볼 수 있습니다.
우리가 사용할 언어는 C#이기 때문에 템플릿에서 C#을 클릭합니다.
그리고 나서 Windows Forms Application을 클릭합니다.
Windows Forms Application은 간단하게 설명하면 UI가 있는 윈도우 창을 생성할 수 있는 프로젝트입니다.
우리는 LED를 켰다 껐다 할 수 있는 윈도우 창이 필요합니다.
프로젝트 이름은 편하게 지으시면 됩니다. 여기서는 기본 이름(Windows Forms Application1)으로 하겠습니다.
생성하고 나면 아래와 같은 창을 볼 수 있습니다.(C#의 확장자는 .cs입니다.)
흰색의 배경이 있는 창이 이제 우리가 꾸며볼 윈도우 입니다. 현재는 아무런 도구가 들어있지 않기 때문에 그냥 흰색 배경입니다.
이 창에 우리는 버튼을 빨리 만들고 싶기 때문에(?) 사진 왼쪽 상단에 보이는 Toolbox를 눌러줍시다.
Toolbox는 이 윈도우 창을 꾸며줄 여러 컴포넌트가 존재합니다.
툴박스를 누르면 새로운 창을 왼쪽에서 볼 수 있는데 Common Controls를 누르면 자주 쓰이는 툴이 보입니다.
버튼을 만들어야 하기 때문에 2번째에 보이는 Button을 클릭 후 중앙에 있는 윈도우 창에서 사진을 올리듯이 드래그를 통해 버튼을 만들어 줍시다!!
버튼을 2개 만들어 보았습니다~!! 하나는 켜는 버튼이고 하나는 끄는 버튼입니다.
근데 이름이 버튼1, 버튼2라니 좀 그렇네요. 이름을 LED ON, LED OFF로 바꿔봅시다.
버튼을 클릭 후 왼쪽 하단을 보면 Properties가 보입니다. 이 탭에서는 버튼에 관한 속성을 설정할 수 있습니다.
버튼의 이름을 바꿔야하기 때문에 중간쯤에 보시면 Text라는 요소를 볼 수 있습니다. Button1로 되어있는데 각각 LED ON과 LED OFF로 바꿔줍시다.
LED ON과 LED OFF버튼을 만들었습니다.
저는 폰트 크기까지 변경해서 글씨를 살짝 크게 만들었습니다.(폰트의 크기또한 Properties에서 조절할 수 있습니다. Font라는 항목을 보실 수 있어요.)
여기까지 잘 따라오셨다면 반은 오신거에요~!!!!!!!
이제는 코드를 만들 차례입니다.
위 버튼을 만들고나서 Form1이라는 창을 더블클릭하고 LED ON버튼 LED OFF버튼을 각각 더블 클릭한다면 아래와 같은 기본틀은 구성되어 있는 소스코드 창을 볼 수 있습니다.
소스코드 창을 보면 이제부터 머리가 아파지기 시작하는데 어려운것이 없습니다.
button1_Click은 버튼1(LED ON)을 더블 클릭 했을 때 생기는데 이 함수에서는 LED ON을 눌렀을때의 이벤트를 만들어 줄 수 있습니다.
마찬가지로 button2_Click은 버튼2(LED OFF)을 더블 클릭 했을 때 생기고 이 함수에서는 LED OFF를 눌렀을때의 이벤트를 만들어 줄 수 있습니다.
Form1_Load는 Form1 윈도우 창을 눌렀을 때 생기는 함수로 창이 열렸을 때의 이벤트를 설정할 수 있습니다.
자, 우리가 할일은 LED ON을 눌렀을 때 아두이노에게 LED를 켜라는 신호를 주고, LED OFF를 눌렀을 때 아두이노에게 LED를 끄라는 신호를 주면 됩니다.
소스코드 상단에 아래와 같은 구문을 추가해 줍시다.
using System.IO.Ports; //시리얼 통신을 사용하기 위한 선언
시리얼통신을 사용하기 위한 환경을 만들었으면 이제 사용하기 위해 시리얼포트를 생성합니다.
private SerialPort arduSerialPort = new SerialPort(); //시리얼 포트 생성
우리가 만든 폼에서는 시리얼포트에 대한 정보를 작성합니다.
포트를 열고 어떤 포트 번호를 사용하고 어느정도의 Baud rate를 사용할지 정해줘야 그 포트와 통신을 하겠죠?
arduSerialPort.PortName = "COM10"; //아두이노가 연결된 시리얼 포트 번호 지정
arduSerialPort.BaudRate = 9600; //시리얼 통신 속도 지정
arduSerialPort.Open(); //포트 오픈
위 과정까지 끝났다면 이제 시리얼 포트를 사용하기 위한 준비는 끝났습니다.
이제 버튼을 눌렀을 때 이벤트를 지정해 줍시다.
버튼을 눌렀을 때 중요한것은 아두이노에게 값을 전달해 주는 것입니다.
전달하는 방법은 간단합니다.
arduSerialPort.Write("1"); //연결된 시리얼포트로 "1"의 값을 전달
arduSerialPort.Write("2"); //연결된 시리얼포트로 "2"의 값을 전달
버튼을 눌렀으면 이제 누른 버튼은 사용하지 못하게 막습니다.
button1.Enabled = false; //버튼1을 비활성화
button2.Enabled = true; //버튼2를 활성화
위 정도까지 소스를 만약 이해했다면 위 소스만으로도 이제 완성할 수 있습니다.
아래는 전체소스입니다.
C# 코드
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
private SerialPort arduSerialPort = new SerialPort(); //시리얼 포트 생성
public Form1()
{
InitializeComponent();
arduSerialPort.PortName = "COM10"; //아두이노가 연결된 시리얼 포트 번호 지정
arduSerialPort.BaudRate = 9600; //시리얼 통신 속도 지정
arduSerialPort.Open(); //포트 오픈
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
arduSerialPort.Write("1"); //연결된 시리얼포트로 "1"의 값을 전달
button1.Enabled = false; //버튼1을 비활성화
button2.Enabled = true; //버튼2를 활성화
}
private void button2_Click(object sender, EventArgs e)
{
arduSerialPort.Write("0"); //연결된 시리얼포트로 "0"의 값을 전달
button1.Enabled = true; //버튼1를 활성화
button2.Enabled = false; //버튼2을 비활성화
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (true == arduSerialPort.IsOpen) //포트가 열려있다면
{
arduSerialPort.Close(); //포트를 닫는다
}
}
}
}
아두이노에서는 0과 1의 값을 받고 그 값에 따라 LED를 켜고 끄는 정도의 소스만 업로드해주시면 됩니다.
아두이노 코드
const int ledPinNum = 13;
void setup() {
Serial.begin(9600);
pinMode(ledPinNum, OUTPUT);
}
void loop() {
//계속적으로 문자를 읽어들인다
char ch = Serial.read();
//'0'를 읽을 경우 LED을 OFF 시킨다
if (ch == '0') {
digitalWrite(ledPinNum, LOW);
//'1'을 읽을 경우 LED를 ON 시킨다
} else if (ch == '1') {
digitalWrite(ledPinNum, HIGH);
}
}
kocoafabeditor
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!