아두이노코딩및프로젝트실습 v3.0 김영준저 공학박사, 목원대학교겸임교수 前 Microsoft 수석연구원 헬로앱스

Size: px
Start display at page:

Download "아두이노코딩및프로젝트실습 v3.0 김영준저 공학박사, 목원대학교겸임교수 前 Microsoft 수석연구원 헬로앱스"

Transcription

1 아두이노코딩및프로젝트실습 v3.0 김영준저 공학박사, 목원대학교겸임교수 前 Microsoft 수석연구원 헬로앱스

2 목차 01. 아두이노코딩및프로젝트준비작업 LED 점멸하기 절전기능 LED 후레쉬 틱톡스위치만들기 토글스위치를활용하는프로젝트 스마트헤드라이트 동체인식및경보음실행장치만들기 차량후방감지기및멜로디연주장치 컬러 LED바예술창작작품만들기 컬러무드등만들기 나만의로봇제어함수만들기 로봇조종기만들기 자율주행로봇 블루투스원격제어하기 II -

3 01 아두이노코딩및프로젝트준비작업 학습목표 아두이노프로젝트활동에필요한 H/W 및 S/W 설치작업을완료한다. 아두이노의역사와기능에대해이해한다. 실습개요 아두이노의용도와기능에대해살펴한다. 아두이노 S/W 개발툴을설치한다. USB 드라이버를설치한다. 아두이노연결상태를확인한다

4 준비물 아두이노보드, 올인원쉴드, USB 연결케이블 아두이노우노보드 올인원쉴드 - 4 -

5 1.1 아두이노 (Arduino) 란? 아두이노탄생배경 아두이노는 2003 년이탈리아의 Interaction Design Institute Ivrea (IDII) 학생들의수업을위해개발이시작된오픈소스프로젝트의결과물이다. 초기프로젝트팀에는 Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino와 David Mellis 등이참여하였으며이들이프로젝트모임을위해만난장소는이탈리아 Ivrea에있는술집인데, 이술집의이름이 Arduin of Ivrea 이었다. Arduin of Ivrea 은 1002 년부터 1014 년까지이탈리아 Ivrea 지역을통 치한후작 (Margrave) 의이름으로서, 이러한이유때문에아두이노가이탈 리아왕의이름을의미한다고도알려져있다. 아두이노 (Aruino) 라는공식상표는 5명의아두이노참여팀원들이 2008년 Arduino LLC라는회사를설립하면서만들어졌으나, 미국이외의지역에서의아두이노상표권은 Arduino SRL이라는회사가가져감으로써, 미국이외의지역에서 Arduino 라는상표를사용하지못하는문제가발생을하였다. 이로인해 Genuino 라는새로운상표를만들어서사용하기시작을하였다. 하지만이두회사는 2016년합병을하게됨으로써, Arduino 와 Genuino로분리되어있던아두이노상표권문제는결국마무리되었다

6 아두이노에대한오해 구글검색에서 Arduino라는단어로검색을하면아래의사진에있는제품이가장많이표시되는것을볼수있다. 이제품은수많은아두이노지원보드제품중에서가장많이알려져있는아두이노우노 (Arduino Uno) 제품으로서, 단지아두이노지원보드중에서가장보편적인보드일뿐아두이노그자체를정의하는것이아니다. 일반인들에게대표적으로알려져있는아두이노우노보드 - 6 -

7 아두이노의구성요소 그렇다면, 아두이노의정체는무엇일까? 아두이노는크게 3 가지종류의구 성요소로이루어져있으나, 핵심은 SW 라이브러리를의미한다. 구성요소 SW 라이브러리개발툴 (IDE) 하드웨어보드 설명 Arduino.h 라는이름으로사용되는 SW 라이브러리로서, 복잡한 AVR 명령어기능들을쉬운 C언어기반의함수로정의해놓은것이다. 실제아두이노프로젝트의가장핵심적인결과물이며, 아두이노그자체라고도부를수있다. 흔히스케치코드라고부르는아두이노코드를작성하는개발툴이다. 이툴은아두이노프로젝트팀에서개발한것이아니라 MIT에서 C언어교육용으로개발하여배포하고있는프로세싱이라는교육용 SW 개발툴을가져다사용한것이다. 아두이노우노보드와같은아두이노라이브러리를지원하는하드웨어보드를의미한다. 다양한아두이노 H/W 보드종류들 - 7 -

8 아두이노와라즈베리파이의차이점 아두이노보드와라즈베리파이보드는일반인이보기에비슷한것처럼보 이지만아주큰차이점을가진다. 라즈베리파이는컴퓨터로분류되지만아두이노는컴퓨터가아닌마이크로 컨트롤러 ( 일명마이컴이라부름 ) 로분류되기때문이다. 아두이노 라즈베리파이 마이크로컨트롤러이다. OS가없으며, 메모리에저장된하나의프로그램이바로실행된다. 키보드나마우스같은입출력장치를연결할수없다. 비전문가를위한임베디드장치개발용으로만들어졌다. 임베디드기반창작작품이나 C언어교육용으로활용된다. 컴퓨터이다. OS( 리눅스, Windows 10) 를설치할수있다. 키보드나마우스같은입출력장치가연결된다. 개발도상국에저렴한비용의컴퓨터를보급하기위해만들어졌다. OS나보안, 네트워크교육용으로주로활용되고있다

9 4 차혁명시대를대비한아두이노활용직무훈련의필요성 기업형태의변화 ( 직장형태및직장에서의역할의변화 ) 기존의기업형태 다가올미래에서의기업형태 많은인원이모여규모화된기업활동 역할전문화및세분화 개인또는소수인원의네트워크화 개인이개발의전과정역량보유요구 기획 / 설계 / 개발 / 테스트 / 생산전과정에대한프로젝트형체험및실습필요 시장의요구에민첩하게대응할수있는훈련및생산역량필요 C 언어 / 전자회로 / 납땜등개별적인 기술지식및훈련위주의교육 아이디어도출 / 프로젝트기획 / 자료수집 / 디자인 / 설계 / 개발 / 테스트 / 생산전과정에대한프로젝트수행교육 아두이노활용프로젝트형수행교육은미래시대를대비하기위한가장효과적인직무개발및직무교육과정으로활용될수있음 - 9 -

10 1.2 초보자용아두이노코딩 SW 설치 코딩 SW 의종류 아두이노코딩을하기위해서는아두이노라이브러리를사용할수있는개 발환경이필요하다. 아두이노라이브러리는기본적으로 C 언어로작성되어있다 ( 엄밀히말하면 AVR C++ 언어로작성되어있음 ). C 언어로라이브러리가작성되어있긴하지만여전히일반인이사용하기에 는어려운문제점이있으며, 이를해소하기위해다양한보완툴들이계속 만들어지고공급되고있다. 아두이노공식홈페이지에서 배포하는 IDE 툴 헬로앱스에서배포하는 초보자용코딩 SW 툴

11 무료 C/C++ 언어로만개발 코드공유기능없음아두이노공식홈페이지에서배포하는 IDE 툴 유료 ( 무료체험판사용가능 ) 블록 / 스크립트 /C언어/C++ 언어지원 사용자수준별로언어선택가능 블록이나스크립트코딩시실시간 C언어생성기능지능 교사와학생간코드공유기능지원 아두이노시뮬레이터기능지원헬로앱스에서배포하는초보자용코딩 SW 툴 초보자용코딩 SW 설치 초보자용아두이노코딩 SW 는아래의페이지에서다운로드가능하다

12 아래의페이지에서오른쪽에있는다운로드아이콘을클릭하여최종버전 의아두이노코딩 SW 를다운로드받는다. 다운로드받은설치파일을마우스로클릭하여설치를진행한다. 특별히선 택할사항은없으며, 다음버튼을계속눌러주면설치가마무리된다

13 USB 드라이버설치 모든아두이노보드들은컴퓨터에연결하기전에반드시 USB 드라이버가 설치되어있어야하며, 매번설치할필요없이맨처음한번만설치해주 면된다. 초보자용코딩 SW가설치되고나면, 바탕화면에 SPL 폴더가만들어진다. SPL 폴더에서맨아래에있는 아두이노우노보드 USB 드라이버 (64bit) 파일을클릭하여설치를진행한다. 만약컴퓨터의 OS가 32비트라면오류가발생할것이다. 이경우에는 아두이노우노보드 USB 드라이버 (32bit) 파일을클릭하여설치를진행해주면된다. 주의사항 USB 드라이버설치전에아두이노보드를컴퓨터에연결하면않된다. 반드 시 USB 드라이버를먼저설치한후에아두이노보드를컴퓨터에연결해주 어야설치작업이마무리될수있다

14 아두이노보드연결하기 아두이노우노보드를 USB 케이블을이용하여컴퓨터와연결해준다. 아두이노보드가컴퓨터에맨처음연결되는순간, 컴퓨터에서남아있는 USB 드라이버설치작업이자동으로진행되며, 10 초 ~ 20 초정도시간이 지나면설치작업이마무리된다. 주의사항 USB 드라이버를컴퓨터에연결한후, 진행되는 USB 드라이버설치마무리작업은따로눈에보이지않는다. 설치작업이끝나면조그만팝업창으로준비되었다는메시지창이보일수도있고그렇지않을수도있기때문에, USB 케이블연결후, 잠시기다렸다가프로그램을실행시켜주어야한다

15 코딩 SW 실행하기 아두이노 USB 설치및케이블연결작업이끝나고나면, 이제아두이노용코딩 SW를실행시켜보자. 바탕화면의 SPL 폴더를살펴보면 SPL for 아두이노 항목이보일것이다. 이항목을클릭하여프로그램을실행시킨다. 제품키를입력하는창이표시되면제품키를입력하고제품활성화버튼을 클릭한다

16 코딩편집기에명령어를한글로표시할지아니면영어로표시할지선택하 는창에서영어로표시를선택한다

17 참고자료 SPL은 EPL (Educational Programming Language) 의한종류로서, Simple Programming Language의약자이다. C언어를 BASIC 언어처럼사용하기쉽게정의한언어로서, 아래의표는기존 C언어코드를 SPL 언어로표시한예를보여준다. C 언어 SPL 언어 int a = 0; for (int i = 0; i < 10; i++) a = a + 1; a = 0 for (i = 0; i < 10; i++) a = a + 1 아두이노연결상태확인하기 프로그램실행후, 아두이노보드가정상적으로인식되었다면, 다음과같이 프로그램상단에아두이노보드종류와 COM 포트가표시되어있어야한 다

18 주의사항 아두이노보드가 Arduino Uno 로선택되어있는지반드시확인한다. 보 드종류가다르면프로그램이아우이노보드로정상적으로업로드되지않 는다. COM 포트를눌러서 COM 포트에여러포트들이표시될경우, 맨마지막에있는포트가선택되어있는지확인한다. 만약아두이노프로그램업로드시아두이노보드에정상적으로업로드가되지않는다면, COM 포트를다른포트로변경해보기바란다. 스크립트나 C 언어입력모드 프로그램을새로작성하거나기존프로그램을불러올경우, 코드의내용을 블록또는스크립트 (C 언어포함 ) 모드로열어서보거나편집할수있다. 블록으로개발된코드를스크립트로볼수있으며, 반대로스크립트나 C 언 어로개발된코드를블록으로열어서볼수도있다

19 프로그램실행하기 아두이노개발환경은실질적으로 C언어이다. 사용자가블록코딩이나스크립트형태로개발하든결과물은반드시 C언어로변환된후, 컴파일되어야한다. SPL 코딩 SW는블록코딩이나스크립트로개발된코드를자동으로 C언어로변환을시킨다. 개발된 C 언어는컴파일과정을거쳐바이너리파일 (HEX 파일 ) 로생성되 며, 이파일을아두이노보드에업로드시키면아두이노보드에서실행되 게된다. 현재상태의비어있는기본프로그램을다음과같이실행버튼을클릭하여 업로드해보자

20 업로드결과확인하기 아두이노코딩툴의상단메뉴에서실행버튼을클릭한후, 다음과같이콘 솔창이뜨면서조금기다리면, 많은라인의결과들이화면에표시된다. 주의사항 콘솔창이표시된후, 콘솔창내부에위와같이메시지가표시되지않고다 르게표시된다면, 업로드가진행되지못한경우이다. 업로드실패원인 1 스크립트오류발생 ) 작성한프로그램에오류가있는경우에는위와달리 error: 라는단어가표시된문자열이표시된다. 콘솔창의메시지에 error: 표시가있다면프로그램에오류가있는경우이므로반드시오류를수정한후, 업로드하기바란다

21 업로드실패원인 2 아두이노보드미연결 ) 아두아노보드가연결되지않았습니다 라고메시지가뜨는경우는해당컴포트를인식하지못하였거나실제로아두이노보드와컴퓨터가연결되지않은경우이다. USB 케이블을연결하거나케이블을뺐다가다시연결한후, 업로드를실행해보기바란다. 업로드실패원인 3 아두이노보드선택오류 ) 콘솔창에서오랜시간이경과된후, 메시지가표시되는경우인데, 아두이노보드를다른종류로선택하여실행을한경우이다. 아두이노보드종류가 Arduino Uno로되어있는지다시한번확인해보기바란다. 업로드실패원인 4 COM 포트선택오류 ) 실패원인 3과비슷한경우로서, 아두이노보드의종류가정상적으로선택되어있다면, COM 포트에 COM 포트가여러개가있는지화인해보아야한다. 보통맨마지막에있는 COM 포트를선택하여진행하면정상적으로잘진행되는데, COM 포트를다른것을변경한후, 업로드를진행해보기바란다

22 1.3 전문가용아두이노코딩 SW 설치 아두이노 IDE 다운로드 전문가용아두이노코딩 SW는아두이노홈페이지에서다운로드받을수있다. 이툴은아두이노 IDE (Integrated Development Environment) 라고불리며, IDE 툴로만들어진소스코드를우리가보통스케치라고부른다. 따라서통상스케치개발툴이라고도불린다. 스케치코드를개발하는아두이노 IDE 툴은 MIT에서개발한프로세싱 ( 이라는 C언어교육용 SW에서사용중인개발툴로서, 아두이노그룹이이개발환경을가져다사용하고있다. 프로세싱에서만든소스코드도동일하게스케치라고불리기때문에스케치코드는아두이노에서만사용되는것이아니라는것에유의하기바란다. 아래의경로에접속하여아두이노 IDE 툴을다운로드받는다

23 Arduino IDE 다운로드화면에서두번째항목인 Windows ZIP file for non admin install 항목을클릭한다. Windows 용설치파일의비교 Windows Installer USB 드라이버까지자동으로설치해준다. PC 에관리자권한이있는경우에만설치가능 Windows ZIP file for non admin install 설치과정없이압축을아무폴더에나풀기만하면실행가능 USB 드라이버를따로설치해주어야한다. PC에관리자권한이없어도설치가가능하다

24 JUST DOWNLOAD 링크를클릭한다. 다른이름으로저장항목을클릭한후, 파일을저장하고자하는아무폴더 나지정한다

25 다운로드받은 zip 파일의압축을푼다. 주의사항 다운로드받은 zip 파일을더블클릭하지말고, 반드시압축을푼후에압축이풀린폴더로이동하여프로그램을실행해야한다. 압축을풀지않고 zip 파일을더블클릭하는경우에도 zip 파일의내용이폴더에보이게되는데, 사용자가이상태에서아두이노편집기파일을실행하게되면정상적으로실행되지않는다. USB 드라이버를설치하기전에는아두이노보드를아직 PC 에연결시키지 말고분리시켜놓는다

26 USB 드라이버설치 압축이풀린폴더로이동하면다음과같이파일들이보일것이다. 이목록 에서 drivers 라는폴더로이동한다. 윈도우 OS 종류에맞게해당 USB 드라이버설치파일을실행해준다

27 아두이노보드연결하기 아두이노우노보드를 USB 케이블을이용하여컴퓨터와연결해준다. 아두이노보드가컴퓨터에맨처음연결되는순간, 컴퓨터에서남아있는 USB 드라이버설치작업이자동으로진행되며, 10 초 ~ 20 초정도시간이 지나면설치작업이마무리된다. 주의사항 USB 드라이버를컴퓨터에연결한후, 진행되는 USB 드라이버설치마무리작업은따로눈에보이지않는다. 설치작업이끝나면조그만팝업창으로준비되었다는메시지창이보일수도있고그렇지않을수도있기때문에, USB 케이블연결후, 잠시기다렸다가프로그램을실행시켜주어야한다

28 프로그램실행하기 이전폴더로돌아가면아두이노압축이풀린폴더에 arduino.exe 라는실 행파일을볼수있을것이다. 이 exe 파일을실행한다. 툴 -> 보드 -> Arduino Uno 보드를선택한다

29 포트를선택한다. 포트가여러개인경우, 마지막포트를선택하거나 Arduio 라고표시된포트를선택한다. 예제실행하기 파일 -> 예제 -> 01.Basic -> Blink 예제를오픈한다

30 예제파일의내용을확인해본다. 왼쪽위에있는아이콘메뉴중에서다음그림과같이오른쪽화살표아이콘을클릭하여프로그램을아두이노보드에업로드해준다. 정상적으로업로드가완료되고나면화면아래콘솔창에업로드완료라는메시지가표시된다

31 02 LED 점멸하기 학습목표 디지털쓰기명령어 (DigitalWrite) 의활용방법을이해하고응용할수있다. 실습개요 아두이노의디지털쓰기 (DigitalWrite) 명령어로 LED를제어한다. 기다리기함수를이용하여 LED의점멸간격을조절해본다. setup() 과 loop() 함수의차이점을이해할수있다. 일정한시간후에자동으로꺼지는장치를구현해본다

32 2.1 아두이노쉴드및핀정보 아두이노쉴드 아두이노보드위에적층식으로쌓아나가는전자회로모듈을쉴드 (Shield) 라고부른다. 보통기능이복잡하거나연결되는핀수가많은모듈을별도로쉴드로개발하는경우가많다. 브레드보드가필요없는올인원쉴드 (All-In-One Shield) 는센서연결시브레드보드없이 3핀또는 4핀으로되어있는모듈을바로아두이노에연결할수있도록도와주는보드로서, 아두이노작품개발시시간을단축시켜주고아두이노의편리성을최대한활용하는보드이다

33 아두이노핀정보 아두이노는디지털핀 14 개와아날로그핀 6 개를가지고있다. 디지털핀과아날로그핀에는핀번호가 0 번부터부여된다. 디지털핀번호 (14개) 아날로그핀번호 (6개) D0 ~ D13 A0 ~ A5-31 -

34 디지털핀 디지털핀들은 GND ( 검정 ), 5V ( 빨강 ), Data 선 ( 초록 ) 등 3 개의핀으로 구성되어있으며, 부품을연결할때방향을맞추어연결해주어야한다. 디지털부품연결시케이블의색상또는각케이블이극성을확인하여연 결한다. 디지털 0 번 (Rx) 과 1 번 (Tx) 은시리얼통신에사용되기때문에실제로 D2 부 터부품을연결할수있다. 핀정보 GND 5V Data 케이블색상검정빨강초록

35 아두이노아날로그핀 아날로그핀들은 GND ( 검정 ), 5V ( 빨강 ), Data 선 ( 파랑 ) 등 3 개의핀으로 구성되어있으며, 부품을연결할때방향을맞추어연결해주어야한다. 아날로그 4 번 (A4) 과아날로그 5 번 (A5) 은 I2C 와같은다른용도로도사용되 기때문에아날로그부품을연결할때에는 A0 부터연결한다. 핀정보 GND 5V Data 케이블색상검정빨강파랑

36 2.2 준비하기 준비물 아두이노보드, 올인원쉴드, 디지털 LED 모듈 1 개 아두이노우노보드 올인원쉴드 디지털 LED 소자

37 H/W 연결하기 디지털 LED 소자를디지털 13 번에연결한다. 주의사항 센서및소자연결시케이블의색상을올인원쉴드의핀색상에맞게연결 해준다

38 2.3 디지털쓰기명령어 (DigitalWrite) 디지털쓰기명령어 LED 는디지털소자로서 0 과 1 또는 HIGH 와 LOW 등 2 가지상태중에한 가지상태의값을가진다. 디지털소자값의범위 0 또는 LOW : 꺼짐 1 또는 HIGH : 켜짐 디지털쓰기명령어 (DigitalWrite) 디지털소자에값을전달하기위한명령어는다음과같이 DigitalWrite 명 령어를사용한다. 핀번호와상태값을인수로전달한다. 디지털소자에값을쓰는명령어 DigitalWrite(13, LOW) : 디지털 13 번핀의값을끔 DigitalWrite(13, HIGH) : 디지털 13 번핀의값을켬 주의사항 디지털핀은 2 번부터 13 번핀까지총 12 개를사용할수있으나, 디지털 4, 5, 6, 7 번은자동차의모터를제어할때사용되므로, 해당핀을제외한 다른핀들에소자또는센서를연결해주어야한다

39 2.4 LED 켜기 LED 소자켜기 디지털 13 번에연결된 LED 소자를켜기위해서는아래와같이 DigitalWrite 명령어를사용하고, 핀번호 13, 그리고값을 HIGH 로설정해 준다. SPL 스크립트 스케치코드 // 디지털 13번핀에연결된 LED를켠다. DigitalWrite(13, HIGH) //1초간기다린다. Delay(1000) // 디지털 13번핀을쓰기모드로지정 pinmode(13, OUTPUT); // 디지털 13번핀에연결된 LED를켠다. digitalwrite(13, HIGH); //1초간기다린다. delay(1000); 실습 켜진 LED 를끄는기능으로프로그램을수정해보기바란다

40 참고자료 ) 상수와변수 프로그램에서상수는변경할수없는값을저장해놓은저장소이며, 이 와반대로변수는값을변경할수있는저장소이다. - 상수 : 값을변경할수없다. const int a = 10; - 변수 : 값을변경할수있다. int a = 10; 상수는자료형앞에 const 라는단어가더추가된다. 위의예에서사용된 HIGH 나 LOW 와같은단어는프로그램의내부에서 상수로정의된이름이다. 즉다음과같이내부에정의되어있다. const int HIGH = 1; const int LOW = 0; DigitalWrite 명령어에서상수대신에다음과같이직접값을사용해도 된다. DigitalWrite(13, 1) DigitalWrite(13, 0)

