특정 구분자를 이용하여 문자열을 자르는 기능을 'Split'라고 합니다. C++용 'Split'를 구현하는 내용은 많은데 아두이노에 바로 적용할 수 없어서 아두이노용으로 다시 만들었습니다. 1. 구현 방법 스플릿을 구현하는 방법은 간단합니다. 1) 한 문자씩 검사를 한 다음 2) 구분용 문자가 나오면 잘라내고 3) 그 이후부터 다시 검사합니다. 이 과정을 반복하여 구분자를 잘라 냅니다. 문제는 언어마다 이 과정이 약간씩 다를 수 있다는 점입니다. 아두이노에서는 'indexOf'로 구분자의 위치를 찾은 다음 'substring'으로 문자열을 잘라내고 그 과정을 반복합니다. 2. 구현 이제 스플릿을 구현해 봅시다. void Split(String sData, char cSeparator) { int nCou..
이전 글에서 다른 칩을 이용하여 스테핑 모터를 제어 했습니다. (참고 : [Arduino] L293D칩을 이용한 스테핑 모터(stepping motor) 제어) 오늘은 아두이노사이트에서도 샘플로 제공하고 있는 'ULN2003'칩을 이용해 보겠습니다. 저 같은 경우 그냥 'ULN2003'대신 'ULN2004'를 사용 하였습니다. 이 칩은 유니폴라 방식의 모터를 구동할 수 있습니다. (무슨 차이가 있는지 모르겠네요 ㅡ,.ㅡ;) 가격은 400원 정도 합니다. (참고 : 동신전자 - ULN2004A ) 사용한 모터는 SE-SM243, FL42STH33-0956A 입니다. 1. 보드 구성 배선은'L293D'칩보다 쉽습니다. 보드구성은 아두이노 샘플과 똑같이 하겠습니다. (참고 : Arduino Web - Step..
아두이노로 데이터를 보내면 'Serial.read()'로 데이터를 읽습니다. 그런데 문자열을 'Serial.read()'로 읽으면 한번에 한글자만 읽어집니다. 1. 문자열 보내기 테스트용 일단 LED 3개를 달아봅시다, 아웃풋 핀은 3,5,6를 사용합니다. (이왕이면 빨간색, 녹색, 파란색으로 세팅합시다.) 1-1. 보드 구성 그냥 LED 3개가 달려있습니다. 1-2. 펌웨어 작성 LED를 데이터를 통해 끄고 켜고를 할것이기 때문에 'switch'문을 사용해야 합니다. #define LED_R 6 #define LED_G 5 #define LED_B 3 String sCommand = ""; void setup() { Serial.begin(9600); pinMode(LED_R, OUTPUT); pinM..
아두이노는 형 변환이 좀 까다로운 것 같습니다 ㅡ,.ㅡ;; 보통 문자열을 정수로 변환하는 메소드나 클래스를 제공하기 마련인데 그런 거 없음;;; 형 변환 관련된 레퍼런스를 다 확인한 건 아니지만 변수 간 형 변환을 바로 할 수 있는 라이브러리는 몇 개 없는 것 같습니다. 1. 아두이노에서 String의 특징 어느 언어든 String은 'char[]'로 구현된다는 점입니다. 'char[]'를 직접 다루는것이 불편하니 'String'클래스를 만들어서 제공해주는 것이죠. 아두이노도 마찬가지 입니다. (참고 : Arduino Reference - StringObject ) 아두이노에서 char는 아스키코드가 들어 있어서 '+'연산을 하면 char이 합쳐지지 않고 덧샘이 됩니다 ㅎㅎㅎ 2. String to ch..
보통 스테핑모터를 제어할때는 모터 드라이버라는 것을 사용 합니다. 모터드라이버의 역활이 몇가지 있긴하지만 모터를 구동하려면 콘트롤러만 있으면 됩니다 ㅡ.-; (그리고 전기 ㅎ) 제가 찾은 자료에는 'L293D'칩을 이용하고 있어서 'L293D'칩을 구했습니다. 이 칩은 유니폴라 방식의 모터를 구동할 수 있습니다. (참고 : adafruit learning system - Arduino Lesson 16. Stepper Motors) 모터는 'FL42STH33-0956A'를 사용 했습니다. (참고 : 디바이스마트 - FL42STH33-0956A) 가격은 7000원 정도 합니다. (참고 : 디바이스 마트 - L293D ) 당연이 다른 칩들도 있는데.... 그건 다음 시간에 알아보도록 하죠 ㅎㅎㅎ 사용한 모터..
'근접센서'라 고도하고 '거리 측정 센서'라고도 하는 센서입니다. 종류에 따라서 측정할 수 있는 거리의 범위가 다릅니다. 필요한 거리범위를 생각해서 구입하셔야 합니다. 저는 10cm~80cm 범위를 측정할 수 있는 거리 측정 센서를 구입했습니다. (참고 : 디바이스 마트 - GP2Y0A21YK[케이블포함]) 1. 보드 구성 선은 아래와 같이 연결합니다. 테스트용 LED를 꼽아도 되는데..... 가변저항보다 값이 불안정해서 그런지 LED가 너무 깜박거려서 밝기를 알 수 가 없습니다;; 2. 펌웨어 작성하기 코드는 '가변저항'과 똑같습니다. (참고 : [Arduino] 가변저항(potentiometer) 이용하여 LED 밝기 조정) #define LED 13 #define ANALOG A0 //가변저항값 i..
가변저항은 간단하게 컴퓨터로 보낸 값을 체크할 때 좋은 부품입니다. 이걸 이용해서 테스트한 다음 다른 센서를 붙여보면 디버깅하기가 좋죠. 1.보드 구성하기 보드를 구성하기 전에 가변저항의 구조를 보도록 하겠습니다. 다행히 쓰여있는 데로 꼽으시면 됩니다 ㅎㅎ LED는 평상시처럼 13번 핀에 꽂았습니다. 전 그라운드(GND)는 하얀색으로 꽂습니다. 가변저항은 돌리기 쉬운 곳에 꽂아서 테스트 합시다 ㅎㅎㅎ 완성 2.펌웨어 작성하기 가변저항의 값을 받기 위해 'A0'의 값을 읽어야 하는데 아날로그 입력을 받을 때 사용하는 함수가 'analogRead([읽을 포트])' 입니다. #define LED 13 #define ANALOG A0 //가변저항값 int nA0_Value = 0; void setup() { p..
우노와 레오나르도중 뭘 살까 고민하던중에 레오나르도가 키보드처럼 인식 시킬 수 있다라고 주어 듣고 샀다가 좀 난감한 일을 격었습니다. 알고보니 설정문제라니-_-; 1.값이 안 읽힌다? 원래 .net에서는 시리얼 포트에 'DataReceived'만 연결하면 시리얼 포트에서 값이 넘어오면 이벤트가 발생해야 합니다. 그런데 'DataReceived'이벤트는 오지 않고..... 그래서 쓰래드를 만들어서 돌리니 쓰래드가 그냥 죽네 ㅡ,.ㅡ;;; (오류 메시지도 없이 죽는 경우는 처음 봤습니다;;;) 이상해서 타이머추가해서 돌려보니 같은 현상.. (어차피 타이머도 쓰래드같은 역활인지라-_-;;;) 2.해결 방법 이것 때문에 거의 하루를 날려먹고 망연자실하던중 우연이 검색내용중에 '아두이노 기판 종류에 따라 다른 설..
C#의 시리얼 통신 기능을 이용하여 아두이노 보드의 LED를 켜고 꺼보겠습니다. 1. 펌웨어 작성하기 외부에서 신호를 받았는지 확인 하기 위해서는 'Serial.available()'를 사용해야 합니다. 마이컴보드에서 시리얼 포트에서 온신호를 버퍼에 저장해두는데 이 값이 있는지 확인하는 방법이 'Serial.available()'를 호출 하는 것입니다. (참고 : Arduino Reference - available() ) 이것을 이용하면 신호가 왔는지 안왔는지를 확인할수 있죠. 이렇게 버퍼에 들어있는 값은 'Serial.read()'를 통해 읽을 수 있습니다. (참고 : Arduino Reference - read()) void setup() { pinMode(13, OUTPUT); Serial.beg..
하드웨어를 공부하면서 보니 대부분의 마이컴의 처음은 마이컴혼자서 LED를 깜박거리게 하는 것이더군요. 소프트웨어를 처음공부하면 제일 먼저 하는 것이 "Hello World"를 띄우는 것처럼 말이죠. 1. 아두이노 프로그램 설치하기아두이노 프로그램은 아두이노사이트에서 무료로 받을 수 있습니다. 아두이노 1.0.4 프로그램 다운로드 - 윈도우 버전 (참고 : 아두이노 다운로드 페이지) 자신의 운영체제에 맞는 프로그램을 다운로드하고 압축을 푼후 'arduino.exe'를 실행 시킵니다. 2. 스케치 만들기아두이노 보드에 펌웨어를 만들고 올리는 툴인 아두이노 프로그램에서 프로젝트단위(이걸 프로젝트로 봐도 될지 모르겠네요.)를 스케치라고 합니다. 펌웨어라는건 마이컴을 동작 시키기 위해 들어있는 프로그램이죠. 보통..