41 참고자료 ) 자료형 C 언어에서는변수를정의할때변수이름앞에자료형을표기해주어야 한다. 저장하고자하는값이어떠한종류인지를설명해주는것이다. 변수의자료형에는다음과같은종류들이있다. 자료형 int float byte char String boolean 설명 정수형 (Integer) 0, -50, 300 등의정수형숫자를저장한다. 실수형 (float) 0.5, -50.5, 등의실수형숫자를저장한다. 바이트형 (byte) 0 ~ 255 사이의숫자를저장한다. 문자형 (char) 알파벳문자나기호를저장한다. 문자열형 (String) 여러문자데이터를하나로이어서저장한다. 논리형 (Boolean) true 또는 false와같이논리형값을저장한다. int a = 10; 이라는의미는정수형값을저장하는변수 a 에 10 을저장 하라는의미이다

42 실습 앞에서소개된코드중에서상수로정의된부분을찾아본다. 아래제시된각각의자료형에대해사례가되는코드를작성해본다. 자료형 사례 int int a = 255; float float a = ; byte byte a = 25; char char c = A ; String String s = Hello ; boolean boolean b = true; 참고자료 ) C 언어는명령어뒤에 ; 로끝난다. 앞에서제시된예제에서스크립트와 C 언어를비교해봄으로써 C 언어사 용시어떠한특징들이있는지살펴보자. 다음은 SPL 스크립트와 C 언어의차이점이다. SPL 명령어스케치코드 (C 언어 ) DigitalWrite(13, HIGH) Delay(1000) digitalwrite(13, HIGH); delay(1000); C 언어문법에서는각명령어가 ; 로끝나는것에유의하기바란다

43 참고자료 ) 아두이노명령어가소문자로시작하는이유 모든스크립트코딩에서변수나함수등의이름을부여할때크게 4 가 지표기법중에한가지를따른다. 다음은 4 가지표기법의차이점을설명한것이다. 변수및함수표기법 설명변수나함수이름시작을자료형을나 타내는알파벳을붙인다. 헝가리안표기법 예 ) int inum = 10; 변수나함수이름이대문자로시작한 다. 파스칼언어나 C# 언어, SPL 등이 파스칼표기법 이표기법을따른다. 예 ) DigitalWrite(13, HIGH) 시작은소문자로하고중간에있는단 어는대문자로시작한다. Java 나아두 카멜표기법 이노함수등이이에해당한다. 예 ) digtalwrite(13, HIGH) 변수단어사이에 _ 를붙여서단어를 구분한다. 언더바표기법 예 ) digital_write(13, HIGH) 변수나함수이름이표기법은정답이있는것은아니고개발자의취향에 따라서달라지며, 자신이이해하기쉬운표기법을정해서프로그램전 체적으로일관되게적용하기만하면된다

44 2.5 LED 점멸시키기 LED 소자점멸시키기 디지털 LED 소자를점멸시키기위한코드는아래와같다. 프로그램을작성 한후 LED 점멸상태를확인해보기바란다. SPL 스크립트 스케치코드 // 디지털 13번핀에연결된 LED를켠다. DigitalWrite(13, HIGH ) //1초간기다린다. Delay(1000) // 디지털 13번핀에연결된 LED를끈다. DigitalWrite(13, LOW ) // 디지털 13번핀을쓰기모드로지정 pinmode(13, OUTPUT); // 디지털 13번핀에연결된 LED를켠다. digitalwrite(13, HIGH ); //1초간기다린다. delay(1000); // 디지털 13번핀에연결된 LED를끈다. digitalwrite(13, LOW ); //1 초간기다린다. Delay(1000) //1 초간기다린다. delay(1000); 실습 LED 의점멸주기를각각 500 밀리초, 100 밀리초, 50 밀리초, 20 밀리초등으 로수정하여점멸되는결과를확인해본다

45 2.6 setup() 함수와 loop() 함수 setup 과 loop 아두이노기본프로그램은다음과같이 setup() 함수와 loop() 기본함수가 자동으로만들어진상태에서시작한다. 아두이노프로그램을실행하면내부적으로다음과같이 main() 함수가만 들어진다. ; ; int main() setup(); while(true) loop(); return 0;

46 위의 main 함수를살펴보면 setup() 함수의내용이먼저실행되고, 그다 음으로는 loop() 함수만계속실행된다. setup() 함수는맨처음한번만실행된다. loop() 함수는 setup() 함수가실행된이후에실행되며, 아두이노에전원에 들어와있는동안에는무한히반복하여실행된다

47 2.7 일정한시간후에자동으로꺼지는 LED 등만들기 설계하기 일정한시간동안 LED 가켜진후, 그이후에는 LED 가계속꺼져있게하 려고한다. LED 를켜고끄는명령어를 setup() 함수와 loop() 함수중어 느곳에입력해야이기능을구현할수있을지생각해본다. 구현하기 아래의코드를일정한시간후에자동으로꺼지는기능이다. 아래의코드들 을 setup() 함수와 loop() 함수중어느곳에추가해야할지생각해보고 기능을완성해본다. SPL 스크립트 스케치코드 DigitalWrite(13, HIGH) Delay(3000) DigitalWrite(13, LOW) digitalwrite(13, HIGH); delay(3000); digitalwrite(13, LOW); 아래의코드를실행한후결과를확인해본다. digitalwrite(13, HIGH); delay(3000); digitalwrite(13, LOW);

48 setup() 함수에코드를추가하게되면한번만실행되게된다. setup() 함수에있는명령어들을다시실행시키려면아두이노보드에업로드된프로그램을처음부터다시실행시켜야주어야하는데, 이렇게아두이노프로그램을처음부터다시실행하기위해서는아두이노보드를리셋시켜주면된다. 아래그림과같이아날로그핀옆에있는리셋스위치를눌러서아두이노프로그램이처음부터다시실행되는지확인해보기바란다. 실습 앞의활동에서작성한코드중에서직접값을사용하지않고상수로선언 하여사용할수있는부분이어느부분이있는지생각해보고상수를정의 하여프로그램을수정해본다

49 03 절전기능 LED 후레쉬 학습목표 아두이노의디지털버튼작동방법을이해하고다양한용도로활용할수있다. 문자와문자라인출력문을이용하여아두이노내부의값을컴퓨터화면에출력할수있다. 실습개요 문자라인출력문을이용하여값을출력해본다. 문자출력문과문자라인출력문을조합하여구구단을출력해본다. 디지털읽기 (DigitalRead) 명령어로버튼값을인식해본다. 버튼눌림상태를이용하여 LED가켜져있는시간을지정할수있다

50 3.1 준비하기 준비물 아두이노보드, 올인원쉴드, 디지털 LED 모듈 1 개, 디지털버튼모듈 1 개 아두이노우노보드 올인원쉴드 디지털 LED 소자 디지털버튼

51 H/W 연결하기 디지털버튼을디지털 2 번핀에연결한다. 디지털 LED 소자를디지털 13 번에연결한다

52 3.2 문자및문자라인출력하기 문자라인출력하기 아두이노에서콘솔화면에문자열을한줄씩출력하는명령어는다음과같 이 PrintLine 또는 Serial.println 명령어를사용한다. SPL 스크립트 스케치코드 PrintLine( Hello ) PrintLine(12345) Serial.println( Hello ) Serial.println(12345) 1 씩증가하는숫자출력하기 콘솔화면에 1 씩증가하는숫자를출력해보자. SPL 스크립트 스케치코드 // 시리얼통신속도를설정해준다. Serial.begin(115200); a = 0 int a = 0; a = a + 1 PrintLine(a) Delay(1000) a = a + 1; Serial.println(a); delay(1000);

53 주의사항 Print 명령어는같은줄에값을이어서출력하고 PrintLine 명령어는값을 출력한후, 줄을바꾸게된다. PrintLine 명령어를사용해야할곳에 Print 명령어를사용하지않도록주의를기울인다. Print 명령어또는 PrintLine 명령어를코드에사용할경우에는반드시 100밀리초이상의값을가지는 delay 명령이반드시사용되어야한다. 만약 delay 명령어없이 Print나 PrintLine 명령어를사용하게되면엄청난크기의데이터가 PC로전달되어 PC의시리얼포트가다운되는문제가발생한다. PC의시리얼포트가다운되면아두이노프로그램업로드가실패하는상황이발생한다. 이경우에는일단아두이노보드의 USB 케이블을제거한후, 아두이노코딩 SW를종료한다. 그다음, 아두이노보드를 PC에연결한후코딩 SW를다시실행한후, 프로그램에 delay(100) 명령어를추가한다음업로드하면프로그램이정상적으로업로드될수있다

54 구구단출력하기 Print 명령어와 PrintLine 명령어를조합하여사용하면화면에필요한정보를보기좋게생성하여표시할수있다. Print 명령어는값을옆으로이어서출력하는기능이있으므로, 구구단의문자열을프로그램으로생성하여표시할수있다. SPL 스크립트 //7단을출력해본다. for (i = 1; i < 10; i++) Print( 7 x ) Print(i) Print( = ) PrintLine(i * 7) 스케치코드 Serial.begin(115200); //7단을출력해본다. for (int i = 1; i < 10; i++) Serial.print( 7 x ); Serial.print(i); Serial.print( = ); Serial.println(i * 7);

55 실습 다중 for 반복문을이용하여구구단전체를출력해본다. SPL 스크립트 for (i = 1; i < 10; i++) for (j = 1; i < 10; j++) Print(i) Print( x ) Print(j) Print( = ) PrintLine(i * j) 스케치코드 Serial.begin(115200); for (int i = 1; i < 10; i++) for (int j = 1; i < 10; j++) Serial.print(i); Serial.print( x ); Serial.print(j); Serial.print( = ); Serial.println(i * j);

56 3.3 DigitalRead 명령어로버튼값읽어오기 DigitalRead 아두이노의디지털핀에서값을읽어오는명령어는다음과같다. 변수 = DigitalRead( 핀번호 ) SPL 스크립트 스케치코드 d2 = DigitalRead(2) int d2 = digitalread(2); DigitalRead() 함수로읽은값은정수형변수에저장되며, 값은 0 (LOW) 또는 1 (HIGH) 중에하나가된다

57 디지털버튼값출력하기 디지털 2 번핀에연결되어있는디지털버튼의값을읽어와서화면에출 력하는코드이다. 핀번호와변수이름을확인한후아래의코드를작성해 본다. SPL 스크립트 스케치코드 d2 = DigitalRead( 2 ) PrintLine(d2) Delay(100) pinmode(2, INPUT); Serial.begin(115200); int d2 = digitalread( 2 ); Serial.println(d2); delay(100); 콘솔창에표시되는값을확인해보면, HIGH 나 LOW 가아닌 0 또는 1 숫자 로표시되는것에유의한다

58 3.4 버튼으로 LED 켜기 if 조건문 C 언어에서 if 조건비교명령어는괄호안에있는조건이참이면 if 블록안 에있는명령어를실행하게된다. if ( 조건이 true 이면 ) // 이곳에있는명령어들이실행된다. 예 ) if ( d2 == HIGH ) PrintLine( Button Pressed ) 조건이만족하지않는경우에명령어를실행하려면 else 블록을추가한다. if ( d2 == HIGH ) PrintLine( Button Pressed ) else PrintLine( Button Up )

59 if 조건문으로 LED 켜기 버튼의상태를 0.1 초간격으로읽어와서버튼의상태가 HIGH 이면 13 번 LED 를켜고그렇지않으면 13 번 LED 를끄는코드를작성해보자. 아래의예제에서 if 조건문에유의하여코드를작성해본다. SPL 스크립트 d2 = DigitalRead(2) if ( d2 == HIGH ) DigitalWrite(13, HIGH) else DigitalWrite(13, LOW) Delay(100) 스케치코드 pinmode(2, INPUT); pinmode(13, OUTPUT); int d2 = digitalread(2); if ( d2 == HIGH ) digitalwrite(13, HIGH); else digitalwrite(13, LOW); delay(100);

60 참고자료 if 블록의 와 은해당괄호영역안에명령어가한줄만있는경우에는생략이가능하다. 위의예제에서 if 블록안에명령어가한줄씩만있기때문에다음과같이 와 가생략이가능하다. 하지만 if 블록안에명령어가두줄이상이있는경우에는생략할수없다. SPL 스크립트 d2 = DigitalRead(2) if ( d2 == HIGH ) DigitalWrite(13, HIGH) else DigitalWrite(13, LOW) Delay(100) 스케치코드 pinmode(2, INPUT); pinmode(13, OUTPUT); int d2 = digitalread(2); if ( d2 == HIGH ) digitalwrite(13, HIGH); else digitalwrite(13, LOW); delay(100);

61 응용하기 버튼으로 LED 를켜는기능은다음과같이 2 줄의명령으로도실행이가능 하다. SPL 스크립트 d2 = DigitalRead(2) DigitalWrite(13, d2) 스케치코드 pinmode(2, INPUT); pinmode(13, OUTPUT); int d2 = digitalread(2); digitalwrite(13, d2);

62 3.5 버튼을누르고있는횟수측정하기 전역변수 버튼이눌려져있는횟수를저장하기위해전역변수를정의한다. 함수내부 에정의된변수는로컬변수또는지역변수라하고, 함수외부에정의된변 수는글로벌변수또는전역변수라고한다. 전역변수는프로그램전체에영향을미치지만지역변수는함수안에서만 사용할수있다. SPL 스크립트 스케치코드 cnt = 0 int cnt = 0; d2 = DigitalRead(2) if ( d2 == HIGH ) cnt = cnt + 1 PrintLine(cnt) Delay(100) pinmode(2, INPUT); Serial.begin(115200); int d2 = digitalread(2); if ( d2 == HIGH ) cnt = cnt + 1; Serial.println(cnt); delay(100); 위의코드에서 cnt = 0 선언명령어를 loop() 함수안으로옮길경우결과 가어떻게달라지는지확인해본다

63 3.6 절전기능후레쉬만들기 설계하기 버튼이눌려져있는횟수는 cnt 라는이름의전역변수에저장되어있다. LED를버튼을누르고있는시간에비례하여켜지도록기능을구현하려고한다. 예를들어버튼을 1초간누르고있으면 LED는 5초간켜지고, 버튼을 10초간누르고있으면 LED가 50초동안켜져있다가꺼지도록하려고한다. 필요한기능을설계해본다. 버튼이눌릴때마다 cnt 변수의값을 5 씩증가시켜준다. cnt 변수의값이 0 보다크면 cnt 변수의값을 1 씩감소시켜주고 LED 를 켜준다. cnt 변수의값이 0 과같으면 LED 를꺼준다

64 구현하기 원하는기능을구현하기위해프로그램을설계한후아래의코드를작성해 본다. SPL 스크립트 스케치코드 cnt = 0 int cnt = 0; d2 = DigitalRead(2) if ( d2 == HIGH ) cnt = cnt + 5 pinmode(2, INPUT); pinmode(13, OUTPUT); Serial.begin(115200); int d2 = digitalread(2); if (cnt > 0) cnt = cnt - 1 DigitalWrite(13, HIGH) else DigitalWrite(13, LOW) PrintLine( ) Delay(100) if ( d2 == HIGH ) cnt = cnt + 5; if (cnt > 0) cnt = cnt - 1; digitalwrite(13, HIGH); else digitalwrite(13, LOW); Serial.println(cnt); delay(100);

65 실습 버튼을 1 초간누르고있으면 LED 가 10 초간켜지고, 버튼을 10 초간누르고 있으면 LED 가 100 초동안켜져있다가꺼지도록기능을수정해본다. LED 가꺼지기 10 초전에 LED 를점멸하여 10 초후에 LED 가꺼진다는정 보를사용자에게알리고자한다. 어떠한기능을추가해야할지생각해보고 기능을완성해본다. 기능개선사항 LED 가꺼지기 10 초전에점멸로정보를주어사용자가 다시버튼을눌러 LED 가켜져있는시간을늘릴수있 도록기능을개선시켜본다

66 04 틱톡스위치만들기 학습목표 버튼의눌림상태를감지할수있는기능을구현할수있다. 버튼이눌리거나눌림이해제될때틱톡소리가나는기능을구현할수있다. 실습개요 전역변수를이용하여버튼이눌려져있는지감지하는기능을구현한다. 버튼이눌려지거나올라오는순간을감지하는기능을구현한다. 톤 (tone) 명령어를이용하여버튼이눌리거나올라올때다른소리가나도록한다

67 4.1 준비하기 준비물 아두이노보드, 올인원쉴드, 디지털버튼모듈, 스피커 아두이노우노보드 올인원쉴드 스피커 디지털버튼

68 H/W 연결하기 디지털버튼을디지털 2 번핀에연결한다. 스피커를디지털 3 번핀에연결한다

69 4.2 소리를발생시키는명령어 톤 (tone) 명령어 아두이노에서스피커를통해소리를발생시키는명령어는톤 (tone) 명령어 이다. Tone( 핀번호, 진동수, 소리지속시간 ) 디지털 3 번핀에연결된스피커를통해 1 초 (1000 밀리초 ) 동안 700 헤르츠 (Hz) 의소리가발생하도록설정하는명령어는다음과같다. SPL 스크립트 스케치코드 Tone(3, 700, 1000) Delay(1000) tone(3, 700, 1000); delay(1000);

70 소리를끄는방법 위의예제를실행하면계속삐소리가연주되면서시끄러운상황이만들어 진다. 스피커의소리를끄려면다음과같이빈프로그램을생성후실행하 여아두이노에서실행중인프로그램을지워버리면된다. SPL 스크립트 스케치코드

71 삐삐소리만들기 1초시간중에서 0.5초는삐소리가나고, 0.5초는소리가나지않도록하기위해서는다음과같이간단히 tone 명령어의세번째인수값을 500으로줄여주기만하면된다. delay 명령어에서 1000 밀리초간기다리는동안 0.5초간만소리가나기때문에나머지 0.5초동안에는소리가나지않는다. SPL 스크립트 스케치코드 Tone(3, 700, 500) Delay(1000) tone(3, 700, 500); delay(1000); 주의사항 tone 명령어에는 delay 기능이없기때문에 tone 명령어의소리가나는시간동안에는 tone 명령이다시실행되면안된다. 이러한이유때문에 tone 명령어뒤에 delay 명령어를두어 tone 명령어가일정시간이지난후에다시실행되도록해주어야한다

72 4.3 틱톡소리만들기 0.1 초간격으로소리만들기 틱톡소리를만들기위해다음과같이소리가발생하도록로직을완성해 본다. SPL 스크립트 스케치코드 Tone(3, 700, 100 ) Delay( 1000 ) tone(3, 700, 100 ); delay( 1000 ); Tone(3, 500, 100 ) Delay( 1000 ) tone(3, 500, 100 ); delay( 1000 );

73 4.4 버튼의눌림상태를전역변수로저장하기 pressed 변수선언 버튼이현재눌려져있는지아니면그렇지않은지상태를저장하고있는 전역변수를다음과같이추가해보자. SPL 스크립트 스케치코드 pressed = false boolean pressed = false; pinmode(2, INPUT); Serial.begin(115200); d2 = DigitalRead(2) if ( d2 == HIGH ) pressed = true else pressed = false int d2 = digitalread(2); if ( d2 == HIGH ) pressed = true; else pressed = false; PrintLine(pressed) Delay(100) Serial.println(pressed); delay(100);

74 4.5 버튼이눌려지는순간과올라오는순간을감지하기 버튼의상태변화감지 버튼이눌려지는순간에한번 Down 이라는메시지를출력하고, 버튼이 올라오는순간에한번 Up 이라는메시지를출력하려고한다. 버튼의상태가변하는순간을감지하기위해서는버튼의상태를저장하고있는전역변수의값을비교해야한다. 이전활동에서사용한 pressed와같은역할의전역변수값을비교하여버튼이눌려지거나올라오는순간을감지할수있다

75 버튼의상태변화감지코드 버튼이눌려지는순간과올라오는순간을감지하여메시지를표시하는코 드는다음과같다. SPL 스크립트 스케치코드 pressed = false boolean pressed = false; pinmode(2, INPUT); Serial.begin(115200); d2 = DigitalRead(2) if ( d2 == HIGH ) if (pressed == false) PrintLine( Down ) int d2 = digitalread(2); if ( d2 == HIGH ) if (pressed == false) pressed = true Serial.println( Down ) else pressed = true; if (pressed == true) PrintLine( Up ) else if (pressed == true) pressed = false Serial.println( Up ); pressed = false; Delay(100) delay(100);

76 4.6 틱톡스위치구현하기 소리기능추가하기 이전활동의코드들을활용하여버튼이눌리는순간 0.1 초동안 틱 소리 (700Hz) 가나고버튼이올라오는순간 톡 소리 (500Hz) 가나오도록 tone 명령어를추가하려고한다. 프로그램실행결과흫확인해본다. pressed = false SPL 스크립트 d2 = DigitalRead(2) if ( d2 == HIGH ) if (pressed == false) Tone(3, 700, 100) PrintLine( Down ) pressed = true else if (pressed == true) Tone(3, 500, 100 ) PrintLine( Up ) pressed = false Delay(100) 스케치코드 boolean pressed = false; pinmode(2, INPUT); Serial.begin(115200); int d2 = digitalread(2); if ( d2 == HIGH ) if (pressed == false) Tone(3, 700, 100); Serial.println( Down ); pressed = true; else if (pressed == true) Tone(3, 500, 100); Serial.println( Up ); pressed = false; delay(100);

77 실습 tone 명령어에사용된진동수값을다른값으로변경하여다른틱톡소리 가나오도록버튼의효과음을다양하게변경해보자

78 05 토글스위치를활용하는프로젝트 학습목표 디지털버튼의중복눌림방지를위한기능을구현할수있다. 디지털버튼의중복눌림방지기능및전역변수를활용하여 LED 전등이계속켜질수있도록토글스위치기능을구현할수있다. 차량의방향지시등과비상등기능을구현할수있다. 실습개요 버튼의중복눌림감지를방지하는기능을구현한다. 버튼눌림상태를이용하여토글기능을구현하다. 한번의버튼눌림으로 LED 등을켜거나끌수있는편리한전등을구현해본다. 토글기능으로취침시간을설정할수있는취침등을제작해본다. 토글기능으로차량의방향지시등과비상등기능을구현해본다

79 5.1 준비하기 준비물 아두이노보드, 올인원쉴드, 디지털버튼모듈, 스피커, LED 모듈 아두이노우노보드 올인원쉴드 스피커 디지털버튼 LED 모듈

80 H/W 연결하기 디지털버튼을디지털 2 번핀에연결한다. 스피커를디지털 3 번핀에연결한다. 디지털 LED 소자를디지털 13 번에연결한다

81 5.2 버튼의눌림횟수를표시하는장치만들기 눌림횟수체크장치 버튼을눌러 1 씩증가하는장치를만들어학생들의인원수를세려고한다. 버튼이눌릴때마다 1 씩증가시켜화면에출력하는기능을구현해본다. 이전활동에서작성한프로그램에기능을추가하여버튼이눌려졌다가올 라오는순간에 1 씩증가하도록기능을구현해본다. SPL 스크립트 스케치코드 pressed = false cnt = 0 d2 = DigitalRead(2) if ( d2 == HIGH ) pressed = true else if (pressed == true) cnt = cnt + 1 Tone(3, 500, 100) PrintLine(cnt) pressed = false Delay(100) boolean pressed = false; int cnt = 0; pinmode(2, INPUT); Serial.begin(115200); int d2 = digitalread(2); if ( d2 == HIGH ) pressed = true; else if (pressed == true) cnt = cnt + 1; tone(3, 500, 100); Serial.println(cnt); pressed = false; delay(100);

82 5.3 토글기능구현하기 토글기능 이전활동에서사용된 cnt 전역변수값이버튼이눌릴때마다 0 과 1 값으로반복해서변경되도록해보자. 즉버튼이처음눌리면 cnt 값이 0에서 1로바뀌고, 버튼이다시눌리면 cnt 값이 1에서 0으로다시변경되도록기능을구현해본다. 버튼이눌릴때마다 cnt 값이 0 또는 1 이되도록하기위해서어떠한기 능이필요할지생각해보고코드를완성해보자. SPL 스크립트 스케치코드 pressed = false cnt = 0 d2 = DigitalRead(2) if ( d2 == HIGH ) pressed = true else if (pressed == true) Tone(3, 500, 100) if (cnt == 0) cnt = 1 else cnt = 0 boolean pressed = false; int cnt = 0; pinmode(2, INPUT); Serial.begin(115200); int d2 = digitalread(2); if ( d2 == HIGH ) pressed = true; else if (pressed == true) tone(3, 500, 100); if (cnt == 0) cnt = 1; else

83 PrintLine(cnt) pressed = false Delay(100) cnt = 0; Serial.println(cnt); pressed = false; delay(100);

84 참고자료 나머지연산자를이용하면변수가 0 과 1 을반복하는과정을간단히한두 줄로구현할수있다. cnt 변수값이 2 가되면나머지값이 0 이되어, 다시 0 으로저장된다. SPL 스크립트 스케치코드 pressed = false cnt = 0 d2 = DigitalRead(2) if ( d2 == HIGH ) pressed = true else if (pressed == true) Tone(3, 500, 100) cnt = cnt + 1 cnt = cnt % 2 PrintLine(cnt) pressed = false Delay(100) boolean pressed = false; int cnt = 0; pinmode(2, INPUT); Serial.begin(115200); int d2 = digitalread(2); if ( d2 == HIGH ) pressed = true; else if (pressed == true) tone(3, 500, 100); cnt = cnt + 1; cnt = cnt % 2; Serial.println(cnt); pressed = false; delay(100);

85 일반적으로변수가일정한값범위를반복하게하려면다음과같이증가하 는수식과나머지연산을한줄어묶어서구현한다. SPL 스크립트 스케치코드 pressed = false cnt = 0 d2 = DigitalRead(2) if ( d2 == HIGH ) pressed = true else if (pressed == true) Tone(3, 500, 100) cnt = (cnt + 1) % 2 boolean pressed = false; int cnt = 0; pinmode(2, INPUT); Serial.begin(115200); int d2 = digitalread(2); if ( d2 == HIGH ) pressed = true; else if (pressed == true) tone(3, 500, 100); PrintLine(cnt) pressed = false Delay(100) cnt = (cnt + 1) % 2; Serial.println(cnt); pressed = false; delay(100);

86 5.4 토글기능으로 LED 작동시키기 토글 LED 이전활동에서는 LED 를켜기위해버튼을계속누르고있어야하는번거 로움이있었다. 이러한번거로움을없애기위해서버튼을한번누르면 LED 등이켜지고, 다시한번누르면 LED 등이꺼지도록하려고한다. LED 등을제어하는명령어를추가하여기능을완성해보기바란다. SPL 스크립트 스케치코드 pressed = false cnt = 0 d2 = DigitalRead(2) if ( d2 == HIGH ) pressed = true else if (pressed == true) Tone(3, 500, 100) if (cnt == 0) cnt = 1 DigitalWrite(13, HIGH ) else cnt = 0 DigitalWrite(13, LOW ) boolean pressed = false; int cnt = 0; pinmode(2, INPUT); pinmode(13, OUTPUT); Serial.begin(115200); int d2 = digitalread(2); if ( d2 == HIGH ) pressed = true; else if (pressed == true) tone(3, 500, 100); if (cnt == 0) cnt = 1; digitalwrite(13, HIGH ); else cnt = 0;

87 PrintLine(cnt) digitalwrite(13, LOW ); pressed = false Serial.println(cnt); Delay(100) pressed = false; delay(100);

88 실습 저절로꺼지는취침등 버튼을한번씩누를때마다 LED 가켜져있는시간이 10 초씩늘어나도록 하려고한다. 예를들어, 버튼을 3 번누르면 30 초간 LED 등이켜진후다시꺼지도록 하는기능을기존코드에추가하여저절로꺼지는취침등을구현해보자. 힌트 LED가켜져있어야하는시간을저장하기위한전역변수를정의한다. 전역변수는기존예제에서정의된 cnt 값을이용한다. 버튼이눌려졌다가올라갈때마다 cnt 값을 100씩증가시킨다. loop 함수는 0.1초마다반복되므로, 100번반복하면 10초가된다. cnt 값이 0보다크면 1씩감소시켜주고 LED를켠다. cnt 값이 0과같으면 LED를꺼준다

89 pressed = false cnt = 0 d2 = DigitalRead(2) SPL 스크립트 if ( d2 == HIGH ) pressed = true else if (pressed == true) cnt = cnt Tone(3, 500, 100) PrintLine(cnt) pressed = false 스케치코드 boolean pressed = false; int cnt = 0; pinmode(2, INPUT); pinmode(13, OUTPUT); Serial.begin(115200); int d2 = digitalread(2); if ( d2 == HIGH ) pressed = true; else if (pressed == true) cnt = cnt + 100; tone(3, 500, 100); Serial.println(cnt); if ( cnt > 0 ) cnt = cnt - 1 DigitalWrite(13, HIGH ) else DigitalWrite(13, LOW ) Delay(100) pressed = false; if ( cnt > 0 ) cnt = cnt - 1; digitalwrite(13, HIGH ); else digitalwrite(13, LOW ); delay(100); 위의코드에서 cnt 가 0 보다큰경우에는 LED 가켜지고, cnt 값은버튼이 켜져있어야하는시간의의미를가짐을이해하기바란다

90 팀프로젝트실습 차량방향지시등 활동 1) 자동차에쓰이는방향지시등기능을버튼과 LED 를이용하여구현 하려고한다. 버튼을한번누르면 LED 가틱톡소리와함께점멸하고, 버튼 을다시한번누르면 LED 점멸이멈추도록한다. 활동 2) 위의기본기능이완성된후에는버튼과 LED 를추가하여왼쪽과 오른쪽방향지시등기능을모두완성해본다. 이실습에서는버튼 2 개, LED 2 개, 스피커 1 개가사용된다. 활동 3) 또다른버튼을추가하여비상등기능을구현해본다. 3 번째버튼을 추가하면양쪽의 LED 가틱톡소리와함께같이점멸되도록한다. 이실습 에서는버튼 3 개, LED 2 개, 스피커 1 개가사용된다. 활동 4) 로봇자동차키트에 LED 와스피커, 버튼을장착하여방향지시등기 능을시현해본다

91 pressed = false cnt = 0 d2 = DigitalRead(2) SPL 스크립트 if ( d2 == HIGH ) pressed = true else if (pressed == true) if (cnt == 0) cnt = 1 else cnt = 0 PrintLine(cnt) 스케치코드 boolean pressed = false; int cnt = 0; pinmode(2, INPUT); pinmode(13, OUTPUT); Serial.begin(115200); int d2 = digitalread(2); if ( d2 == HIGH ) pressed = true; else if (pressed == true) if (cnt == 0) cnt = 1; else cnt = 0; pressed = false Serial.println(cnt); // 이곳에방향지시등기능을추가한다. if ( cnt == 1 ) DigitalWrite(13, HIGH) Tone(3, 700, 100) Delay(500) DigitalWrite(13, LOW) Tone(3, 500, 100) Delay(500) Delay(100) pressed = false; // 이곳에방향지시등기능을추가한다. if ( cnt == 1 ) digitalwrite(13, HIGH); tone(3, 700, 100); delay(500); digitalwrite(13, LOW); tone(3, 500, 100); delay(500); delay(100);

92 주의사항 C 언어에서 if 나 else 조건문에서해당조건문이블록에속하는명령어가 하나인경우에는 와 괄호가생략될수있다. 아래의 2가지코드는동일한기능을수행하는코드로서 C언어문법을준수하는코드이다. 아래코드에서사용된 if 조건문을살펴보면 와 사이에오는명령어가한줄일경우, 와 괄호가생략될수있으나, 명령어가 2줄이상인경우에는생략할수없음에유의하기바란다. 중괄호를사용하는경우 a = 10 b = 20 if ( a == 10 ) DigitalWrite(13, HIGH) else DigitalWrite(13, LOW) if ( b == 10 ) DigitalWrite(13, HIGH) PrintLine( On ) else DigitalWrite(13, LOW) PrintLine( Off ) 중괄호가생략된경우 a = 10 if ( a == 10) DigitalWrite(13, HIGH) else DigitalWrite(13, LOW) if ( b == 10 ) DigitalWrite(13, HIGH) PrintLine( On ) else DigitalWrite(13, LOW) PrintLine( Off )

93 06 스마트헤드라이트 학습목표 아두이노의아날로그명령어를이해하고활용할수있다. 조도센서의작동원리를이해하고활용할수있다. 어두워지면저절로켜지는장치를구현하여자동차의헤드라이트와같은분야에응용할수있다. 아두이노의 PWM 핀을활용하여 LED의밝기를조절할수있다. 실습개요 아두이노의아날로그센서값을읽어와서화면에표시한다. 임계치를결정하여어두워지면저절로켜지는장치를구현하다. LED 의밝기를조절해본다

94 6.1 준비하기 준비물 아두이노보드, 올인원쉴드, 아날로그조도센서, LED 모듈 아두이노우노보드 올인원쉴드 디지털 LED 모듈 아날로그조도센서

95 H/W 연결하기 디지털 LED 소자를디지털 13 번에연결한다. 아날로그조도센서를아날로그 0 번핀에연결한다

96 설계하기 LED 를헤드라이트대신사용한다. 밝기를측정하기위해조도센서를사용한다. 제어보드로아두이노보드를사용한다

97 6.2 조도센서값확인하기 아날로그센서값읽기 아날로그조도센서를활용하기위해서는첫번째절차로서아날로그센서 인조도센서의값을확인해보는단계이다. 아날로그센서는다음과같이 1024 크기의값의범위를가진다. 아날로그센서값의범위 0 ~ 1023 아날로그센서의값을읽기위해서는다음과같이 AnalogRead 명령어를 이용한다. SPL 스크립트 스케치코드 a0 = AnalogRead( 핀번호 ) int a0 = analogread( 핀번호 );

98 조도센서값읽기 조도센서가어떠한특성으로작동하는지확인하기위해다음의코드를실 행하여결과를기록해본다. SPL 스크립트 스케치코드 Serial.begin(115200); // 아날로그 0번핀에서값을읽어서 // 변수에저장한다. a0 = AnalogRead(0) // 한라인씩값을콘솔에출력한다. PrintLine(a0) // 아날로그 0번핀에서값을읽어서 // 변수에저장한다. int a0 = analogread(0); // 한라인씩값을콘솔에출력한다. Serial.println(a0); //0.1 초씩기다린다. Delay(100) //0.1 초씩기다린다. delay(100); 위의코드를아두이노보드에업로드한후, 조도센서를손으로빛을가려 가면서어둡게하거나밝게해보기바란다. 콘솔창에서다음과같이변화 되는값을확인할수있다

99 실행결과 ) 밝기가밝을수록출력되는숫자값이크고, 어두워질수록값이작아지는 것을볼수있다

100 6.3 헤드라이트가켜지는조건 LED 가켜지기위한조건 자동차의헤드라이트역할은아두이노에서 LED 가대신한다. 본실습에서는 어두워지는조건을만족하면 LED 가자동으로켜지도록기능을구현하려고 한다. 아래의순서도는어두워지는조건을정의하는것으로서, 아날로그조도센 서의값이일정한값이하이면 LED 가켜지도록하는과정을정의한것이 다. 빈칸에어떠한숫자가들어가야할지생각해보고값을입력해본다

101 6.4 헤드라이트를자동으로켜는기능구현하기 LED 를자동으로켜기 자동차의헤드라이트를외부밝기에따라어두우면자동으로켜기위한코 드를다음과같이구현해보자. SPL 스크립트 a0 = AnalogRead(0) PrintLine(a0) if (a0 < 500 ) // 이곳에 LED를켜는명령어를추가한다. DigitalWrite(13, HIGH ) else // 이곳에 LED를끄는명령어를추가한다. DigitalWrite(13, LOW ) Delay(100) 스케치코드 pinmode(13, OUTPUT); Serial.begin(115200); int a0 = analogread(0); Serial.println(a0); if (a0 < 500 ) // 이곳에 LED를켜는명령어를추가한다. digitalwrite(13, HIGH ); else // 이곳에 LED를끄는명령어를추가한다. digitalwrite(13, LOW ); delay(100); 주의사항 조도센서는센서마다약간씩차이가날수있다. LED 를켜기위한기준 값은센서값을확인해보고, 최대값과최소값의중간정도값으로설정 해보도록한다

102 6.5 밝기가조절되는헤드라이트 디지털 PWM 핀 이번에는헤드라이트의밝기를조절하는기능을구현해본다. 아두이노의 디지털핀중에서 3, 5, 6, 9, 10, 11 핀의경우에는다른핀들과달리 256 단계로출력값을설정하는기능이가능하다. 이핀들은 PWM (Pulse Width Modulation) 핀이라고부른다. 아두이노보드의디지털핀중에서 PWM 핀에는 ~ 표시가붙어있다

103 PWM 의작동원리 아두이노보드의 PWM 은필요한전압을 0 과 1 의간격을조절하여생성한 다. 0 ~ 255 사이의값을 PWM 핀에입력하면 0V ~ 5V 사이의가상전압이 만들어진다

104 AnalogWrite PWM 핀에값을쓸때에는 AnalogWrite 명령어를사용한다. SPL 스크립트 스케치코드 AnalogWrite( 핀번호, 값 ) analogwrite( 핀번호, 값 ); 기존의 DigitalWrite 명령어는 0 과 1 또는 HIGH 와 LOW 상태로만값을출 력시킬수있지만, AnalogWrite 명령어를사용하면 0 ~ 255 사이의값을 디지털핀에출력시킬수있다. AnalogWrite 명령어사용법 AnalogWrite(11, 0) : LED 를끔 AnalogWrite(11, 255) : LED 를가장밝게켬 AnalogWrite(11, 120) : 중간밝기로 LED 를켬 주의사항 AnalogWrite 명령어는비록 Analog라는단어가붙어있긴하지만실질적으로는디지털명령어이다. 기존 AnalogRead 명령어에서읽은값은 0 ~ 1023 사이의값을가지는반면에 AnalogWrite 명령어에서는 256 단계의값만사용할수있다

105 구현하기 디지털 13 번에연결되어있는 LED 소자를디지털 11 번으로옮겨서연결한 다. 아래의코드는 LED 의밝기를 256 단계로변화를주는과정을보여준다. 구 현해야할기능에대해생각해본후코드를완성해본다. SPL 스크립트 스케치코드 for (i = 0; i < 256; i++) // 이곳에 LED의밝기를 256단계로 // 변화시키는명령어를추가한다. AnalogWrite(11, i ) for (int i = 0; i < 256; i++) // 이곳에 LED의밝기를 256단계로 // 변화시키는명령어를추가한다. analogwrite(11, i ); Delay(10) delay(10); for 반복문은반복되는횟수를지정할수있는반복문으로서, 반복조건문 에사용되는변수값이증가및감소조건에따라값이변화된다

106 실습 LED 의밝기가서서히밝아졌다가서서히어두워지도록기능을수정해본 다. 디지털 10번에또다른 LED를연결한후, 2개의 LED의밝기변화가서로대칭이되도록기능을수정해본다. 한쪽 LED가서서히밝아질때다른쪽 LED는서서히어두워지도록하고, 각각의 LED가이과정을반복하도록기능을구현해본다

107 6.6 외부밝기에따라자동반응하는헤드라이트 자동감응헤드라이트 이전활동에서실습한내용을기반으로외부의밝기에따라차량의헤드라 이트밝기가자동으로조절되는기능을작성해보자. 다음과같은기능에대해생각해보고, 필요한로직을완성해본다. 외부조도에반응하는헤드라이트 외부의밝기가밝으면헤드라이트의밝기가약해지고, 외부가어 두워질수록헤드라이트의밝기는세진다. 구현하기 아래의코드는조도센서의값을 LED 의밝기값으로변환하여조도센서 값에따라상대적으로 LED 의출력값이조절되는기능을추가한과정을 보여준다

108 SPL 스크립트 스케치코드 Serial.begin(115200); a0 = AnalogRead(0) int a0 = analogread(0); // 조도센서값을 LED 출력값으로변환한다. b = 1023 a0 // 조도센서값을 LED 출력값으로변환한다. int b = 1023 a0; // 값을 4 로나누어 0 ~ 255 사이의 // 값으로변환한다. b = b / 4 // 값을 4 로나누어 0 ~ 255 사이의 // 값으로변환한다. b = b / 4; PrintLine(b) Serial.println(b); AnalogWrite(11, b ) analogwrite(11, b ); Delay(100) delay(100);

109 6.7 매핑함수 map() 함수 이전예제에서는읽은센서의값을 PWM 에전달하기위한용도로변환하 기위해 2 번정도계산과정을거쳤다. 그리어려운과정은아니지만, 수 식의내용을한번에이해하기어려운문제점이발생한다. 아두이노에서는값을다른범위로한번에변환시킬수있는유용한함수를 제공한다. 함수이름은 map() 으로서다음과같이사용할수있다. 변환값 = map( 원본값, 원본시작값, 원본끝값, 변환대상시작값, 변환대상끝값 ) 이전예제에서변환되는과정을 map 함수를이용하면다음과같이적용할 수있다. // 조도센서값을 LED 출력값으로변환한다. b = 1023 a0 map 함수를사용하지않을경우 // 값을 4 로나누어 0 ~ 255 사이의 // 값으로변환한다. b = b / 4 map 함수를사용할경우 b = map(a0, 0, 1023, 255, 0) a0 값은 0 ~ 1023 범위를가지는값인데, 이를 255 ~ 0 범위로값을매핑 시키라는의미입니다. 값의범위가작아지면서반대로뒤집히는효과를한 번에얻을수있습니다

110 실습 map() 함수를이용하여, 이전활동의예제를수정해본다. map() 함수를활용하는다양한사례를제시해본다

111 07 동체인식및경보음실행장치만들기 학습목표 아날로그 PSD 거리센서를이해하고활용할수있다. 동체인식장치의작동원리를이해하고구현할수있다. 경보음소리를발생시킬수있으며, 침입탐지장치에적용할수있다. 실습개요 PSD 센서의특징을확인한다. 디지털거리계장치를구현한다. 동체인식장치를구현해본다. tone 명령어를이용해경보음소리를구현해본다. 침입탐지및경보장치를구현해본다

112 7.1 준비하기 준비물 아두이노보드, 올인원쉴드, 아날로그 PSD 센서, LED 모듈, 스피커 아두이노우노보드 올인원쉴드 디지털 LED 모듈 아날로그 PSD 거리센서 스피커

113 H/W 연결하기 디지털 LED 소자를디지털 13 번에연결한다. 스피커를디지털 3 번에연결한다. 아날로그 PSD 거리센서를아날로그 0 번핀에연결한다

114 7.2 PSD 거리센서값확인하기 아날로그 PSD 거리센서값 아날로그 PSD 거리센서를활용하기위해서는첫번째절차로서아날로그 센서인 PSD 센서의값을확인해보는단계이다. 아날로그센서는다음과 같이 1024 크기의값의범위를가진다. 아날로그센서값의범위 0 ~ 1023 아날로그 PSD 거리센서의값을읽기위해서는다음과같이 AnalogRead 명령어를이용한다. SPL 스크립트 스케치코드 a0 = AnalogRead( 핀번호 ) int a0 = analogread( 핀번호 );

115 PSD 센서값읽기 PSD 거리센서가어떠한특성으로작동하는지확인하기위해다음의코드 를실행하여결과를기록해본다. SPL 스크립트 스케치코드 Serial.begin(115200); // 아날로그 0번핀에서값을읽어서 // 변수에저장한다. a0 = AnalogRead(0) // 한라인씩값을콘솔에출력한다. PrintLine(a0) // 아날로그 0번핀에서값을읽어서 // 변수에저장한다. int a0 = analogread(0); // 한라인씩값을콘솔에출력한다. Serial.println(a0); //0.1 초씩기다린다. Delay(100) //0.1 초씩기다린다. delay(100); 위의코드를아두이노보드에업로드한후, PSD 센서앞에서손을움직여 보기바란다

116 주의사항 PSD 센서는유효측정거리가 10cm ~ 80cm 이다. 따라서손을너무가까 이접근시키지말고 10cm 에서 80cm 사이를움직여본다. PSD 센서는대상물체와의거리가멀수록값이작고가까울수록값이커 지는특성이있으므로이값의특성에유의하기바란다. 센서앞에대상물체가없는경우는 100 이하의작은값이읽혀지며, 대상 물체가센서쪽으로가까이접근할수록 900 이상의값으로점차증가한 다

117 7.3 디지털거리계만들기 구현하기 map() 함수를이용하면 PSD 센서값을간단히거리값으로변환시킬수있 다. 정확도는낮지만거리계처럼유사한값을출력시킬수있다. SPL 스크립트 a0 = AnalogRead(0) a0 = Map(a0, 0, 1023, 80, 10) Print(a0) PrintLine("cm") Delay(100) 스케치코드 pinmode(13, OUTPUT); Serial.begin(115200); int a0 = analogread(0); a0 = map(a0, 0, 1023, 80, 10); Serial.print(a0); Serial.println( cm ); delay(100); 위의코드에서 map 함수는 0 ~ 1023 범위로읽혀지는 PSD 센서값을 80 ~ 10cm 거리로변환시키는기능을수행한다

118 7.4 동체인식장치구현하기 움직임이감지되면 3 초간 LED 켜기 아파트현관이나엘리베이터앞에는동체인식장치가천장에부착되어있 어사람들의움직임이감지되면자동으로등이켜지는기능이작동한다. PSD 센서를이용해이와유사한기능을구현할수있는데, PSD 센서앞 에움직임이감지되면 LED 가 3 초간켜져있도록하는기능을구현해보 자. SPL 스크립트 a0 = AnalogRead(0) PrintLine(a0) // 움직이는대상을감지한다. if (a0 > 100 ) //LED를켠다 DigitalWrite(13, HIGH) //3초간기다린다. Delay(3000) //LED를끈다. DigitalWrite(13, LOW) Delay(100) 스케치코드 pinmode(13, OUTPUT); Serial.begin(115200); int a0 = analogread(0); Serial.println(a0); // 움직이는대상을감지한다. if (a0 > 100 ) //LED를켠다 digitalwrite(13, HIGH); //3초간기다린다. delay(3000); //LED를끈다. digitalwrite(13, LOW); delay(100);

119 위의코드가실제실행된다면어떠한문제점이발생할지예측해보자. 주의사항 실생활에적용되는모든센서는아주짧은시간간격으로계속감지되어야 한다. 위의예제에서는중간에 delay(3000) 이라는아주큰시간만큼실행을멈 추는기능이들어가있다. 3 초만큼의시간동안센서감지가멈추어있게 되는문제가발생한다. 실생활에적용되기위한프로그램을작성할때에는프로그램중간에위와같이큰시간동안실행을멈추는 delay 명령어를사용하는것을가급적자제해야한다. delay 명령어는프로그램맨아래에아주짧은간격으로가능한한한번정도사용해주면된다

120 7.5 움직임을계속감지하는동체인식장치 움직이는동안에는계속 LED 가켜져있도록하기 이번에는기능을보완하여 LED 가켜져있는동안에도 PSD 센서앞에서 대상물체가움직이면 LED 가계속켜져있도록한다. 즉, 대상물체가 PSD 센서앞에서계속움직일경우에는 LED 가계속켜 져있고, 센서앞에대상물체가없을경우에는마지막감지이후 3 초후 에 LED 가꺼지도록한다. delay 명령어는프로그램아래에 delay(100) 명령어한번만오도록기능을 설계해본다. 나누어서기능을수행하기 만약 3 초간어떠한기능을수행해야한다면, 이를 0.1 초간격으로 30 번수 행하면동일한결과를얻을수있다. 즉 LED 를 3 초간켜기위해서 delay(3000) 대신에 delay(100) 을 30 번반복 하면동일한효과가발생을하는것이다

121 loop() 반복을이용해 LED 를 3 초간겨기 아래의코드는 loop() 함수가반복되는특성을이용해 LED 가 3 초간켜져 있도록하는프로그램을보여준다 * delay 100 밀리초 => 30 * 100 => 3000 => 3 초 SPL 스크립트 스케치코드 cnt = 30 if ( cnt > 0) cnt = cnt - 1 //LED를켠다. DigitalWrite(13, HIGH) else //LED를끈다. DigitalWrite(13, LOW) int cnt = 30; pinmode(13, OUTPUT); if ( cnt > 0) cnt = cnt - 1; //LED를켠다. digitalwrite(13, HIGH); else //LED를끈다. digitalwrite(13, LOW); //0.1 초를기다린다. Delay(100) //0.1 초를기다린다. delay(100); cnt 값은 30으로초기화되어있고 loop 함수가실행되면값이 1씩감소한다. 결국 30번정도반복하면값이 0이되며, LED가꺼지게된다. 0.1 초를 30번반복하는효과를 cnt 변수를통해서구현한것이다. 주의사항 cnt 변수이름은다른이름으로수정하여사용해도된다. 단지 count 라는 의미의단어를줄여서사용한것이다

122 구현하기 아래프로그램의기능을완성해본다. SPL 스크립트 스케치코드 cnt = 0 int cnt = 0; pinmode(13, OUTPUT); a0 = AnalogRead(0) int a0 = analogread(0); // 움직이는대상을감지한다. if (a0 > 100 ) cnt = 30 // 움직이는대상을감지한다. if (a0 > 100 ) cnt = 30 ; if ( cnt > 0) cnt = cnt - 1 if ( cnt > 0) cnt = cnt - 1; //LED를켠다. DigitalWrite(13, HIGH) else //LED를끈다. DigitalWrite(13, LOW) //LED를켠다. digitalwrite(13, HIGH); else //LED를끈다. digitalwrite(13, LOW); //0.1 초를기다린다. Delay(100) //0.1 초를기다린다. delay(100);

123 실습 동체인식장치를통해움직임이감지되면 5 초간 LED 가켜져있도록한다. 이때마지막 2 초동안은 LED 가점멸하여잠시후꺼질수있음을사용자에 게전달할수있는기능을구현해본다

124 7.6 경보음소리발생시키기 tone 명령어로경보음소리발생시키기 tone 명령어에서진동수값을아주빠르게증가시켜주거나감소시켜주면 사이렌소리나경보음소리와같은효과를발생시킬수있다. 다음의코드를실행하여어떠한소리가발생하는지확인해본다. SPL 스크립트 스케치코드 for (i = 0; i <100; i++) f = i * i tone(3, f, 100) delay(10) for (int i = 0; i <100; i++) int f = i * i; tone(3, f, 100); delay(10);

125 실습 delay 간격을 1 로수정할경우어떠한소리가발생하는지관찰해본다. 진동수값이증가하다가감소하는기능을추가하여다양한경보음소리패 턴을구현해본다

126 7.7 경보음소리기능을함수로만들기 함수만들기 반복적으로사용되는기능은함수로분리해놓으면프로그램의길이가줄 어들고재사용성이높아진다. 함수는다음과같은규칙으로생성한다. 넘겨주는값이없는경우 넘겨주는값이있는경우 void 함수이름 () // 이곳에명령어들을추가한다. 자료형함수이름 () // 이곳에명령어들을추가한다. return 결과값 ; 함수를만드는예는다음과같다. 넘겨주는값이없는경우 넘겨주는값이있는경우 void LEDBlink() DigitalWrite(13, HIGH) int Sum(int a, int b) c = a + b delay(1000) return c DigitalWrite(13, LOW) delay(1000)

127 경보음소리함수만들기 아래코드는이전활동에서작성한코드에서경보음소리발생부분을함 수로변환한예를보여준다. SPL 스크립트 스케치코드 void PlayAlert() for (i = 0; i <100; i++) f = i * i tone(3, f, 100) delay(10) void PlayAlert() for (int i = 0; i <100; i++) int f = i * i; tone(3, f, 100); delay(10); PlayAlert() PlayAlert();

128 7.8 보안경보장치만들기 침입탐지장치 PSD 센서와경보음소리발생기능을이용하여 PSD 센서앞에대상물체 가감지되면경보음소리가 3 초간실행되는기능을구현해보자. SPL 스크립트 스케치코드 void PlayAlert() for (i = 0; i <100; i++) f = i * i tone(3, f, 100) delay(10) void PlayAlert() for (int i = 0; i <100; i++) int f = i * i; tone(3, f, 100); delay(10); a0 = AnalogRead(0) int a0 = analogread(0); // 움직이는대상을감지한다. if (a0 > 100 ) for (i = 0; i < 3; i++) PlayAlert() // 움직이는대상을감지한다. if (a0 > 100 ) for (int i = 0; i < 3; i++) PlayAlert(); delay(100) delay(100);

129 7.9 경광등기능이추가된보안경보장치 설계하기 이전활동에서구현한보안감지장치는소리만발생한다. 대상물체가감지 되면소리뿐만이아니라 LED 도같이점멸하도록기능을추가해보자. 전체코드중에서어느위치에 LED 를점멸하는기능을추가해야할지생 각해보고적당한위치를찾아보자. 만약, PlayAlert() 함수에 LED 를점멸하는기능을추가시키려고한다면함 수의내용을어떻게수정해야하는가?

130 힌트 PlayAlert() 함수내에있는 for 반복문은 0.01 초간격으로 100 번실행된 다. 총실행시간은 1 초가된다. 1 초의시간중에서 0.5 초는 LED 를켜고, 0.5 초는 LED 가꺼져있도록조건 을추가해본다. SPL 스크립트 스케치코드 void PlayAlert() for (i = 0; i <100; i++) f = i * i tone(3, f, 100) void PlayAlert() for (int i = 0; i <100; i++) int f = i * i; tone(3, f, 100); //500 밀리초로 LED 동작을나눈다. if ( i < 50 ) DigitalWrite(13, HIGH) else DigitalWrite(13, LOW) //500 밀리초로 LED 동작을나눈다. if ( i < 50 ) digitalwrite(13, HIGH); else digitalwrite(13, LOW); delay(10) delay(10);

131 08 차량후방감지기및멜로디연주장치 학습목표 아날로그 PSD 거리센서를활용하여차량후방감지장치를구현할수있다. tone 명령어를이용하여다양한멜로디를연주할수있다. 실습개요 PSD 센서값을소리의높낮이정보로변환해본다. PSD 센서값을소리의점멸정보로변환해본다. tone 명령어로멜로디를연주해본다. 배열을이용하여멜로디를연주해본다

132 8.1 준비하기 준비물 아두이노보드, 올인원쉴드, 아날로그 PSD 센서, LED 모듈, 스피커 아두이노우노보드 올인원쉴드 스피커 아날로그 PSD 거리센서

133 H/W 연결하기 스피커를디지털 3 번에연결한다. 아날로그 PSD 거리센서를아날로그 0 번핀에연결한다

134 8.2 거리정보를소리의높낮이로바꾸기 기본기능구현하기 PSD 거리센서의정보를 tone 명령어의진동수값으로활용하면거리정 보를소리의높낮이정보로표현할수있다. 아래코드의기능을완성해본다. SPL 스크립트 스케치코드 a0 = AnalogRead(0) int a0 = analogread(0); tone(3, a0, 100 ) tone(3, a0, 100 ); Delay(100) delay(100);

135 소리높낮이변환하기 이번에는센서값을그대로전달하지않고값을다양하게변환하여진동수 값으로전달해보자. SPL 스크립트 스케치코드 a0 = AnalogRead(0) int a0 = analogread(0); f = a0 * a0 f = a0 * a0 ; tone(3, f, 100 ) tone(3, f, 100 ); Delay(100) delay(100); 위의코드에서먼저 f = a0 * a0 와같이원래의값이제곱이되도록값 을변환하면어떠한결과가나오는지확인해본다. delay 값을더작게또는더크게변경할경우소리가어떻게달라지는지 확인해본다

136 8.3 간단한멜로디연주하기 음계표 다음음계표는각옥타브별진동수를정의한표이다. 아래예제는도음을한박자 (500 밀리초 ) 연주한예를보여준다. tone(3, 262, 480) delay(500) 아래예제는레음을반박자 (250 밀리초 ) 연주한예를보여준다. tone(3, 294, 480) delay(500)

137 아래예제는미음을한박자 (500 밀리초 ) 연주한후, 한박자를쉬는예 를보여준다. delay 에서사용된 1000 밀리초는총 2 박자길이인데, 이중 450 밀리초만소리가나고나머지시간에는소리가나지않게된다. tone(3, 330, 480) delay(1000) 소리가나지않게하는또다른방법은진동수부분을값을 0 으로하는것 이다. tone(3, 0, 480) delay(500) 도레미파솔라시도 위의음계표를참고하여도레미파솔라시도를연주해본다

138 주의사항 tone 명령어의세번째값은 delay에있는값보다 20밀리초정도작게설정하는것이음을구분할때도움이된다. 가령아래와같이 미 미 두음을이어서연주할경우 tone의세번째값과 delay 값이같으면두음이이어서하나의긴음처럼연주된다. tone(3, 330, 500) delay(500) tone(3, 330, 500) delay(500) 위의경우에서 미 미 음이서로구분되어연주되도록하려면다음과같 이살짝소리가나지않는시간을만들어주어야한다. tone(3, 330, 480) delay(500) tone(3, 330, 480) delay(500)

139 8.4 동요연주하기 악보 아래의악보를참고하여간단한동요를아두이노로연주해본다

140 8.5 거리센서로연주하기 거리센서건반 거리센서값을그대로 tone 명령어에대입하게되면정확한음계로연주 되는것이아니라서제대로연주하기가거의불가능하다. 거리센서값을 map() 함수를이용하여음계로대입한다면어느정도간단 한멜로디음을연주할수있다. 아래는거리센서의값을음계정보로변 환하여연주하는과정을보여준다. SPL 스크립트 스케치코드 a0 = AnalogRead(0) int a0 = analogread(0); //8 음계로변환 f = map(a0, 0, 1023, 1, 8) //8 음계로변환 int f = map(a0, 0, 1023, 1, 8); if (f == 1) tone(3, 262, 230) else if (f == 2) tone(3, 294, 230) if (f == 1) tone(3, 262, 230); else if (f == 2) tone(3, 294, 230); // 나머지음계도추가한다. // 나머지음계도추가한다. delay(250) delay(250);

141 실습 A4 종이에피아노건반그림을그린후, PSD 센서를이용하여종이피아 노건반을연주하는장치를만들어보자. SPL 스크립트 스케치코드 a0 = AnalogRead(0) int a0 = analogread(0); if (a0 > 100 && a0 <= 200) tone(3, 262, 230) else if (a0 > 200 && a0 <= 300) tone(3, 294, 230) else if (a0 > 300 && a0 <= 400) tone(3, 330, 230) else if (a0 > 400 && a0 <= 500) tone(3, 349, 230) if (a0 > 100 && a0 <= 200) tone(3, 262, 230); else if (a0 > 200 && a0 <= 300) tone(3, 294, 230); else if (a0 > 300 && a0 <= 400) tone(3, 330, 230); else if (a0 > 400 && a0 <= 500) tone(3, 349, 230); // 나머지음계도추가한다. // 나머지음계도추가한다. delay(250) delay(250);

142 8.6 배열로멜로디연주하기 배열선언 아두이노에서도배열을사용할수있다. 아래의예는정수형값과문자들을 배열로선언한예를보여준다. 자료형배열이름 [] = 값, 값, 값,... 값 ; int f[] = 262, 294, 330, 349, 392, 440, 494; char a[] = 'A', 'B';

143 배열로멜로디연주하기 음의높낮이와음의길이를각각배열로선언하면음의길이가길어도코 드의길이가늘어나지않는다. SPL 스크립트 int f[] = 262, 294, 330, 349, 392, 440, 494 int d[] = 500, 250, 250, 500, 500, 250, 250 스케치코드 int f[] = 262, 294, 330, 349, 392, 440, 494 int d[] = 500, 250, 250, 500, 500, 250, 250 for (i = 0; i < 7; i++) tone(2, f[i], d[i] - 20) delay(d[i]) for (int i = 0; i < 7; i++) tone(2, f[i], d[i] - 20); delay(d[i]); tone 명령어에서세번째인수의값인 d[i] 에 20 일빼준이유는동일한 음이반복될때, 음이길게연결되지않고끊어져서연주되도록하기위함 이다

144 8.7 차량후방감지기만들기 거리를소리의점멸정보로표현하기 그동안의활동에서는거리정보를소리의높낮이로변환하여멜로디로표 현하였다. 요즘대부분의자동차에는후방장애물감지기가장착되어있다. 후방에있 는장애물이가까이접근하면소리의점멸간격이더짧아지고장애물이 멀면소리의점멸간격이더길어진다. 아래의코드에서는진동수는 1000Hz 로고정되고, 소리가나는지속시간과 delay 값에센서의거리값을대입하였다. SPL 스크립트 스케치코드 a0 = AnalogRead(0) int a0 = analogread(0); tone(3, 1000, a0 / 2) tone(3, 1000, a0 / 2); delay(a0) delay(a0); 위의코드를실행해보면일반적인후방감지기와달리거리에반비례하여 작동되는것을볼수있을것이다. 이문제를보완해보자

145 가까워지면점멸간격이짧아지도록개선하기 map() 함수를이용하여센서값을적절히조절해주면점멸간격이이전 예제와달리거리값에비례하여작동시킬수있다. 프로그램의기능을완성해본다. SPL 스크립트 스케치코드 a0 = AnalogRead(0) int a0 = analogread(0); // 이곳에서 a0 값을변환해준다. a0 = map(a0, 0, 1023, 1023, 0) // 이곳에서 a0 값을변환해준다. a0 = map(a0, 0, 1023, 1023, 0); tone(3, 1000, a0 / 2) tone(3, 1000, a0 / 2); delay(a0) delay(a0);

146 실습 이전코드는 PSD 센서앞에대상물체가없는경우에도항상소리가발생하는문제점이있다. if 조건문을추가하여이문제를해결해보도록한다. 즉, PSD 센서앞에대상물체가없는경우에는점멸소리가발생하지않도록기능을보완한다. PSD 센서에대상물체가가깝게접근할경우에는연속적으로삐소리가 나도록기능을개선해보기바란다

147 09 컬러 LED 바예술창작작품만들기 학습목표 컬러 LED 바의제어명령어를이해하고활용할수있다. 컬러 LED 바로다양한조형예술창작작품을만들수있다. 실습개요 컬러 LED바의색상을제어해본다. 컬러 LED바의색상위치를제어해본다. 랜덤함수를활용하여임의의색상을생성해본다. 랜덤함수를활용하여소리와색상을융합해본다. 다양한애니메이션패턴을생성해본다

148 9.1 준비하기 준비물 아두이노보드, 올인원쉴드, 컬러 LED 바, PSD 거리센서, 스피커 아두이노우노보드 올인원쉴드 스피커 아날로그 PSD 거리센서 컬러 LED 바

149 H/W 연결하기 컬러 LED 바를디지털 2 번에연결한다. 스피커를디지털 3 번에연결한다. 아날로그 PSD 거리센서를아날로그 0 번핀에연결한다

150 9.2 컬러 LED 바이해하기 컬러 LED 바 컬러 LED 바는 8 개의컬러 LED 셀로구성되어있으며, 한쪽에있는연장 핀을통해계속 8 개씩확장시켜나갈수있다. 하나의디지털핀에서최대 256 개의컬러 LED 셀을제어할수있다. 컬러 LED 바는 8 개를연결한것이 8x8 매트릭스이며, 64 개의컬러 LED 가 연결되어있다

151 컬러 LED 바의셀위치 컬러 LED 바에있는각컬러 LED 셀은위치값으로각각을제어할수있 다. 아두이노보드에가장가까운 LED 셀부터자동으로 0 번, 1 번순으로 부여된다. 컬러 LED 바를연장하여연결할경우, 자동으로위치는이어진다. 컬러 LED 바의색상 컬러 LED 바의각색상은 R (Red), G (Green), B (Blue) 3 원색조합을통 해색상을표현한다

152 9.3 컬러 LED 바켜기 컬러 LED 바를켜기위한사전작업 컬러 LED 바를켜기위해서는몇가지사전명령어들을프로그램에추가해 주어야한다. 아래코드는컬러 LED 바를켜기위한사전작업들을보여준다. SPL 스크립트 //2번핀에 8개의 LED 셀이연결되어있음 NSBegin(8, 2) //LED 셀을모두끔 NSClear() // 이곳에명령어를추가함 delay(1000) 스케치코드 #include <NS_Rainbow.h> //2번핀에 8개의 LED 셀이연결되어있음 NS_Rainbow ns_stick2 = NS_Rainbow(8,2); ns_stick2.begin(); //LED 셀을모두끔 ns_stick2.clear(); // 이곳에명령어를추가함 delay(1000); SPL 스크립트와스케치코드의결과물이크게다른것에유의하기바란다

153 첫번째 LED 셀켜기 첫번째컬러 LED 셀을빨강색으로켜보자. 컬러 LED 셀에색상을지정하는명령어는다음과같다. 총 4 개의인수를 필요로하는데, 첫번째인수는 LED 셀의위치이며, 그다음 3 개는 Red, Green, Blue 색상값이다. SPL 스크립트 // 위치, R, G, B NSSetColor(0, 255, 0, 0) NSShow() 스케치코드 // 위치, R, G, B ns_stick2.setcolor(0, 255, 0, 0); ns_stick2.show();

154 각색상값은 0 ~ 255 사이의숫자값으로구성된다. 첫번째 LED 를빨간 색으로켜는코드는다음과같다. SPL 스크립트 //2번핀에 8개의 LED 셀이연결되어있음 NSBegin(8, 2) //LED 셀을모두끔 NSClear() // 첫번째 LED셀을빨간색으로켜기 NSSetColor(0, 255, 0, 0) NSShow() 스케치코드 #include <NS_Rainbow.h> //2번핀에 8개의 LED 셀이연결되어있음 NS_Rainbow ns_stick2 = NS_Rainbow(8,2); ns_stick2.begin(); //LED 셀을모두끔 ns_stick2.clear(); delay(1000) // 첫번째 LED 셀을빨간색으로켜기 ns_stick2.setcolor(0, 255, 0, 0); ns_stick2.show(); delay(1000); 실습 두번째 LED 셀을초록색으로켜보자. 7 개의 LED 셀에무지개색상을표현해본다

155 9.4 신호등만들기 초록 -> 노랑 -> 빨강신호등 컬러 LED 바의앞 3 개의 LED 셀을활용하여 1 초간격으로변하는신호등 을구현해보자. 신호등은초록 -> 노랑 -> 빨강의순으로 1 초씩순차적으로켜지도록한 다. SPL 스크립트 스케치코드 NSBegin(8, 2) // 첫번째 LED셀을초록색으로켜기 NSClear() NSSetColor(0, 0, 255, 0) NSShow() delay(1000) // 두번째 LED셀을노란색으로켜기 NSClear() NSSetColor(1, 255, 255, 0) NSShow() delay(1000) // 세번째 LED셀을빨간색으로켜기 NSClear() NSSetColor(2, 255, 0, 0) NSShow() delay(1000) #include <NS_Rainbow.h> NS_Rainbow ns_stick2 = NS_Rainbow(8,2); ns_stick2.begin(); // 첫번째 LED셀을초록색으로켜기 ns_stick2.clear(); ns_stick2.setcolor(0, 0, 255, 0); ns_stick2.show(); delay(1000); // 두번째 LED셀을노란색으로켜기 ns_stick2.clear(); ns_stick2.setcolor(1, 255, 255, 0); ns_stick2.show(); delay(1000); // 세번째 LED셀을빨간색으로켜기 ns_stick2.clear();

156 ns_stick2.setcolor(2, 255, 0, 0); ns_stick2.show(); delay(1000); 9.5 반복문으로하나씩켜기 LED 를순차적으로켜기 for 반복문을이용하여 LED 를순차적으로켜보자. SPL 스크립트 스케치코드 NSBegin(8, 2) NSClear() for (i = 0; i < 8; i++) NSSetColor( i, 0, 255, 0) NSShow() delay(100) #include <NS_Rainbow.h> NS_Rainbow ns_stick2 = NS_Rainbow(8,2); ns_stick2.begin(); ns_stick2.clear(); for (int i = 0; i < 8; i++) ns_stick2.setcolor( i, 0, 255, 0); ns_stick2.show(); delay(100);

157 LED 를순차적으로하나씩만켜기 이전예제는 LED 가계속누적하여켜지는과정을보여주었다. 만약한개 씩만순차적으로 LED 가켜지도록하려면이전코드의어떠한부분을수정 해주어야하는가? SPL 스크립트 스케치코드 NSBegin(8, 2) NSClear() for (i = 0; i < 8; i++) NSClear() NSSetColor( i, 0, 255, 0) NSShow() delay(100) #include <NS_Rainbow.h> NS_Rainbow ns_stick2 = NS_Rainbow(8,2); ns_stick2.begin(); ns_stick2.clear(); for (int i = 0; i < 8; i++) ns_stick2.clear(); ns_stick2.setcolor( i, 0, 255, 0); ns_stick2.show(); delay(100);

158 9.6 LED 전체켜기 LED 를전체를특정색상으로켜기 8 개의 LED 전체를 R, G, B 색상으로지정하여켜기위한명령어는다음과 같다. 기존 NSSetColor 명령어대신에 NSSetAllColor 명령어를사용하면 되며, 위치인수가필요없다. SPL 스크립트 //R, G, B NSSetAllColor(255, 0, 0) NSShow() 스케치코드 //R, G, B ns_stick2.setallcolor(0, 255, 0, 0); ns_stick2.show(); 아래의코드는후레쉬용도로사용하기위해 LED 전체를흰색으로켜기 위한과정을보여준다. SPL 스크립트 스케치코드 NSBegin(8, 2) NSSetAllColor(255, 255, 255) NSShow() delay(1000) #include <NS_Rainbow.h> NS_Rainbow ns_stick2 = NS_Rainbow(8,2); ns_stick2.begin(); ns_stick2.setallcolor(255, 255, 255); ns_stick2.show(); delay(1000);

159 실습 컬러 LED 바전체의색상이 1 초간격으로빨강, 초록, 파랑의순서대로변 경되도록기능을작성해본다. SPL 스크립트 스케치코드 NSBegin(8, 2) NSSetAllColor(255, 0, 0) NSShow() delay(1000) NSSetAllColor(0, 255, 0) NSShow() delay(1000) NSSetAllColor(0, 0, 255) NSShow() delay(1000) #include <NS_Rainbow.h> NS_Rainbow ns_stick2 = NS_Rainbow(8,2); ns_stick2.begin(); ns_stick2.setallcolor(255, 0, 0); ns_stick2.show(); delay(1000); ns_stick2.setallcolor(0, 255, 0); ns_stick2.show(); delay(1000); ns_stick2.setallcolor(0, 0, 255); ns_stick2.show(); delay(1000);

160 9.7 랜덤함수 임의의정수값을발생시키는 random() 함수 아두이노에서는임의의정수값을생성시키는용도로 random() 이라는아 주유용한함수를제공한다. 함수의사용방법은 2 가지가있는데각각의사용방법은다음과같다. a = random(100) 인수가 1 개인경우 인수가 2 개인경우 a = random(50, 100) 위의변수 a에는 0 ~ 99까지의임의의값이저장된다. 100은절대나오지않는다. random 함수에사용된인수보다항상 1 작은값까지만생성된다. 위의변수 a에는 50 ~ 99까지의임의의값이저장된다. 100은절대나오지않는다. random 함수에사용된두번째인수보다항상 1 작은값까지만생성된다

161 9.8 임의의색상생성하기 임의의색상으로 LED 켜기 random() 함수를이용하여 0.3 초간격으로 LED 전체색상을임의의색상 으로변경하려고한다. 아래의코드를완성해보기바란다. SPL 스크립트 스케치코드 NSBegin(8, 2) r = random( 256 ) g = random( 256 ) b = random( 256 ) NSSetAllColor(r, g, b) NSShow() #include <NS_Rainbow.h> NS_Rainbow ns_stick2 = NS_Rainbow(8,2); ns_stick2.begin(); int r = random( 256 ); int g = random( 256 ); int b = random( 256 ); delay(300) ns_stick2.setallcolor(r, g, b); ns_stick2.show(); delay(300);

162 9.9 임의의위치에있는 LED 를임의의색상으로켜기 랜덤 LED 켜기 random() 함수를이용하여 0.1 초간격으로 8 개의 LED 중에서특정 LED 만임의의색상으로켜려고한다. 아래의코드를완성해보기바란다. SPL 스크립트 스케치코드 NSBegin(8, 2) p = random( 8 ) r = random( 256 ) g = random( 256 ) b = random( 256 ) NSClear() NSSetColor(p, r, g, b) NSShow() delay(100) #include <NS_Rainbow.h> NS_Rainbow ns_stick2 = NS_Rainbow(8,2); ns_stick2.begin(); int p = random( 8 ); int r = random( 256 ); int g = random( 256 ); int b = random( 256 ); ns_stick2.clear(); ns_stick2.setcolor(p, r, g, b); ns_stick2.show(); delay(100);

163 실습 임의의진동수를발생시켜 LED 셀이켜질때스피커에임의의소리도같 이연주되도록기능을수정해본다

164 9.10 이퀄라이저효과만들기 이퀄라이저효과 오디오에자주사용되는이퀄라이저효과를컬러 LED 바로구현해본다. 컬러 LED 바에 LED 가표시되는길이가랜덤하게변경되도록기능을구현 해본다

165 구현하기 for 반복문을활용하여임의의위치까지 LED 셀을켜는기능을구현한다. SPL 스크립트 스케치코드 NSBegin(8, 2) p = random( 8 ) r = random( 256 ) g = random( 256 ) b = random( 256 ) NSClear() for (i = 0; i < p ; i++) NSSetColor( i, r, g, b) NSShow() delay(100) #include <NS_Rainbow.h> NS_Rainbow ns_stick2 = NS_Rainbow(8,2); ns_stick2.begin(); int p = random( 8 ); int r = random( 256 ); int g = random( 256 ); int b = random( 256 ); ns_stick2.clear(); for (int i = 0; i < p ; i++) ns_stick2.setcolor( i, r, g, b); ns_stick2.show(); delay(100); NSShow() 명령어의위치에대해유의하기바란다

166 실습 LED 셀이켜지는길이만큼소리의높낮이가높아지도록소리를발생시키는기능을추가하여이전활동의예제에추가해보자. 즉, 이퀄라이저표시막대바의길이가길수록더높은음의소리가같이연주되도록기능을구현하면된다

167 10 컬러무드등만들기 학습목표 컬러 LED바의제어명령어를이해하고활용할수있다. 컬러 LED바로센서값을시각적으로표시할수있는컬러게이지바를만들수있다. 컬러무드등을제작할수있다. 실습개요 거리정보를컬러막대바로표시한다. 거리정도를컬러게이지바로구현해본다. 색상이부드럽게변화되는컬러무드등을제작해본다

168 10.1 준비하기 준비물 아두이노보드, 올인원쉴드, 컬러 LED 바, PSD 거리센서, 스피커 아두이노우노보드 올인원쉴드 스피커 아날로그 PSD 거리센서 컬러 LED 바

169 H/W 연결하기 컬러 LED 바를디지털 2 번에연결한다. 스피커를디지털 3 번에연결한다. 아날로그 PSD 거리센서를아날로그 0 번핀에연결한다

170 10.2 거리센서의값을막대그래프로표시하기 거리센서를막대그래프로표시하기 PSD 거리센서의값을컬러 LED 바에막대그래프로표시해보자. map 함수를이용하여거리정보를컬러바의 LED 셀개수로변환해보자. SPL 스크립트 스케치코드 NSBegin(8, 2) a0 = AnalogRead(0) p = map(a0, 0, 1023, 7, 0 ) r = 0; g = 255 b = 0 NSClear() for (i = 0; i < p ; i++) NSSetColor( i, r, g, b) NSShow() delay(100) #include <NS_Rainbow.h> NS_Rainbow ns_stick2 = NS_Rainbow(8,2); ns_stick2.begin(); int a0 = analogread(0); int p = map(a0, 0, 1023, 7, 0 ); int r = 0; int g = 255; int b = 0; ns_stick2.clear(); for (int i = 0; i < p ; i++) ns_stick2.setcolor( i, r, g, b); ns_stick2.show(); delay(100);

171 10.3 거리센서값의강도를색상으로표시하기 초록과빨강으로그래프표시하기 이전활동의코드에서, 컬러 LED 바에막대그래프를그릴때 LED 셀의 개수가증가할수록 LED 셀의색상이초록에서빨간색으로변화되어가면 서표시되도록기능을추가해본다. map() 함수를이용해컬러매핑하기 map() 함수를이용하면변화되는색상들의중간값을아주쉽게계산할수 있다. 아래의예는 a0 값에따라서초록에서빨간색으로변화되는값을얻 는과정을보여준다. r = map(a0, 0, 1023, 0, 255) g = map(a0, 0, 1023, 255, 0) b =

172 구현하기 SPL 스크립트 스케치코드 NSBegin(8, 2) a0 = AnalogRead(0) p = map(a0, 0, 1023, 7, 0 ) r = map(a0, 0, 1023, 0, 255 ) g = map(a0, 0, 1023, 255, 0 ) b = 0 NSClear() for (i = 0; i < p ; i++) NSSetColor( i, r, g, b) NSShow() delay(100) #include <NS_Rainbow.h> NS_Rainbow ns_stick2 = NS_Rainbow(8,2); ns_stick2.begin(); int a0 = analogread(0); int p = map(a0, 0, 1023, 7, 0 ); int r = map(a0, 0, 1023, 0, 255 ); int g = map(a0, 0, 1023, 255, 0 ); int b = 0; ns_stick2.clear(); for (int i = 0; i < p ; i++) ns_stick2.setcolor( i, r, g, b); ns_stick2.show(); delay(100);

173 10.4 컬러무드등만들기 임의의색상으로부드럽게변화하기 빨간색영역의값에대해서임의의시작값과끝값을생성한후, 해당값 의범위를 256 단계로서서히변화시켜보다. map 함수를이용하여변환되는값을계산해보자. SPL 스크립트 스케치코드 NSBegin(8, 2) r1 = random(256) r2 = random(r1, 256) for (i = 0; i < 256; i++) r = map(i, 0, 255, r1, r2) NSSetAllColor(r, 0, 0) NSShow() delay(10) #include <NS_Rainbow.h> NS_Rainbow ns_stick2 = NS_Rainbow(8,2); ns_stick2.begin(); int r1 = random(256); int r2 = random(r1, 256); for (int i = 0; i < 256; i++) int r = map(i, 0, 255, r1, r2); ns_stick2.setallcolor( r, 0, 0); ns_stick2.show(); delay(10);

174 실습 이전활동의코드는빨간색영역만서서히변화시키는기능을제공하고있 다. 이코드에초록색과파란색영역도임의로생성한후 3 가지의 R, G, B 색상이서서히 256 단계로변화되도록이전코드의기능을개선해본다

175 11 나만의로봇제어함수만들기 학습목표 PWM으로로봇모터를제어하는명령어를이해하고활용할수있다. 로봇주행을제어하는나만의함수를만들수있다. 아두이노라이브러리를등록하고활용하는방법을익힐수있다. 실습개요 PWM 함수로모터의속도를제어해본다. 모터의회전방향을제어해본다. 나만의로봇모터제어함수를만들어본다. 아두이노라이브러리로내가만든함수를등록하고활용해본다

176 11.1 준비하기 준비물 아두이노보드, 올인원쉴드, 모바일로봇플랫폼 아두이노우노보드 올인원쉴드 모바일로봇플랫폼

177 H/W 연결하기 왼쪽모터의케이블을 MOTOR1 단자에연결한다. 오른쪽모터의케이블을 MOTOR2 단자에연결한다

178 주의사항 로봇을활용한실습에서는로봇이갑자기책상에서움직일수있으며, 이 경우자칫하면로봇이책상아래로떨어져파손될수있다. 로봇실습시로봇이갑자기이동하는것을방지하기위해서는다음과같이 로봇의앞쪽을아래방향으로해서세워놓고실습을진행해야한다. 즉, 바퀴가공중에떠있어야안전하게실습할수있다

179 주의사항 로봇실습시업로드결과는반드시아래와같아야한다. 만약위와다르게결과가표시된다면업로드가실패한것이다. 업로드가실 패하는이유는로봇의모터가순간적으로전원을많이사용하기때문에 PC 에서 USB 연결을차단하였기때문이다. 문제를해결하기위해서는아래의절차대로진행한다. 절차1) 아두이노보드의 USB 케이블을 PC에서제거한다. 절차2) 코딩 SW를종료한다. 절차3) 아두이노보드를 PC에다시연결한다. 절차4) 코딩 SW를다시실행한다

180 11.2 모터제어에대한이해 모터구동에필요한부품 일반적인아두이노우노보드에서는모터를직접적으로제어할수없다. 로봇의모터를구동시키기위해서는모터드라이브라고하는별도의전자 회로가필요한데, 올인원쉴드에는이미모터드라이브회로가내장되어 있다

181 모터드라이브연결핀 아래그림은모터드라이브회로에연결된모터와아두이노디지털핀들에 대한연결정보이다. 위의그림에서보이듯이모터드라이브회로는아두이노디지털 4 번, 5 번, 6 번, 7 번등총 4 개의핀을내부적으로사용한다. 디지털 5 번과 6 번은각각 PWM 핀으로서 AnalogWrite 명령을이용하여 256 단계로생성되는전압을조절할수있다. 예를들어, 모터 1 의경우 AnalogWrite(5, 255) 를실행하게되면가장빠른 속도로모터가회전하게된다. 디지털 4 번과 7 번은모터의회전방향즉, 전압의방향을결정짓는핀이다. 예를들어디지털 4 번에 DigitalWrite(4, LOW) 를실행하게되면, 모터 1 의 전압이반대로걸리게되어모터 1 의회전방향이반대가된다

182 11.3 모터 1 제어하기 AnalogWrite 명령으로모터제어하기 디지털 5 번에연결되어있는모터 1 을제어해보자. 아래코드는 2 초간모 터를 200 정도의파워값으로작동시키고다시 2 초간정지시키는예제이 다. SPL 스크립트 스케치코드 AnalogWrite(5, 200) delay(2000) analogwrite(5, 200); delay(2000); AnalogWrite(5, 0) delay(2000) analogwrite(5, 0); delay(2000);

183 모터속도제어하기 AnalogWrite 함수의두번째인자는 0 ~ 255 사이의값을가질수있으 며, 0 이면모터가멈추고 255 이면최대속도로회전한다. 하지만모터의 특성상 0 ~ 150 사이의값을지정하면모터가작동하지않는다. 아래의코드는모터의속도를반복문을이용해제어해보는과정을보여준 다. SPL 스크립트 스케치코드 for (int i = 0; i < 255; i++) AnalogWrite(5, i) delay(50) for (int i = 0; i < 255; i++) analogwrite(5, i); delay(50);

184 모터의회전방향제어하기 모터 1 의회전방향은디지털 4 번핀의값을설정하기에따라달라진다. HIGH 값으로설정하면 + 전압이발생하지만, LOW 값으로설정하면 전 압이발생한다. 아래의코드는모터 1 의회전방향을전진 -> 정지 -> 후진 -> 정지의순 서로회전시키는과정을보여준다. SPL 스크립트 스케치코드 // 정방향회전 DigitalWrite(4, HIGH) AnalogWrite(5, 200) delay(2000) AnalogWrite(5, 0) delay(1000) // 역방향회전 DigitalWrite(4, LOW) AnalogWrite(5, 200) delay(2000) pinmode(4, OUTPUT); // 정방향회전 digitalwrite(4, HIGH); analogwrite(5, 200); delay(2000); analogwrite(5, 0); delay(1000); // 역방향회전 digitalwrite(4, LOW); analogwrite(5, 200); delay(2000); AnalogWrite(5, 0) delay(1000) analogwrite(5, 0); delay(1000);

185 11.4 모터를제어하는함수만들기 모터제어용함수만들기 모터를제어하는기능을로봇에서계속사용되는명령어이기때문에가급 적함수로만들어놓고사용해야한다. 다음과같이 RobotWrite() 라는이름으로나만의모터제어용함수를만들 어보자. 함수의인수로는모터파워값을받도록하며, + 값이면모터가앞으로회전 하고, - 값이면모터가반대로회전하도록설계한다. 즉, 모터파워값은 255 ~ 255 사이의값을넘겨받도록한다. SPL 스크립트 스케치코드 void RobotWrite(int left) left_power = abs(left) AnalogWrite(5, left_power) void RobotWrite(int left) int left_power = abs(left); analogwrite(5, left_power); if (left >= 0) DigitalWrite(4, HIGH) else DigitalWrite(4, LOW) if (left >= 0) digitalwrite(4, HIGH); else digitalwrite(4, LOW); 위의함수에서사용된 abs() 함수는수학함수로서절대값을넘겨주는함수 이다

186 통합된코드 기존예제를함수로변경한결과이다. SPL 스크립트 스케치코드 void RobotWrite(int left) left_power = abs(left) AnalogWrite(5, left_power) void RobotWrite(int left) int left_power = abs(left); analogwrite(5, left_power); if (left >= 0) DigitalWrite(4, HIGH) else DigitalWrite(4, LOW) if (left >= 0) digitalwrite(4, HIGH); else digitalwrite(4, LOW); // 정방향회전 RobotWrite(200) delay(2000) RobotWrite(0) delay(1000) // 역방향회전 RobotWrite(-200) delay(2000) RobotWrite(0) delay(1000) pinmode(4, OUTPUT); // 정방향회전 RobotWrite(200); delay(2000); RobotWrite(0); delay(1000); // 역방향회전 RobotWrite(-200); delay(2000); RobotWrite(0); delay(1000);

187 개의모터를동시에제어하는함수만들기 양쪽모터모두제어하는함수 로봇의주행을제어하기위해서는양쪽모터를동시에제어해주어야한다. 모터 1 과모터 2 를동시에제어하기위해다음과같이 RobotWrite 함수에 모터 2 에대한제어기능을추가해놓는다. SPL 스크립트 스케치코드 void RobotWrite(int left, int rght) left_power = abs(left) right_power = abs(right) void RobotWrite(int left, int right) int left_power = abs(left); int right_power = abs(right); AnalogWrite(5, left_power) AnalogWrite(6, right_power) analogwrite(5, left_power); analogwrite(6, right_power); if (left >= 0) DigitalWrite(4, HIGH) else DigitalWrite(4, LOW) if (left >= 0) digitalwrite(4, HIGH); else digitalwrite(4, LOW); if (right >= 0) DigitalWrite(7, HIGH) else DigitalWrite(7, LOW) if (right >= 0) digitalwrite(7, HIGH); else digitalwrite(7, LOW);

188 11.6 로봇주행제어하기 간단한로봇주행제어하기 이전활동에서제작한함수를이용하여다음과같이로봇이동작하도록기 능을완성해보자. 1 초간전진 -> 0.5 초간후진 -> 1 초간회전 이전활동에서작성한 RobotWrite() 함수는프로그램맨위에추가해놓는 다. SPL 스크립트 스케치코드 void RobotWrite(int left)... void RobotWrite(int left)... RobotWrite(200, 200) delay(1000) RobotWrite(-200, -200) delay(500) RobotWrite(-200, 200) delay(1000) pinmode(4, OUTPUT); pinmode(7, OUTPUT); RobotWrite(200, 200); delay(1000); RobotWrite(-200, -200); delay(500); RobotWrite(-200, 200);

189 delay(1000); 실습 나만의로봇주행패턴을만들어본다

190 11.7 라이브러리로분리시키기 함수만분리하기 RobotWrite() 함수를다른프로그램에서도사용하려면해당함수를별도의 파일로분리시켜놓아야한다. 새로운파일을생성한후, 소스의모든내용을삭제한다. 그다음, RobotWrite() 함수의내용만해당파일에복사해놓는다. 스케치코드 #include<arduino.h> void RobotWrite(int left, int right) int left_power = abs(left); int right_power = abs(right); analogwrite(5, left_power); analogwrite(6, right_power); if (left >= 0) digitalwrite(4, HIGH); else digitalwrite(4, LOW); if (right >= 0) digitalwrite(7, HIGH); else digitalwrite(7, LOW);

191 함수를라이브러리로분리하기위해서는함수의내용이모두 C 언어문법으 로작성되어있어한다. 위의코드는 RobotWrite() 함수를분리시킨결과 를보여준다. 위의코드위쪽을살펴보면아래의명령어가추가되어있는것을볼수있 을것이다. 추가된이유는이라이브러리에서사용하는아두이노명령어들 이 Arduino.h 파일에있는명령어들을사용하기때문이다. #include<arduino.h> 화면상단에서라이브러리로저장메뉴를클릭한다. 기본적으로 C:\ 사용자 \ 로그인이름 \ 문서 \Arduino\Libraries 폴더가표시 된다. 기본폴더경로를수정하지말고현재표시된경로에서작업을해야한다. 파일을저장하는창이표시되면, 폴더에서 RobotWrite 라는이름으로폴더 를새로생성한다. 새로생성된폴더로이동한후에, RobotWrite.h 이름으로현재의라이브러 리함수를파일로저장한다

192 파일형식이 *h 로되어있는지확인한다

193 11.8 라이브러리사용하기 RobotWrite 라이브러리사용하기 이전단계에서라이브러리로만들어놓은 RobotWrite 함수를다른프로그 램에서사용해보자. 새로운프로그램을생성한후에, 아래의명령어를프로그램맨위에추가한 다. #include<robotwrite.h> 로봇의주행을제어하는기능을 loop() 함수안에추가해준다. SPL 스크립트 스케치코드 #include<robotwrite.h> #include<robotwrite.h> RobotWrite(200, 200) delay(1000) RobotWrite(-200, -200) delay(500) RobotWrite(-200, 200) delay(1000) pinmode(4, OUTPUT); pinmode(7, OUTPUT); RobotWrite(200, 200); delay(1000); RobotWrite(-200, -200); delay(500); RobotWrite(-200, 200); delay(1000);

194 11.9 SPL 편집기에있는로봇주행제어명령어 DriveWrite() 함수 SPL 편집기에는사용자가로봇함수를만들지않아도동일하게사용할수있는로봇주행제어용명령어가있다. 내장명령어에서 2번째그룹에있는 DriveWrite 함수를이용하면 RobotWrite 함수를만들지않아도동일하게로봇을제어할수있다

195 DriveWrite 함수로로봇제어하기 아래의코드는 SPL 편집기에내장된 DriveWrite 함수를사용하여별도의 라이브러리추가없이로봇을제어하는과정을보여준다. SPL 스크립트 DriveWrite(200, 200) delay(1000) DriveWrite(-200, -200) delay(500) 스케치코드 #include<spllib.h> pinmode(4, OUTPUT); pinmode(7, OUTPUT); DriveWrite(200, 200); delay(1000); DriveWrite(-200, 200) delay(1000) DriveWrite(-200, -200); delay(500); DriveWrite(-200, 200); delay(1000);

196 12 로봇조종기만들기 학습목표 아날로그키패드센서를활용할수있다. 키패드센서를이용하기위한함수를만들수있다. 키패드센서로로봇조종기를제작할수있다. 실습개요 키패드센서의특성을확인해본다. 키패드센서용함수를작성한다. 키패드센서용함수를이용하여오르간연주장치를구현해본다. 키패드함수를이용해로봇조종기를구현한다

197 12.1 준비하기 준비물 아두이노보드, 올인원쉴드, 키패드센서, 모바일로봇플랫폼 아두이노우노보드 올인원쉴드 아날로그키패드센서 모바일로봇플랫폼

198 H/W 연결하기 왼쪽모터의케이블을 MOTOR1 단자에연결한다. 오른쪽모터의케이블을 MOTOR2 단자에연결한다. 아날로그키패드센서를아날로그 0 번핀에연결한다

199 12.2 키패드센서값읽기 키패드센서값확인하기 키패드센서는 5 개의버튼으로구성되어있으며, 각버튼을누를때마다 센서값이달라진다. SPL 스크립트 스케치코드 a0 = AnalogRead(0) PrintLine(a0) delay(100) Serial.begin(115200); int a0 = analogread(0); Serial.println(a0); delay(100); 각버튼이눌려질때콘솔창에표시되는값을아래에기록한다. 측정값에오차가있으므로측정값에서 +10 또는 10 을계산한값을같이 기록한다. 버튼 측정값 측정값-10 측정값 +10 노랑빨강흰색초록 파랑

200 12.3 키패드버튼의번호를리턴하는기능 키패드버튼의번호리턴하기 키패드센서의버튼을누르면버튼에해당하는번호를출력하는기능을구 현해본다

201 아래의코드에서 if 조건문의값을자신이측정한센서값에맞추어수정해 준다. SPL 스크립트 pin = 0 a = AnalogRead(pin) if (608 < a && a < 628) PrintLine(1) else if (797 < a && a < 816) PrintLine(2) else if (a> 895 && a<915) PrintLine(3) else if (a> 666 && a<686) PrintLine(4) else if (a> 724 && a<744) PrintLine(5) Delay(100) 스케치코드 Serial.begin(115200); int pin = 0; int a0 = analogread(0); if (608 < a && a < 628) Serial.println(1); else if (797 < a && a < 816) Serial.println(2); else if (a> 895 && a<915) Serial.println(3); else if (a> 666 && a<686) Serial.println(4); else if (a> 724 && a<744) Serial.println(5); delay(100);

202 12.4 키패드버튼의번호를리턴하는함수 키패드버튼의번호리턴함수 이전활동에서작성한코드를다른프로그램에서사용하기위해함수로분 리해본다. SPL 스크립트 a = KeyPad(0) PrintLine(a) delay(100) int KeyPad(int pin) res = -1 a = AnalogRead(pin) if (608 < a && a < 628) res = 1 else if (797 < a && a < 816) res = 2 else if (a> 895 && a<915) res = 3 else if (a> 666 && a<686) res = 4 else if (a> 724 && a<744) res = 5 return res 스케치코드 Serial.begin(115200); int a = KeyPad(0); Serial.println(a) delay(100); int KeyPad(int pin) int res = -1; int a = analogread(pin); if (608 < a && a < 628) res = 1; else if (797 < a && a < 816) res = 2; else if (a> 895 && a<915) res = 3; else if (a> 666 && a<686) res = 4; else if (a> 724 && a<744) res = 5; return res;

203 12.5 키패드함수를라이브러리로등록하기 함수만분리하기 키패드함수를다른프로그램에서도사용하려면해당함수를별도의파일 로분리시켜놓아야한다. 새로운파일을생성한후, 소스의모든내용을삭제한다. 그다음, 키패드 함수의내용만해당파일에복사해놓는다. 스케치코드 #include<arduino.h> int KeyPad(int pin) int res = -1; int a = analogread(pin); if (608 < a && a < 628) res = 1; else if (797 < a && a < 816) res = 2; else if (a> 895 && a<915) res = 3; else if (a> 666 && a<686) res = 4; else if (a> 724 && a<744) res = 5; return res;

204 함수를라이브러리로분리하기위해서는함수의내용이모두 C 언어문법으 로작성되어있어한다. 위의코드는키패드함수를분리시킨결과를보여 준다. 위의코드위쪽을살펴보면아래의명령어가추가되어있는것을볼수있 을것이다. 추가된이유는이라이브러리에서사용하는아두이노명령어들 이 Arduino.h 파일에있는명령어들을사용하기때문이다. #include<arduino.h> 화면상단에서라이브러리로저장메뉴를클릭한다. 기본적으로 C:\ 사용자 \ 로그인이름 \ 문서 \Arduino\Libraries 폴더가표시 된다. 기본폴더경로를수정하지말고현재표시된경로에서작업을해야한다. 파일을저장하는창이뜨는표시된폴더에서 KeyPad 라는이름으로폴더 를새로생성한다. 새로생성된폴더로이동한후에, KeyPad.h 이름으로현재의라이브러리 함수를파일로저장한다

205

206 12.6 라이브러리사용하기 KeyPad 라이브러리사용하기 이전단계에서라이브러리로만들어놓은 KeyPad 함수를다른프로그램에 서사용해보자. 새로운프로그램을생성한후에, 아래의명령어를프로그램맨위에추가한 다. #include<keypad.h> 버튼의번호가정상적으로출력되는지다음과같이확인해본다. SPL 스크립트 스케치코드 #include<keypad.h> #include<keypad.h> a = KeyPad(0) PrintLine(a) delay(100) Serial.begin(115200); int a = KeyPad(0); Serial.println(a) delay(100);

207 12.7 오르간연주장치만들기 키패드건반으로연주하기 디지털 3 번핀에스피커를연결한후, 키패드버튼을이용해도레미파솔 까지의음계를연주해보자. SPL 스크립트 스케치코드 #include<keypad.h> #include<keypad.h> a = KeyPad(0) if (a == 1) tone(3, 262, 200) else if (a == 2) tone(3, 294, 200) else if (a == 3) tone(3, 330, 200) else if (a == 4) tone(3, 349, 200) else if (a == 5) tone(3, 392, 200) Serial.begin(115200); int a = KeyPad(0); if (a == 1) tone(3, 262, 200); else if (a == 2) tone(3, 294, 200); else if (a == 3) tone(3, 330, 200); else if (a == 4) tone(3, 349, 200); else if (a == 5) tone(3, 392, 200); delay(100) delay(100);

208 12.8 로봇조종기만들기 키패드버튼으로로봇조종하기 5 개의키패드버튼을활용하여다음과같이로봇의동작을제어해보자. 버튼번호동작명령어 2 전진 DriveWrite(200, 200) 1 좌회전 DriveWrite(0, 200) 3 정지 DriveWrite(0, 0) 5 우회전 DriveWrite(0, 200) 4 후진 DriveWrite(-200, -200)

209 아래의코드를완성해본다. SPL 스크립트 스케치코드 #include<keypad.h> a = KeyPad(0) if (a == 1) DriveWrite( 0, 200) else if (a == 2) DriveWrite( 200, 200) else if (a == 3) DriveWrite( 0, 0) else if (a == 4) DriveWrite( -200, -200) else if (a == 5) DriveWrite( 0, 200) delay(100) #include<keypad.h> #include<spllib.h> pinmode(4, OUTPUT); pinmode(7, OUTPUT); int a = KeyPad(0); if (a == 1) DriveWrite( 0, 200); else if (a == 2) DriveWrite( 200, 200); else if (a == 3) DriveWrite( 0, 0); else if (a == 4) DriveWrite( -200, -200); else if (a == 5) DriveWrite( 0, 200); delay(100);

210 13 자율주행로봇 학습목표 PSD 거리센서를활용하여사람의접근에반응하는로봇을구현할수있다. 장애물을회피하는자율주행로봇을구현할수있다. 실습개요 사람의접근을회피하는로봇을구현한다. 사람에게다가서는로봇을구현한다. 장애물을회피하는기능을구현한다

211 13.1 준비하기 준비물 아두이노보드, 올인원쉴드, 컬러 LED 바, PSD 거리센서, 스피커, LED, 모바일로봇플랫폼 아두이노우노보드 올인원쉴드 아날로그 PSD 거리센서 모바일로봇플랫폼

212 H/W 연결하기 왼쪽모터의케이블을 MOTOR1 단자에연결한다. 오른쪽모터의케이블을 MOTOR2 단자에연결한다. 아날로그 PSD 거리센서를아날로그 0번핀에연결한다. 아날로그 PSD 거리센서를로봇의전방에고정시킨다

213 13.2 사람이접근하면도망가는로봇 구현하기 사람이로봇에접근하면아래의동작을구동하도록기능을구현해본다. 후진 (1 초 ) -> 회전 (0.5 초 ) -> 전진 (1 초 ) 아래프로그램을완성해본다. SPL 스크립트 스케치코드 a0 = AnalogRead(0) if (a0 > 200 ) DriveWrite( -200, -200 ) delay(1000) DriveWrite( 200, -200 ) delay(500) DriveWrite( 200, 200 ) delay(1000) #include<spllib.h> pinmode(4, OUTPUT); pinmode(7, OUTPUT); int a0 = analogread(0); if (a0 > 200 ) DriveWrite( -200, -200 ); delay(1000); DriveWrite( 200, -200 ); delay(500); DriveWrite( 0, 0 ) DriveWrite( 200, 200 ); delay(1000); delay(100) DriveWrite( 0, 0 ) delay(100);

214 13.3 사람에게점점더다가오는로봇 구현하기 사람이로봇에접근하면사람쪽으로빠르게다가오는기능을구현한다. 사람과의거리가가까울수록더빠르게다가온다. 아래프로그램을완성해본다. SPL 스크립트 스케치코드 a0 = AnalogRead(0) #include<spllib.h> pinmode(4, OUTPUT); pinmode(7, OUTPUT); s = a0 / 4 DriveWrite( s, s ) int a0 = analogread(0); delay(100) int s = a0 / 4; DriveWrite( s, s ); delay(100);

215 13.4 장애물을회피하는자율주행로봇 구현하기 자율주행을하다가장애물을만나면아래의동작을수행한다. 후진 (1 초 ) -> 회전 (1 초 ) -> 전진 SPL 스크립트 스케치코드 a0 = AnalogRead(0) #include<spllib.h> pinmode(4, OUTPUT); pinmode(7, OUTPUT); if (a0 > 200 ) DriveWrite( -200, -200 ) delay(1000) DriveWrite( 200, -200 ) delay(1000) int a0 = analogread(0); if (a0 > 200 ) DriveWrite( -200, -200 ); delay(1000); DriveWrite( 200, 200 ) delay(100) DriveWrite( 200, -200 ); delay(1000); DriveWrite( 200, 200 ); delay(100);

216 13.5 LED 를점멸하는로봇 구현하기 로봇이움직일때 LED 가 0.5 초간격으로점멸하는기능을구현해본다. 전역변수를활용하여 0.1 초간격으로 loop() 함수가실행되면서동시에 LED 가점멸하도록기존코드에기능을추가해본다. SPL 스크립트 스케치코드 cnt = 0 #include<spllib.h> a0 = AnalogRead(0) pinmode(4, OUTPUT); pinmode(7, OUTPUT); int cnt = 0; if (a0 > 200 ) DriveWrite( -200, -200 ) delay(1000) DriveWrite( 200, -200 ) delay(1000) int a0 = analogread(0); if (a0 > 200 ) DriveWrite( -200, -200 ); delay(1000); DriveWrite( 200, 200 ) cnt = ( cnt + 1 ) % 10 if (cnt < 5 ) DigitalWrite(13, HIGH) else DigitalWrite(13, LOW) delay(100) DriveWrite( 200, -200 ); delay(1000); DriveWrite( 200, 200 ); cnt = ( cnt + 1 ) % 10; if (cnt < 5 ) digitalwrite(13, HIGH); else digitalwrite(13, LOW);

217 delay(100);

218 13.6 후진시삐삐경보소리연주하기 구현하기 로봇이뒤로움직일때 0.4 초간격으로삐삐삐삐소리가나도록한다. SPL 스크립트 스케치코드 cnt = 0 #include<spllib.h> a0 = AnalogRead(0) pinmode(4, OUTPUT); pinmode(7, OUTPUT); int cnt = 0; if (a0 > 200 ) for (int i = 0; i < 4; i++) tone(3, 1000, 200) DriveWrite( -200, -200 ) delay(400) DriveWrite( 200, -200 ) delay(1000) int a0 = analogread(0); if (a0 > 200 ) for (int i = 0; i < 4; i++) tone(3, 1000, 200); DriveWrite( -200, -200 ); delay(400); DriveWrite( 200, 200 ) cnt = ( cnt + 1 ) % 10 if (cnt < 5 ) DigitalWrite(13, HIGH) else DigitalWrite(13, LOW) delay(100) DriveWrite( 200, -200 ); delay(1000); DriveWrite( 200, 200 ); cnt = ( cnt + 1 ) % 10; if (cnt < 5 ) digitalwrite(13, HIGH); else digitalwrite(13, LOW);

219 delay(100); 실습 컬러 LED 바를로봇에장착하여회전시방향지시등의역할을하도록기능 을추가해본다. 후진시컬러 LED 바가비상등의역할을하도록기능을추가해본다. 전진시에는차량의미등과같이컬러 LED 바에약한빛이켜지도록기능을 추가해본다

220 14 블루투스원격제어하기 학습목표 시리얼데이터수신명령어를이해하고활용할수있다. 블루투스통신을통해스마트폰으로아두이노를제어할수있다. 실습개요 콘솔창의키패드버튼을이용한시리얼데이터읽기기능을구현한다. 시리얼읽기기능으로 LED를제어한다. 시리얼읽기기능으로로봇을제어한다. 스마트폰의블루투스통신기능을이용하여아두이노를제어해본다

221 14.1 준비하기 준비물 아두이노보드, 올인원쉴드, 모바일로봇플랫폼, 블루투스모듈, LED 모 듈, 스마트폰 아두이노우노보드 올인원쉴드 블루투스모듈 모바일로봇플랫폼

222 H/W 연결하기 왼쪽모터의케이블을 MOTOR1 단자에연결한다. 오른쪽모터의케이블을 MOTOR2 단자에연결한다. LED 모듈을디지털 13 번에연결한다

223 블루투스모듈 블루투스모듈은디지털핀 0 번과 1 번에연결되어야하는데, 블루투스모 듈이아두이노보드에연결되어있으면프로그램이업로드가되지못한다. 따라서블루투스모듈은아두이노보드에업로드가완료된후에연결을해 주어야한다

224 14.2 시리얼데이터읽기 SerialRead() 명령어 지금까지사용해온 PrintLine() 함수는아두이노보드에서 PC 로데이터를 보내는명령이다. 반대로 PC 에서보낸데이터를아두이노보드에서읽으려면 SerialRead() 명령어를사용해주어야한다. 아래의코드를업로드한콘솔창의확인해본다. SPL 스크립트 스케치코드 s = SerialRead() PrintLine(s) delay(100) Serial.begin(115200); int s = Serial.read(); Serial.println(s); delay(100);

225 14.3 콘솔창에서데이터보내기 데이터전송하기 콘솔창의우측하단을보면 8 개의키패드버튼이있다. 각각의버튼을클 릭하면버튼에쓰여진번호가바이트값으로아두이노보드로전송된다. 블루투스모듈을통해아두이노로값을전송하는경우에도위의콘솔창에 서버튼을눌러값을전송하는것과동일한값이전송된다. 스마트폰이없는경우는위의콘솔창을이용해블루투스를이용하는시나 리오를동일하게테스트할수있다

226 14.4 시리얼통신으로 LED 제어하기 구현하기 콘솔창의키패드버튼으로아두이노보드에값을전송하고, 이값을이용하 여 LED 를제어하는기능을작성해본다. SPL 스크립트 스케치코드 s = SerialRead() if (s == 1) DigitalWrite(13, HIGH) else if (s == 2) DigitalWrite(13, LOW) delay(100) Serial.begin(115200); pinmode(13, OUTPUT); int s = Serial.read(); if (s == 1) digitalwrite(13, HIGH); else if (s == 2) digitalwrite(13, LOW); delay(100);

227 14.5 시리얼통신으로로봇제어하기 구현하기 콘솔창의키패드버튼으로아두이노보드에값을전송하고, 이값을이용하 여로봇을제어하는기능을작성해본다. SPL 스크립트 s = SerialRead() 스케치코드 #include<spllib.h> pinmode(4, OUTPUT); pinmode(7, OUTPUT); Serial.begin(115200); if (s == 1) DriveWrite( 200, 200 ) else if (s == 2) DriveWrite( -200, 200 ) else if (s == 3) DriveWrite( 0, 0 ) else if (s == 4) DriveWrite( 200, -200 ) else if (s == 5) DriveWrite( -200, -200 ) delay(100) int s = Serial.read(); if (s == 1) DriveWrite( 200, 200 ); else if (s == 2) DriveWrite( -200, 200 ); else if (s == 3) DriveWrite( 0, 0 ); else if (s == 4) DriveWrite( 200, -200 ); else if (s == 5) DriveWrite( -200, -200 ); delay(100);

228 14.6 블루투스모듈연결하기 블루투스모듈연결하기 아두이노보드에프로그램이정상적으로업로드가되었다면, 이제블루투스 모듈을연결할수있다. 블루투스모듈이아두이노보드에미리연결되어있다면프로그램이업로 드되지못하므로반드시업로드할때에는블루투스모듈을아두이노보드 로부터제거해놓아야한다. 블루투스모듈은다음과같이연결한다

229 블루투스모듈은다음과같이 4 핀으로구성되어있다. 블루투스모듈이연결된결과는다음과같다

230 14.7 스마트폰용앱설치하기 앱설치 아두이노의블루투스모듈에무선으로값을전송하기위해서는스마트폰을 활용하는방법이있다. 블루투스가지원되는스마트폰에앱을설치한후, 스마트폰의앱을통해아 두이노보드로값을전송해보자. 먼저, Play 스토어를실행시킨다

231 먼저, Play 스토어를실행시킨다. 검색창에서 helloapps 단어를입력한다. SPL-Duino Lite 앱을선택한다

232 블루투스를켠후, SPL Example 4 를실행한다

233 블루투스모듈뒷면에있는번호를찾아서페어링을진행한다

234 페어링화면에서숫자 0000 또는 1234 를입력한다

235 스마트폰의화면에서버튼을눌러로봇이제어되는지확인한다

준비물 아두이노보드, 올인원쉴드, USB 연결케이블 아두이노우노보드 올인원쉴드 - 2 -

준비물 아두이노보드, 올인원쉴드, USB 연결케이블 아두이노우노보드 올인원쉴드 - 2 - 01 아두이노코딩및프로젝트준비작업 학습목표 아두이노프로젝트활동에필요한 H/W 및 S/W 설치작업을완료한다. 아두이노의역사와기능에대해이해한다. 실습개요 아두이노의용도와기능에대해살펴한다. 아두이노 S/W 개발툴을설치한다. USB 드라이버를설치한다. 아두이노연결상태를확인한다. - 1 - 준비물 아두이노보드, 올인원쉴드, USB 연결케이블 아두이노우노보드 올인원쉴드

More information

아두이노코딩및프로젝트실습 v2.0 김영준저 공학박사, 목원대학교겸임교수 前 Microsoft 수석연구원 헬로앱스

아두이노코딩및프로젝트실습 v2.0 김영준저 공학박사, 목원대학교겸임교수 前 Microsoft 수석연구원 헬로앱스 아두이노코딩및프로젝트실습 v2.0 김영준저 공학박사, 목원대학교겸임교수 前 Microsoft 수석연구원 헬로앱스 http://www.helloapps.co.kr 목차 01. 아두이노코딩및프로젝트준비작업 1 02. LED 점멸하기 29 03. 절전기능 LED 후레쉬 47 04. 틱톡스위치만들기 61 05. 토글스위치를활용하는프로젝트 73 06. 스마트헤드라이트

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 Eclipse (IDE) JDK Android SDK with ADT IDE: Integrated Development Environment JDK: Java Development Kit (Java SDK) ADT: Android Development Tools 2 JDK 설치 Eclipse

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 유니티와아두이노를활용한 VR 컨트롤러개발 헬로앱스코딩교육 김영준 공학박사, 목원대학교겸임교수前 Microsoft 수석연구원 splduino@gmail.com http://www.helloapps.co.kr 목차 1. 툴설치 2. 아두이노컨트롤러개발실습 3. 유니티기본명령어실습 4. 유니티 VR 콘텐츠개발실습 5. 블루투스를이용한아두이노컨트롤러연동실습 SW 설치

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 유니티와아두이노를활용한 VR 컨트롤러개발 Part 06 헬로앱스코딩교육 김영준 공학박사, 목원대학교겸임교수前 Microsoft 수석연구원 splduino@gmail.com http://www.helloapps.co.kr 키보드로물체생성하기 키보드로물체생성하기 public GameObject CubeObject; public GameObject MyCamera;

More information

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc NTAS and FRAME BUILDER Install Guide NTAS and FRAME BUILDER Version 2.5 Copyright 2003 Ari System, Inc. All Rights reserved. NTAS and FRAME BUILDER are trademarks or registered trademarks of Ari System,

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

Visual Basic 반복문

Visual Basic 반복문 학습목표 반복문 For Next문, For Each Next문 Do Loop문, While End While문 구구단작성기로익히는반복문 2 5.1 반복문 5.2 구구단작성기로익히는반복문 3 반복문 주어진조건이만족하는동안또는주어진조건이만족할때까지일정구간의실행문을반복하기위해사용 For Next For Each Next Do Loop While Wend 4 For

More information

Microsoft PowerPoint - es-arduino-lecture-03

Microsoft PowerPoint - es-arduino-lecture-03 임베디드시스템개론 : Arduino 활용 Lecture #3: Button Input & FND Control 2012. 3. 25 by 김영주 강의목차 디지털입력 Button switch 입력 Button Debounce 7-Segment FND : 직접제어 7-Segment FND : IC 제어 2 디지털입력 : Switch 입력 (1) 실습목표 아두이노디지털입력처리실습

More information

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 개발환경구조및설치순서 JDK 설치 Eclipse 설치 안드로이드 SDK 설치 ADT(Androd Development Tools) 설치 AVD(Android Virtual Device) 생성 Hello Android! 2 Eclipse (IDE) JDK Android SDK with

More information

슬라이드 1

슬라이드 1 마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

1

1 1 2 3 4 5 6 b b t P A S M T U s 7 m P P 8 t P A S M T U s 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 Chapter 1 29 1 2 3 4 18 17 16 15 5 6 7 8 9 14 13 12 11 10 1 2 3 4 5 9 10 11 12 13 14 15

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

Studuino소프트웨어 설치

Studuino소프트웨어 설치 Studuino 프로그래밍환경 Studuino 소프트웨어설치 본자료는 Studuino 프로그래밍환경설치안내서입니다. Studuino 프로그래밍 환경의갱신에따라추가 / 수정될수있습니다. 목차 1. 소개... 1 2. Windows... 2 2.1. 프로그래밍환경설치... 2 2.1.1. 웹설치버전설치방법... 2 2.2. Studuino 프로그래밍환경실행...

More information

ü ü ü #include #include #include #include Servo servoleft; Servo servoright; int sensorvalue1, sensorvalue2; // 각각앞쪽과뒤쪽의조도센서 int voltage, voltage2;

More information

PowerPoint Presentation

PowerPoint Presentation #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을작성하면서 C 프로그램의구성요소에대하여알아본다.

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 2 장 : C 프로그램시작하기 2012 년 이은주 학습목표 을작성하면서 C 프로그램의구성요소 주석 (comment) 이란무엇인지알아보고, 주석을만드는방법 함수란무엇인지알아보고, C 프로그램에반드시필요한 main 함수 C 프로그램에서출력에사용되는 printf 함수 변수의개념과변수의값을입력받는데사용되는 scanf 함수 2 목차 프로그램코드

More information

지도상 유의점 m 학생들이 어려워하는 낱말이 있으므로 자세히 설명해주도록 한다. m 버튼을 무리하게 조작하면 고장이 날 위험이 있으므로 수업 시작 부분에서 주의를 준다. m 활동지를 보고 어려워하는 학생에게는 영상자료를 접속하도록 안내한다. 평가 평가 유형 자기 평가

지도상 유의점 m 학생들이 어려워하는 낱말이 있으므로 자세히 설명해주도록 한다. m 버튼을 무리하게 조작하면 고장이 날 위험이 있으므로 수업 시작 부분에서 주의를 준다. m 활동지를 보고 어려워하는 학생에게는 영상자료를 접속하도록 안내한다. 평가 평가 유형 자기 평가 수업주제 경찰 출동! (버튼, LED, 버저 사용하기) 9 / 12 차시 수업의 주제와 목표 본 수업에서는 이전 차시에 배웠던 블록들의 기능을 복합적으로 활용한다. 스위치 기능을 가진 버튼을 활용하여 LED와 버저를 동시에 작동시키도록 한다. 각 블록들을 함께 사용하는 프로젝트를 통해 각각의 기능을 익히고 보다 다양한 활용 방법을 구상할 수 있다. 교수 학습

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향

More information

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap06-1Array.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-1 참고자료 배열 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 배열의선언과사용 같은형태의자료형이많이필요할때배열을사용하면효과적이다. 배열의선언 배열의사용 배열과반복문 배열의초기화 유연성있게배열다루기 한빛미디어

More information

슬라이드 1

슬라이드 1 첨부 4 리모콘별 TV 셋팅방법 2011. 1 전략서비스본부서비스지원팀 1 경제형 2002년개발쌍방향단순-2007년개발경제형 /PVR-2007년개발 2002 년 02 월 ~ 2003 년 08 월 85 만 (40 만은 TV 설정불가 ) 선호채널 도움말 만가능 1) TV 전원을키고 2) 0( 숫자 )+ 음소거동시에누름 -> LED ON 3) 리모콘 LED 주황색불확인후제조사코드입력

More information

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt 변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

Windows 8에서 BioStar 1 설치하기

Windows 8에서 BioStar 1 설치하기 / 콘텐츠 테이블... PC에 BioStar 1 설치 방법... Microsoft SQL Server 2012 Express 설치하기... Running SQL 2012 Express Studio... DBSetup.exe 설정하기... BioStar 서버와 클라이언트 시작하기... 1 1 2 2 6 7 1/11 BioStar 1, Windows 8 BioStar

More information

Microsoft Word - PLC제어응용-2차시.doc

Microsoft Word - PLC제어응용-2차시.doc 과정명 PLC 제어응용차시명 2 차시. 접점명령 학습목표 1. 연산개시명령 (LOAD, LOAD NOT) 에대하여설명할수있다. 2. 직렬접속명령 (AND, AND NOT) 에대하여설명할수있다. 3. 병렬접속명령 (OR, OR NOT) 에대하여설명할수있다. 4.PLC의접점명령을가지고간단한프로그램을작성할수있다. 학습내용 1. 연산개시명령 1) 연산개시명령 (LOAD,

More information

Microsoft PowerPoint - e pptx

Microsoft PowerPoint - e pptx Import/Export Data Using VBA Objectives Referencing Excel Cells in VBA Importing Data from Excel to VBA Using VBA to Modify Contents of Cells 새서브프로시저작성하기 프로시저실행하고결과확인하기 VBA 코드이해하기 Referencing Excel Cells

More information

이 장에서 사용되는 MATLAB 명령어들은 비교적 복잡하므로 MATLAB 창에서 명령어를 직접 입력하지 않고 확장자가 m 인 text 파일을 작성하여 실행을 한다

이 장에서 사용되는 MATLAB 명령어들은 비교적 복잡하므로 MATLAB 창에서 명령어를 직접 입력하지 않고 확장자가 m 인 text 파일을 작성하여 실행을 한다 이장에서사용되는 MATLAB 명령어들은비교적복잡하므로 MATLAB 창에서명령어를직접입력하지않고확장자가 m 인 text 파일을작성하여실행을한다. 즉, test.m 과같은 text 파일을만들어서 MATLAB 프로그램을작성한후실행을한다. 이와같이하면길고복잡한 MATLAB 프로그램을작성하여실행할수있고, 오류가발생하거나수정이필요한경우손쉽게수정하여실행할수있는장점이있으며,

More information

Install stm32cubemx and st-link utility

Install stm32cubemx and st-link utility STM32CubeMX and ST-LINK Utility for STM32 Development 본문서는 ST Microelectronics 의 ARM Cortex-M 시리즈 Microcontroller 개발을위해제공되는 STM32CubeMX 와 STM32 ST-LINK Utility 프로그램의설치과정을설명합니다. 본문서는 Microsoft Windows 7

More information

JDK이클립스

JDK이클립스 JDK 와이클립스설치 A. JDK 다운로드, 설치및환경설정 지금부터 JDK를다운로드받아설치하고 JDK를윈도우에서활용할수있도록환경을설정하는전과정을소개한다. 다운로드 www.oracle.com 사이트에접속하여 Downloads 메뉴를선택한후 [ 그림 1] 과같이 "Java for Developers" 를클릭한다. [ 그림 1] www.oracle.com 사이트

More information

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - C++ 5 .pptx C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성

More information

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - additional01.ppt [호환 모드] 1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능

More information

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 비트연산자 1 1 비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 진수법! 2, 10, 16, 8! 2 : 0~1 ( )! 10 : 0~9 ( )! 16 : 0~9, 9 a, b,

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우. 소프트웨어매뉴얼 윈도우드라이버 Rev. 3.03 SLP-TX220 / TX223 SLP-TX420 / TX423 SLP-TX400 / TX403 SLP-DX220 / DX223 SLP-DX420 / DX423 SLP-DL410 / DL413 SLP-T400 / T403 SLP-T400R / T403R SLP-D220 / D223 SLP-D420 / D423

More information

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074> Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법

More information

ISP and CodeVisionAVR C Compiler.hwp

ISP and CodeVisionAVR C Compiler.hwp USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler http://www.avrmall.com/ November 12, 2007 Copyright (c) 2003-2008 All Rights Reserved. USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler

More information

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조 - Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]

More information

윈도우즈프로그래밍(1)

윈도우즈프로그래밍(1) 제어문 (2) For~Next 문 윈도우즈프로그래밍 (1) ( 신흥대학교컴퓨터정보계열 ) 2/17 Contents 학습목표 프로그램에서주어진특정문장을부분을일정횟수만큼반복해서실행하는문장으로 For~Next 문등의구조를이해하고활용할수있다. 내용 For~Next 문 다중 For 문 3/17 제어문 - FOR 문 반복문 : 프로그램에서주어진특정문장들을일정한횟수만큼반복해서실행하는문장

More information

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

<4D F736F F D D31312D30312D53572D30312DBBE7BFEBC0DABCB3B8EDBCAD5FBFDCBACEB9E8C6F7BFEB2E646F63>

<4D F736F F D D31312D30312D53572D30312DBBE7BFEBC0DABCB3B8EDBCAD5FBFDCBACEB9E8C6F7BFEB2E646F63> SAM4S Printer Driver Installer 달리명시하지않은한, 인쇄또는복사된문서는통제하지않는문서임 목 차 1. 1. WINDOWS DRIVER INSTALLER 설치 설치...... 2 2. 프린터추가...... 5 3. 프린터제거...... 19 4. 프린터추가 / 제거선택...... 21 5. 프로그램추가 / 제거...... 21 SHC- 11-01-

More information

슬라이드 1

슬라이드 1 프로세싱 광운대학교로봇학부박광현 프로세싱실행 2 C:\processing-3.2.1 폴더 창나타내기 실행 정지 3 폭 높이 600 400 도형그리기 배경칠하기 5 background(255, 255, 255); R G B background(255, 0, 0); background(255, 122, 0); 선그리기 6 background(255, 122, 0);

More information

< 제누이노스타트키트 > 사용설명서 목차 1. Arduino IDE 설치하기 2. Genuino 연결및 Arduino IDE 셋팅하기 3. 센서설명및연결도, 예제소스 1

< 제누이노스타트키트 > 사용설명서 목차 1. Arduino IDE 설치하기 2. Genuino 연결및 Arduino IDE 셋팅하기 3. 센서설명및연결도, 예제소스 1 < 제누이노스타트키트 > 사용설명서 목차 1. Arduino IDE 설치하기 2. Genuino 연결및 Arduino IDE 셋팅하기 3. 센서설명및연결도, 예제소스 1 1. Arduino IDE 설치하기 1) Arduino IDE 다운로드 - 홈페이지주소 : https://www.arduino.cc 접속합니다. Download 를클릭합니다. Windows

More information

PowerPoint Template

PowerPoint Template JavaScript 회원정보 입력양식만들기 HTML & JavaScript Contents 1. Form 객체 2. 일반적인입력양식 3. 선택입력양식 4. 회원정보입력양식만들기 2 Form 객체 Form 객체 입력양식의틀이되는 태그에접근할수있도록지원 Document 객체의하위에위치 속성들은모두 태그의속성들의정보에관련된것

More information

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D> 리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1

More information

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과 1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과 학습내용 1. Java Development Kit(JDK) 2. Java API 3. 자바프로그래밍개발도구 (Eclipse) 4. 자바프로그래밍기초 2 자바를사용하려면무엇이필요한가? 자바프로그래밍개발도구 JDK (Java Development Kit) 다운로드위치 : http://www.oracle.com/technetwork/java/javas

More information

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

More information

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Java7.pptx HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

01 3 차원가상공간의이해 학습목표 3 차원가상공간의구성원리를이해할수있다. 3 차원가상공간상에물체를스스로추가할수있다. 실습개요 3D 박스모양을추가해본다. 3차원위치개념을실습해본다. 모양의옵션을추가하는방법을실습해본다. 특수효과와재질을활용하여콘텐츠의내용을다양하게변화시켜본다

01 3 차원가상공간의이해 학습목표 3 차원가상공간의구성원리를이해할수있다. 3 차원가상공간상에물체를스스로추가할수있다. 실습개요 3D 박스모양을추가해본다. 3차원위치개념을실습해본다. 모양의옵션을추가하는방법을실습해본다. 특수효과와재질을활용하여콘텐츠의내용을다양하게변화시켜본다 드론코딩체험북 v1.0 헬로앱스 http://www.helloapps.co.kr 01 3 차원가상공간의이해 학습목표 3 차원가상공간의구성원리를이해할수있다. 3 차원가상공간상에물체를스스로추가할수있다. 실습개요 3D 박스모양을추가해본다. 3차원위치개념을실습해본다. 모양의옵션을추가하는방법을실습해본다. 특수효과와재질을활용하여콘텐츠의내용을다양하게변화시켜본다. 준비물

More information

Microsoft Word - src.doc

Microsoft Word - src.doc IPTV 서비스탐색및콘텐츠가이드 RI 시스템운용매뉴얼 목차 1. 서버설정방법... 5 1.1. 서비스탐색서버설정... 5 1.2. 컨텐츠가이드서버설정... 6 2. 서버운용방법... 7 2.1. 서비스탐색서버운용... 7 2.1.1. 서비스가이드서버실행... 7 2.1.2. 서비스가이드정보확인... 8 2.1.3. 서비스가이드정보추가... 9 2.1.4. 서비스가이드정보삭제...

More information

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap01-C언어개요.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을

More information

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다. Eclipse 개발환경에서 WindowBuilder 를이용한 Java 프로그램개발 이예는 Java 프로그램의기초를이해하고있는사람을대상으로 Embedded Microcomputer 를이용한제어시스템을 PC 에서 Serial 통신으로제어 (Graphical User Interface (GUI) 환경에서 ) 하는프로그램개발예를설명한다. WindowBuilder:

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 06 반복문 01 반복문의필요성 02 for문 03 while문 04 do~while문 05 기타제어문 반복문의의미와필요성을이해한다. 대표적인반복문인 for 문, while 문, do~while 문의작성법을 알아본다. 1.1 반복문의필요성 반복문 동일한내용을반복하거나일정한규칙으로반복하는일을수행할때사용 프로그램을좀더간결하고실제적으로작성할수있음.

More information

C 프로그램의 기본

C 프로그램의 기본 C 프로그램의기본 목차 C 프로그램의구성요소 주석 main 함수 출력 C 언어의입력과출력 변수 printf 함수 scanf 함수 2 예제 2-1 : 첫번째 C 프로그램 3 2.1.1 주석 주석의용도 프로그램에대한설명 프로그램전체에대한대략적인정보를제공 프로그램수행에영향을미치지않는요소 4 2.1.1 주석 주석사용방법 /* 과 */ 을이용한여러줄주석 // 을이용한한줄주석

More information

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드] Chapter 03 변수와자료형 2009 한국항공대학교항공우주기계공학부 (http://mercury.kau.ac.kr/sjkwon) 1 변수와자료유형 변수 프로그램에서자료값을임시로기억할수있는저장공간을변수 (variables) 변수 (Variables) 는컴퓨터의메모리인 RAM(Random Access Memory) 에저장 물건을담는박스라고생각한다면박스의크기에따라담을물건이제한됨

More information

슬라이드 제목 없음

슬라이드 제목 없음 ETOS-DPS-X Guide AC&T SYSTEM 1 ETOS-DPS-X 개요 ETOS-DPS-X Field Bus Network 중 Profibus-DP Network 에연결되는장비. ProfiBus-DP Network 시스템에 DP 통신을지원하지않는현장장비에대한통신서버기능구현. Profibus-DP Slave 동작하기때문에반드시 DP-Master 모듈이있는시스템에서적용가능.

More information

(Microsoft PowerPoint - \270\266\300\314\305\251\267\316\304\250USB_Host_Device_\272\316\306\256\267\316\264\365\275\307\275\300_Philip.ppt)

(Microsoft PowerPoint - \270\266\300\314\305\251\267\316\304\250USB_Host_Device_\272\316\306\256\267\316\264\365\275\307\275\300_Philip.ppt) 마이크로칩 USB Host & Device 부트로더기능실습 한국마이크로칩서한석부장 (CAE) 2009-09-07 마이크로칩 16 비트 USB 데모보드세팅 Explorer 16 + USB PICtail Plus Daughter Board + USB PIMs Part #: DM240001 Part #: AC164131 Part #: MA240014(PIC24FJ256GB11)

More information

슬라이드 1

슬라이드 1 핚국산업기술대학교 제 14 강 GUI (III) 이대현교수 학습안내 학습목표 CEGUI 라이브러리를이용하여, 게임메뉴 UI 를구현해본다. 학습내용 CEGUI 레이아웃의로딩및렌더링. OIS 와 CEGUI 의연결. CEGUI 위젯과이벤트의연동. UI 구현 : 하드코딩방식 C++ 코드를이용하여, 코드내에서직접위젯들을생성및설정 CEGUI::PushButton* resumebutton

More information

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상 Android 용 Brother Image Viewer 설명서 버전 0 KOR 아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상표입니다. Android는

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F > 10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절

More information

JAVA PROGRAMMING 실습 02. 표준 입출력

JAVA PROGRAMMING 실습 02. 표준 입출력 자바의기본구조? class HelloJava{ public static void main(string argv[]){ system.out.println( hello,java ~ ){ } } # 하나하나뜯어살펴봅시다! public class HelloJava{ 클래스정의 public static void main(string[] args){ System.out.println(

More information

Mango-IMX6Q mfgtool을 이용한 이미지 Write하기

Mango-IMX6Q mfgtool을 이용한 이미지 Write하기 Mango-IMX6Q mfgtool 을 이용한이미지 Write 하기 http://www.mangoboard.com/ http://cafe.naver.com/embeddedcrazyboys Crazy Embedded Laboratory www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology 1 Document

More information

Microsoft Word - 3부A windows 환경 IVF + visual studio.doc

Microsoft Word - 3부A windows 환경 IVF + visual studio.doc Visual Studio 2005 + Intel Visual Fortran 9.1 install Intel Visual Fortran 9.1 intel Visual Fortran Compiler 9.1 만설치해서 DOS 모드에서실행할수있지만, Visual Studio 2005 의 IDE 를사용하기위해서는 Visual Studio 2005 를먼저설치후 Integration

More information

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2> 쉽게풀어쓴 C 언어 Express 제 3 장 C 프로그램구성요소 이번장에서학습할내용 * 주석 * 변수, 상수 * 함수 * 문장 * 출력함수 printf() * 입력함수 scanf() * 산술연산 * 대입연산 이번장에서는 C 프로그램을이루는구성요소들을살펴봅니다. 일반적인프로그램의형태 데이터를받아서 ( 입력단계 ), 데이터를처리한후에 ( 처리단계 ), 결과를화면에출력

More information

특징 찾아보기 열쇠 없이 문을 열 수 있어요! 비밀번호 및 RF카드로도 문을 열 수 있습니다. 또한 비밀번호가 외부인에게 알려질 위험에 대비, 통제번호까지 입력해 둘 수 있어 더욱 안심하고 사용할 수 있습니다. 나만의 비밀번호 및 RF카드를 가질 수 있어요! 다수의 가

특징 찾아보기 열쇠 없이 문을 열 수 있어요! 비밀번호 및 RF카드로도 문을 열 수 있습니다. 또한 비밀번호가 외부인에게 알려질 위험에 대비, 통제번호까지 입력해 둘 수 있어 더욱 안심하고 사용할 수 있습니다. 나만의 비밀번호 및 RF카드를 가질 수 있어요! 다수의 가 www.kdnetwork.com 특징 찾아보기 열쇠 없이 문을 열 수 있어요! 비밀번호 및 RF카드로도 문을 열 수 있습니다. 또한 비밀번호가 외부인에게 알려질 위험에 대비, 통제번호까지 입력해 둘 수 있어 더욱 안심하고 사용할 수 있습니다. 나만의 비밀번호 및 RF카드를 가질 수 있어요! 다수의 가능할 삭제할 건전지 사용자를 위한 개별 비밀번호 및 RF카드

More information

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - [2009] 02.pptx 원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include

More information

MF3010 MF Driver Installation Guide

MF3010 MF Driver Installation Guide 한국어 MF 드라이버설치설명서 사용자소프트웨어 CD-ROM................................................ 1.................................................................... 1..............................................................................

More information

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.

More information

API 매뉴얼

API 매뉴얼 PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음

More information

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음 프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음 CHAPTER 9 둘중하나선택하기 관계연산자 두개의피연산자를비교하는연산자 결과값은참 (1) 아니면거짓 (0) x == y x 와 y 의값이같은지비교한다. 관계연산자 연산자 의미 x == y x와 y가같은가? x!= y

More information

SBR-100S User Manual

SBR-100S User Manual ( 1 / 13 ) SBR-100S 모델에 대한 사용자 펌웨어 업그레이드 방법을 안내해 드립니다. SBR-100S 는 신규 펌웨어가 있을시 FOTA(자동업데이트) 기능을 통하여 자동 업그레이드가 되며, 필요시 사용자가 신규 펌웨어를 다운받아 수동으로 업그레이드 할 수 있습니다. 1. 준비하기 1.1 연결 장치 준비 펌웨어 업그레이드를 위해서는 SBR-100S

More information

B.3 JDBC 설치 JDBC Java DataBase Connectivity 는자바에서 DBMS의종류에상관없이일관된방법으로 SQL을수행할수있도록해주는자바 API Application Program Interface 다. 이책에서는톰캣과 SQL Server 간의연결을위

B.3 JDBC 설치 JDBC Java DataBase Connectivity 는자바에서 DBMS의종류에상관없이일관된방법으로 SQL을수행할수있도록해주는자바 API Application Program Interface 다. 이책에서는톰캣과 SQL Server 간의연결을위 B.3 JDBC 설치 JDBC Java DataBase Connectivity 는자바에서 DBMS의종류에상관없이일관된방법으로 SQL을수행할수있도록해주는자바 API Application Program Interface 다. 이책에서는톰캣과 SQL Server 간의연결을위해서설치한다. http://www.microsoft.com/ko-kr/download에접속해

More information

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074> SIMATIC S7 Siemens AG 2004. All rights reserved. Date: 22.03.2006 File: PRO1_17E.1 차례... 2 심벌리스트... 3 Ch3 Ex2: 프로젝트생성...... 4 Ch3 Ex3: S7 프로그램삽입... 5 Ch3 Ex4: 표준라이브러리에서블록복사... 6 Ch4 Ex1: 실제구성을 PG 로업로드하고이름변경......

More information

JARDUINO-UNO-BT 커넥터 / 스위치기능 종류 USB 커넥터리셋스위치 DC 전원잭업로드선택스위치 ISP 모드선택점퍼블루투스시리얼모듈전원 / 디지털포트 / 아날로그포트커넥터및 ISP 커넥터 기능 +5V 전원공급, 유선업로드기능누른상태에서전원을공급하면부트로더프로그

JARDUINO-UNO-BT 커넥터 / 스위치기능 종류 USB 커넥터리셋스위치 DC 전원잭업로드선택스위치 ISP 모드선택점퍼블루투스시리얼모듈전원 / 디지털포트 / 아날로그포트커넥터및 ISP 커넥터 기능 +5V 전원공급, 유선업로드기능누른상태에서전원을공급하면부트로더프로그 JARDUINO-UNO-BT : 유무선아두이노 UNO 호환모듈 이제부터는아두이노도무선으로쓰자!!! 무선업로드기능이내장된아두이노 UNO 호환모듈드디어출시!!! JARDUINO-UNO-BT 소개 JARDUINO-UNO-BT는제이씨넷이출시한아두이노 UNO(Arduino UNO R3) 호환모듈로, 유선업로드는물론블루투스시리얼모듈을포함하고있어무선업로드도가능한아두이노모듈입니다.

More information

게임 기획서 표준양식 연구보고서

게임 기획서 표준양식 연구보고서 ᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞ ᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞ ᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞ ᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞ ᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞ ᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞ ᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞ

More information

untitled

untitled 시스템소프트웨어 : 운영체제, 컴파일러, 어셈블러, 링커, 로더, 프로그래밍도구등 소프트웨어 응용소프트웨어 : 워드프로세서, 스프레드쉬트, 그래픽프로그램, 미디어재생기등 1 n ( x + x +... + ) 1 2 x n 00001111 10111111 01000101 11111000 00001111 10111111 01001101 11111000

More information

PowerPoint Template

PowerPoint Template 설치및실행방법 Jaewoo Shim Jun. 4. 2018 Contents SQL 인젝션이란 WebGoat 설치방법 실습 과제 2 SQL 인젝션이란 데이터베이스와연동된웹서버에입력값을전달시악의적동작을수행하는쿼리문을삽입하여공격을수행 SELECT * FROM users WHERE id= $_POST[ id ] AND pw= $_POST[ pw ] Internet

More information

Microsoft PowerPoint - chap05-제어문.pptx

Microsoft PowerPoint - chap05-제어문.pptx int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); 1 학습목표 제어문인,, 분기문에 대해 알아본다. 인 if와 switch의 사용 방법과 사용시 주의사항에 대해 알아본다.

More information

목차 1. 시스템요구사항 암호및힌트설정 ( 윈도우 ) JetFlash Vault 시작하기 ( 윈도우 ) JetFlash Vault 옵션 ( 윈도우 )... 9 JetFlash Vault 설정... 9 JetFlash Vault

목차 1. 시스템요구사항 암호및힌트설정 ( 윈도우 ) JetFlash Vault 시작하기 ( 윈도우 ) JetFlash Vault 옵션 ( 윈도우 )... 9 JetFlash Vault 설정... 9 JetFlash Vault 사용자매뉴얼 JetFlash Vault 100 ( 버전 1.0) 1 목차 1. 시스템요구사항... 3 2. 암호및힌트설정 ( 윈도우 )... 3 3. JetFlash Vault 시작하기 ( 윈도우 )... 7 4. JetFlash Vault 옵션 ( 윈도우 )... 9 JetFlash Vault 설정... 9 JetFlash Vault 찾아보기... 10 JetFlash

More information

Office 365 사용자 가이드

Office 365 사용자 가이드 [ 여기에입력 ] Office 365 사용자가이드 OFFICE 365 모바일설정 목차 1. 모바일에메일계정추가하기... 2 2. Lync 2013 App 설치하기... 7 3. Office Mobile App 설치하기... 10 4. Office for ipad 설치하기... 16-1 - 모바일기기에 Office 365 를설정해보세요. 모바일기기에 Office

More information

고객 카드 1588-7278

고객 카드 1588-7278 고객 카드 1588-7278 i 안전을 위한 경고사항 안전을 위한 주의사항 i 헤드유닛 DISP RADIO MEDIA PHONE SEEK TRACK 헤드유닛 FOLDER MUTE SCAN SETUP 스티어링 휠 리모트 컨트롤 + - MODE 기본모드 화면 Radio 모드 변경 RADIO 라디오 주파수 검색하기 SEEK TRACK 라디오 모드 사용하기 저장방송

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

슬라이드 1

슬라이드 1 Pairwise Tool & Pairwise Test NuSRS 200511305 김성규 200511306 김성훈 200614164 김효석 200611124 유성배 200518036 곡진화 2 PICT Pairwise Tool - PICT Microsoft 의 Command-line 기반의 Free Software www.pairwise.org 에서다운로드후설치

More information

차시 AS_02 대상 교육주제아두이노 LED 및버튼제어프로젝트교육시간 120 분 1. 아두이노를이용하여 LED 를제어할수있다. 교육목표 2. 아두이노를이용하여삼색 LED 를제어할수있다. 3. 아두이노에서버튼입력을수행하여프로그램에연동할수있다. 장비류는미리배분하고, 재료는

차시 AS_02 대상 교육주제아두이노 LED 및버튼제어프로젝트교육시간 120 분 1. 아두이노를이용하여 LED 를제어할수있다. 교육목표 2. 아두이노를이용하여삼색 LED 를제어할수있다. 3. 아두이노에서버튼입력을수행하여프로그램에연동할수있다. 장비류는미리배분하고, 재료는 차시 AS_02 대상 교육주제아두이노 LED 및버튼제어프로젝트교육시간 120 분 1. 아두이노를이용하여 LED 를제어할수있다. 교육목표 2. 아두이노를이용하여삼색 LED 를제어할수있다. 3. 아두이노에서버튼입력을수행하여프로그램에연동할수있다. 장비류는미리배분하고, 재료는각실험단계에서배분한다. Arduino 1.0 USB 케이블 1.0 교육자료 ( 준비물 ) 300Ω

More information

NTD36HD Manual

NTD36HD Manual Upnp 사용 D7 은 UPNP 를지원하여 D7 의네크워크에연결된 UPNP 기기에별다른설정없이연결하여, 유무선으로네트워크상의연결된 UPNP 기기의콘텐츠를재생할수있습니다. TV 화면의 브라우저, UPNP 를선택하면연결가능한 UPNP 기기가표시됩니다. 주의 - UPNP 기능사용시연결된 UPNP 기기의성능에따라서재생되지않는콘텐츠가있을수있습니다. NFS 사용 D7

More information

MF5900 Series MF Driver Installation Guide

MF5900 Series MF Driver Installation Guide 한국어 MF 드라이버설치설명서 사용자소프트웨어 CD-ROM................................................ 1.................................................................... 1..............................................................................

More information

PowerPoint Template

PowerPoint Template SOFTWARE ENGINEERING Team Practice #3 (UTP) 201114188 김종연 201114191 정재욱 201114192 정재철 201114195 홍호탁 www.themegallery.com 1 / 19 Contents - Test items - Features to be tested - Features not to be tested

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 3 장함수와문자열 1. 함수의기본적인개념을이해한다. 2. 인수와매개변수의개념을이해한다. 3. 함수의인수전달방법 2가지를이해한다 4. 중복함수를이해한다. 5. 디폴트매개변수를이해한다. 6. 문자열의구성을이해한다. 7. string 클래스의사용법을익힌다. 이번장에서만들어볼프로그램 함수란? 함수선언 함수호출 예제 #include using

More information

Microsoft PowerPoint - Perpect C 02.ppt [호환 모드]

Microsoft PowerPoint - Perpect C 02.ppt [호환 모드] 02 C 프로그래밍기초 충남대학교이형주 1 C 프로그램구조 콘솔응용프로그램 2 프로그램실행순서 C 프로그램은여러함수의조합으로구성 함수란정해진규칙에의하여일련의작업을수행하는프로그램의단위 실행순서 main 함수는프로그램이실행되면가장먼저시작되는부분 모든함수내부에서는위에서아래로, 좌에서우로, 문장이위치한순서대로실행 3 전처리기 전처리기 (preprocessor) 미리처리하는프로그램으로,

More information

<4D F736F F F696E74202D203131C1D6C2F7202D E6FB8A620C0CCBFEBC7D120C4B3B8AFC5CD204C43442C C1A6BEEEC7CFB1E2205

<4D F736F F F696E74202D203131C1D6C2F7202D E6FB8A620C0CCBFEBC7D120C4B3B8AFC5CD204C43442C C1A6BEEEC7CFB1E2205 강의내용 Ⅰ Arduino 를이용한캐릭터 LCD, VFD 제어하기 1 1. 소개 소개 - CDS 와디지털입출력포트그중에서도 PWM 포트를사용하여 LED 를 통하여아날로그출력을해보려고함. - 이번강좌를통해여러가지센서들을응용함에많은도움이될것임. 2 1. 소개 - 요즘 LCD와관련하여많은제품들이나오고있음. 종류도다양하고크기도다양함. - 이번강의에서는아두이노를이용하여

More information

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint 자바-기본문법(Ch2).pptx 자바기본문법 1. 기본사항 2. 자료형 3. 변수와상수 4. 연산자 1 주석 (Comments) 이해를돕기위한설명문 종류 // /* */ /** */ 활용예 javadoc HelloApplication.java 2 주석 (Comments) /* File name: HelloApplication.java Created by: Jung Created on: March

More information

게시판 스팸 실시간 차단 시스템

게시판 스팸 실시간 차단 시스템 오픈 API 2014. 11-1 - 목 차 1. 스팸지수측정요청프로토콜 3 1.1 스팸지수측정요청프로토콜개요 3 1.2 스팸지수측정요청방법 3 2. 게시판스팸차단도구오픈 API 활용 5 2.1 PHP 5 2.1.1 차단도구오픈 API 적용방법 5 2.1.2 차단도구오픈 API 스팸지수측정요청 5 2.1.3 차단도구오픈 API 스팸지수측정결과값 5 2.2 JSP

More information