시프트 레지스터 Shift Resistor 자, 이제 LED MATRIX 8x8 Board를 마이크로컨트롤러에 연결된 3개의 선으 로 제어해 보자. 이는 마이크로컨트롤러의 포트를 확장함과 동시에 프로그램 으로 제어를 더 쉽게 한다는 장점이 있다. 물론 포트를 절약하게

Similar documents
Microsoft Word doc

Chapter. 14 DAC 를이용한 LED 밝기제어 HBE-MCU-Multi AVR Jaeheung, Lee

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

가. 도트매트릭스제어하기 단일 LED와는다르게도트매트릭스를구동시는구동전류가프로세서에서출력되는전류보다사용량을더많이필요하기때문에 TTL 계열의 IC로구동시키기에는무리가따른다. 이러한문제를해결하기위해서사용전압, 전류정격이높은달링턴트랜지스터가어레이형태로들어있는 ULN2803을

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - es-arduino-lecture-03

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A636C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

Motor

설계란 무엇인가?

스테퍼모터 Stepper Motor 스테퍼모터는일반 DC 모터의장점인연속회전과서보모터의장점인정확한위치조정, 즉정밀제어가가능한모터이다. 스테퍼모터는 360도를일정한각도의스텝단계로나누어지정한스텝만큼회전하도록되어있으며, 예를들어한스텝이 1.8 인스테퍼모터는 200스텝을회전해

<4D F736F F F696E74202D203131C1D6C2F7202D E6FB8A620C0CCBFEBC7D120C4B3B8AFC5CD204C43442C C1A6BEEEC7CFB1E2205

Physical Computing for Artists & Designers 연세대학교디지털아트학과 Earl Park

슬라이드 1

DIB-100_K(90x120)

[8051] 강의자료.PDF

슬라이드 1


Microsoft Word - PEB08_USER_GUIDE.doc

<4D F736F F F696E74202D20332EB5F0C1F6C5D0C8B8B7CEBFCD20B1B8C7F62E >

Interactive Workshop for Artists & Designers 연세대학교디지털아트학과 Earl Park

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

아날로그입력 Analog Input 작품이외부세계에관한정보를아날로그형태로읽어들이는경우. 센서를이용하는여러프로젝트들이이에속한다. 이를테면작품앞에있는사람의몸무게는어느정도인지, 방안의 조명은얼마나밝은지등을알고자하는경우가이에속한다. 예 ) 다양한센서들

1

歯03-ICFamily.PDF

Slide 1

hd1300_k_v1r2_Final_.PDF

Microsoft PowerPoint - chap06-1Array.ppt

슬라이드 1

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

Microsoft PowerPoint - es-arduino-lecture-09

Microsoft PowerPoint - Java7.pptx

BY-FDP-4-70.hwp

2009년2학기 임베디드시스템 응용

DTS-L300-V2 Specification Page 1 of 14 비접촉온도측정 원거리온도측정 High Accuracy Digital Interface : SPI Arduino UNO 예제코드제공 제품설명 DTS-L300-V2는접촉을하지않고원하는물체표면에온도를 50

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

PowerPoint 프레젠테이션

디지털공학 5판 7-8장

Microsoft Word - FS_ZigBee_Manual_V1.3.docx

PowerPoint Presentation

ARDUINO Open Physical Computing Platform 오탈자, 문의및보완이필요한내용은 으로알려주세요.

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

API 매뉴얼

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

2 Mitsubishi FX Series Computer Link MITSUBISHI FX SERIES COMPUTER LINK 시스템구성 시스템설정 사용예 사용예 사용예

PowerPoint 프레젠테이션

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

2

MicrocontrollerAcademy_Lab_ST_040709

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

Microsoft Word - DTM-M300_Spec_V1_0.doc

IoT FND8 7-SEGMENT api

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

untitled

PowerPoint 프레젠테이션

슬라이드 1

,,,,,, (41) ( e f f e c t ), ( c u r r e n t ) ( p o t e n t i a l difference),, ( r e s i s t a n c e ) 2,,,,,,,, (41), (42) (42) ( 41) (Ohm s law),

2 PX-8000과 RM-8000/LM-8000등의 관련 제품은 시스템의 간편한 설치와 쉬운 운영에 대한 고급 기술을 제공합니다. 또한 뛰어난 확장성으로 사용자가 요구하는 시스템을 손쉽게 구현할 수 있습니다. 메인컨트롤러인 PX-8000의 BGM입력소스를 8개의 로컬지

Microsoft PowerPoint - ch07 - 포인터 pm0415

PowerPoint 프레젠테이션

Microsoft Word - logic2005.doc

PowerPoint 프레젠테이션

슬라이드 1

ez-md+_manual01

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

Microsoft Word - logic2005.doc

전자회로-07장

MAX+plus II Getting Started - 무작정따라하기

서보교육자료배포용.ppt

11장 포인터

s SINUMERIK 840C Service and User Manual DATA SAVING & LOADING & & /

슬라이드 1

Microsoft PowerPoint - 알고리즘_5주차_1차시.pptx

BMP 파일 처리

목차 1. 제품 소개 특징 개요 Function table 기능 소개 Copy Compare Copy & Compare Erase

PowerPoint 프레젠테이션

½½¶óÀ̵å Á¦¸ñ ¾øÀ½


Microsoft Word - Experiment 5.docx

C 언어 프로그래밊 과제 풀이

Microsoft Word - SRA-Series Manual.doc

Formatvorlage für Arbeitsanweisungen

untitled

PowerPoint Presentation

1. 제품소개 1.1 제품소개 < 그림 1.1> 도트매트릭스모듈 하드웨어제작에소요되는시간을단축시켜프로그래밍연구개발및학습효과를극대화시켜주는 16x16 도트매트릭스모듈입니다. 또한당사 AVR, PIC, ARM(STM32F) 개발보드와 1P 점퍼클립케이블을이용하여연동이가능하

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

슬라이드 제목 없음

Microsoft Word - DCMD-1000 사용자 메뉴얼.docx

Microsoft PowerPoint - chap06-2pointer.ppt

PowerPoint 프레젠테이션

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

JAVA PROGRAMMING 실습 02. 표준 입출력

<4D F736F F F696E74202D E6F312D BCB3C4A12C20C4DAB5F920B1E2C3CA2C20BDC3B8AEBEF3C5EBBDC5>

PowerPoint 프레젠테이션

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

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

lecture4(6.범용IO).hwp

Transcription:

Physical Computing for Artists & Designers 연세대학교디지털아트학과 Earl Park

시프트 레지스터 Shift Resistor 자, 이제 LED MATRIX 8x8 Board를 마이크로컨트롤러에 연결된 3개의 선으 로 제어해 보자. 이는 마이크로컨트롤러의 포트를 확장함과 동시에 프로그램 으로 제어를 더 쉽게 한다는 장점이 있다. 물론 포트를 절약하게 됨으로써 LED MATRIX 8x8 Board를 여러개 연결할 수도 있게 된다. 2주 전에 써봤던 74HC595 shift resistor chip을 저번주에 구성해 보았던 트랜지 스터 어레이인 ULN2803과 UDN2981회로에 연결해 보자. 하드웨어가 변경되면 프로그래밍 또한 바뀌어야 한다. 달라진 점을 살펴보자. 저번주 (마이크로컨트롤러 - 트랜지스터 어레이 - LED MATRIX) ULN2981, UDN2803(TR array) + 8x8 LED Matrix 회로도 하드웨어 : 8개씩 2개, 16개의 핀이 트랜지스터 어레이에서 마이크로컨트롤러 로 연결되어 있다. 프로그래밍 : 마이크로컨트롤러에 연결된 각각의 핀에 digitalwrite()로 1개의 비 트(0혹은 1)를 넣어주어 트랜지스터가 LED +, - line을 스위칭하게 만든다. 이번주 (마이크로컨트롤러 - shift resistor - 트랜지스터 어레이 - LED MATRIX) 하드웨어 : Clock, Latch, Data - 3개의 선이 shift resistor에서 마이크로 컨트롤러 로 연결되어 있다. 프로그래밍 : shiftout() 함수로 8개의 비트를 한꺼번에 보내주면 shift resistor가 병렬로 연결된 트랜지스터 어레이를 거쳐 각각의 LED +, - line을 제어하게 되므 로 프로그래밍에서 8개의 비트를 직렬로 보내주면 된다. 74HC595(Shift Resistor) + ULN2981, UDN2803(TR array) + 8x8 LED Matrix 회로도 Physical Computing 1

74HC595 + UDN2981 + ULN2803 회로 74HC595로 8-bit serial-in, serial or parallel-out shift register PINS Q0 ~ Output Pins 1~7, 15 Q7 PIN 8 GND Ground, Vss PIN 9 Q7" Serial Out PIN 10 MR Master Reclear, active low PIN 11 SH_CP Shift register clock pin PIN 12 ST_CP Storage register clock pin (latch pin) PIN 13 OE Output enable, active low PIN 14 DS Serial data input PIN 16 Vcc Positive supply voltage UDN2981 : 8-channel source drivers. pnp open-emitter dalington transistor array PINs in1 Base drive to driver input transistor 1~8 ~in8 PINs out8 Emitter of Darlington driver output. 11~18 ~out1 PIN 9 Vs Supply Input PIN 10 GND Ground ULN2803 : 8-channel sink drivers. npn open-collector dalington transistor array PINs in1 darlington base input 1~8 ~in8 PINs out8 darlington collector output 11~18 ~out1 PIN 9 GND Common Emmitter shared by all channels (typically tied to ground) Physical Computing 2

LED Matrix 켜보기 (basic) <Shift Resistor + TR array 프로그래밍 > data (9번 DS, serial data input pin) latch (10번 ST_CP, storage resistor clock pin) clock (11번 SH_CP, shift resistor clock pin) void setup() : 마이크로컨트롤러에연결된 data, latch, clock핀을아웃풋설정 void loop() : 순서대로가로, 세로각핀에이진수의값을하나씩넣어줌 1. 래치를 0으로만든다. ( 데이터입력받을준비를한다.) 2. ShiftOut명령어로 +line, -line으로보내줄 8개의데이터 (8-bit) 를각각저장해둠 3. 래치를 1로만든다. -> 레지스터에저장되어있던데이터가한꺼번에출력된다. shiftout(datapin, clockpin, MSBFIRST, B10011001); shiftout(datapin, clockpin, MSBFIRST, B11111111); <TR array 프로그래밍 ( 저번시간프로그래밍 )> xbits[] 변수배열 (array) 에 x줄 8개의아두이노핀넘버를저장 ybits[] 변수배열 (array) 에 y줄 8개의아두이노핀넘버를저장. void setup() : 마이크로컨트롤러에연결된핀을모두아웃풋으로설정 void loop() : 순서대로가로, 세로각핀에이진수의값을하나씩넣어줌 ( 각각핀에 8번반복 ) B10011001는이진수를표현하는방식 ( 표기법 ) 이다. B는 Binery의약자. 참고 ) 16진수 0x00, 10진수 00, 이진수 B00000000 byte xbits[] = {2,3,4,5,6,7,8,9; // arduino pin numbers for x byte ybits[] = {10,11,12,13,14,15,16,17; // arduino pin numbers for y for (int i = 0; i < 8; i++){ pinmode(xbits[i], OUTPUT); pinmode(ybits[i], OUTPUT); for (int i = 0; i < 8; i++){ digitalwrite(xbits[i], bitread(b10011001, i)); digitalwrite(ybits[i], bitread(b11111111, i)); Physical Computing 3

LED Matrix 켜보기 (basic, 사용자함수 ) < 프로그래밍 > data (9번 DS, serial data input pin) latch (10번 ST_CP, storage resistor clock pin) clock (11번 SH_CP, shift resistor clock pin) void setup() : 마이크로컨트롤러에연결된 data, latch, clock핀을아웃풋설정 void loop() : drawmatrix() 함수로매개변수 B10011001, B11111111을보내줌. drawmatrix() : 사용자함수로 int x = B10011001, int y = B11111111로받아순서대로가로, 세로각핀에이진수의값을하나씩넣어줌 1. 래치를 0으로만든다. ( 데이터입력받을준비를한다.) 2. ShiftOut명령어로 +line, -line으로보내줄 8개의데이터 (8-bit) 를각각저장해둠 3. 래치를 1로만든다. -> 레지스터에저장되어있던데이터가한꺼번에출력된다. drawmatrix(b10011001, B11111111); void drawmatrix(int x, int y) { shiftout(datapin, clockpin, MSBFIRST, x); shiftout(datapin, clockpin, MSBFIRST, y); * 앞장의코드와하는일은동일함. * 데이터를수정하기편함. 새로운함수 - 사용자함수 http://www.arduino.cc/en/reference/functiondeclaration drawmatrix() 은사용자함수이며, 매개변수의사용이가능하다. 사용자함수명은프로그램하는사람이변수를설정하듯이마음대로정할수있다. 자주사용하는명령들을묶어사용하면편리하다. Physical Computing 4

LED Matrix 켜보기 ( 패턴만들기 1) < 프로그래밍 > 대각선라인을순차적으로켜보는코드 diagonalline() : 받은데이터를바탕으로데이터처리방향결정 cal() : 스피드조절과데이터시프트, 잔상처리 drawmatrix() : 마이크로컨트롤러에서 2개의 8bit 데이터보내고 Shift Resistor에서받아 8개의포트로 LED Matrix +, -라인에각각의데이터를넣어줌 offall() : 마이크로컨트롤러에서 2개의 0(B00000000) 데이터를보내고 Shift Resistor에서받아 8개의포트로 LED Matrix +, -라인에각각의데이터를넣어줌. 결과는 LED 모두꺼짐. 한줄한줄켤경우에는 drawmatrix() 에서줄을켠다음에데이터를다지워줘야한다. 안그러면잔상이남는다. void diagonalline(int init, int fin, int j){ if (init > fin){ for(int i = init; i >= fin; i=i-j){ cal(300,i); else{ for(int i = init; i <= fin; i=i+j){ cal(300,i); void cal(int spd, int i){ for(int c = 0; c <= spd; c++) { for (int s = 0; s <= i; s++) { drawmatrix((1<<s),(1<<s)); delaymicroseconds(20); offall(); diagonalline(0, 7, 1); //(start, end, step) diagonalline(7, 0, 1); //(start, end, step) void drawmatrix(int x, int y) { shiftout(datapin, clockpin, MSBFIRST, x); shiftout(datapin, clockpin, MSBFIRST, y); void offall() { Physical Computing 5

LED Matrix 켜보기 ( 패턴만들기 2) < 프로그래밍 > 사각형을점점커졌다가작게만들어보는코드 diagonalsqure() : 행과열의데이터를 255(B11111111) 에서시프트해줌 drawmatrix() : 마이크로컨트롤러에서 2개의 8bit 데이터보내고 Shift Resistor에서받아 8개의포트로 LED Matrix +, -라인에각각의데이터를넣어줌 offall() : 마이크로컨트롤러에서 2개의 0(B00000000) 데이터를보내고 Shift Resistor에서받아 8개의포트로 LED Matrix +, -라인에각각의데이터를넣어줌. 결과는 LED 모두꺼짐. 한줄한줄켤경우에는 drawmatrix() 에서줄을켠다음에데이터를다지워줘야한다. 안그러면잔상이남는다. diagonalsquare(0, 7, 255, 100); //(start, end, max, microsecond delay) void diagonalsquare(int init, int fin, int num, int delaytime){ for(int i = fin; i >= init; i--){ drawmatrix((num >> i),(num >> i)); delay(delaytime); for(int i = init; i <= fin; i++){ drawmatrix((num >> i),(num >> i)); delay(delaytime); void drawmatrix(int x, int y) { shiftout(datapin, clockpin, MSBFIRST, x); shiftout(datapin, clockpin, MSBFIRST, y); void offall() { Physical Computing 6

LED Matrix 켜보기 ( 데이터스크롤 ) < 프로그래밍 > 미리저장된그림 ( 데이터 ) 들을바탕으로스크롤해주는코드 init_ddata() : LED Matrix에보여줄그림 ( 데이터 ) 를이진수로저장 draw() : 데이터와데이터길이를매개변수로받아한줄씩 drawmatirix() 에보내주고데이터를한줄씩뒤로밀어서저장함 drawmatrix() : 마이크로컨트롤러에서 2개의 8bit 데이터보내고 Shift Resistor에서받아 8개의포트로 LED Matrix +, -라인에각각의데이터를넣어줌 offall() : 마이크로컨트롤러에서 2개의 0(B00000000) 데이터를보내고 Shift Resistor에서받아 8개의포트로 LED Matrix +, -라인에각각의데이터를넣어줌. 결과는 LED 모두꺼짐. 한줄한줄켤경우에는 drawmatrix() 에서줄을켠다음에데이터를다지워줘야한다. 안그러면잔상이남는다. byte ddata[45]; //drawing data void init_ddata() { ddata[0] = B00000000; //blink ddata[1] = B00000000; ddata[2] = B00000000; ddata[3] = B00000000; ddata[4] = B00000000; ddata[5] = B00000000; ddata[6] = B00000000; ddata[7] = B00000000; ddata[8] = B11111111; //P ddata[9] = B00001001; ddata[10] = B00000110; ddata[11] = B00000000; ddata[12] = B11111111; //H ddata[13] = B00011000; ddata[14] = B11111111; ddata[15] = B00000000; ddata[16] = B00000111; //Y ddata[17] = B11111000; ddata[18] = B00000111; ddata[19] = B00000000; Physical Computing 7

ddata[20] = B01111110; //C ddata[21] = B11000011; ddata[22] = B01100110; ddata[23] = B00000000; ddata[24] = B01111110; //O ddata[25] = B11000011; ddata[26] = B01111110; ddata[27] = B00000000; ddata[28] = B11111111; //M ddata[29] = B00001100; ddata[30] = B11111111; ddata[31] = B00000000; void draw(byte data[], int length) { for (int i = 0; i <= length; i++){ for (int j = 0; j <= 30; j++){ for (int k = 0; k <= 7; k++){ drawmatrix(1<<k, ddata[k]); delaymicroseconds(1000); offall(); for(int d = 0; d <= 43; d++){ ddata[d] = ddata[d+1]; ddata[32] = B00000000; //blink ddata[33] = B00000000; ddata[34] = B00000000; ddata[35] = B00000000; ddata[36] = B00000000; ddata[37] = B00000000; ddata[38] = B00000000; ddata[39] = B00000000; ddata[40] = B00100100; //:) ddata[41] = B00000000; ddata[42] = B01000010; ddata[43] = B00111100; void drawmatrix(int x, int y) { shiftout(datapin, clockpin, MSBFIRST, x); shiftout(datapin, clockpin, MSBFIRST, y); void offall() { ddata[44] = B00000000; //Last line of data is blank to clear display as it scrolls init_ddata(); draw(ddata, 45); //(scroll data, data length) Physical Computing 8

LED Matrix 켜보기 ( 데이터스크롤 + 스피드조절 ) < 하드웨어 > 아날로그인풋 5번핀에가변저항트리머 103(10K) 을연결 < 프로그래밍 > 미리저장된그림 ( 데이터 ) 들을바탕으로스크롤해주는코드. 연결된포텐시오미터로스크롤되는속도를조절함 init_ddata() : LED Matrix에보여줄그림 ( 데이터 ) 를이진수로저장 draw() : 데이터와데이터길이를매개변수로받아한줄씩 drawmatirix() 에보내주고데이터를한줄씩뒤로밀어서저장함아날로그인풋 5번핀에연결한고정형가변저항의아날로그값에따라스크롤속도가 30단계로조절됨 drawmatrix() : 마이크로컨트롤러에서 2개의 8bit 데이터보내고 Shift Resistor에서받아 8개의포트로 LED Matrix +, -라인에각각의데이터를넣어줌 offall() : 마이크로컨트롤러에서 2개의 0(B00000000) 데이터를보내고 Shift Resistor에서받아 8개의포트로 LED Matrix +, -라인에각각의데이터를넣어줌. 결과는 LED 모두꺼짐. 한줄한줄켤경우에는 drawmatrix() 에서줄을켠다음에데이터를다지워줘야한다. 안그러면잔상이남는다. byte ddata[45]; //drawing data Serial.begin(9600); //for debug void init_ddata() { ddata[0] = B00000000; //blink ddata[1] = B00000000; ddata[2] = B00000000; ddata[3] = B00000000; ddata[4] = B00000000; ddata[5] = B00000000; ddata[6] = B00000000; ddata[7] = B00000000; ddata[8] = B11111111; //P ddata[9] = B00001001; ddata[10] = B00000110; ddata[11] = B00000000; ddata[12] = B11111111; //H ddata[13] = B00011000; ddata[14] = B11111111; ddata[15] = B00000000; ddata[16] = B00000111; //Y ddata[17] = B11111000; ddata[18] = B00000111; Physical Computing 9

ddata[19] = B00000000; ddata[20] = B01111110; //C ddata[21] = B11000011; ddata[22] = B01100110; ddata[23] = B00000000; ddata[24] = B01111110; //O ddata[25] = B11000011; ddata[26] = B01111110; ddata[27] = B00000000; ddata[28] = B11111111; //M ddata[29] = B00001100; ddata[30] = B11111111; ddata[31] = B00000000; ddata[32] = B00000000; //blink ddata[33] = B00000000; ddata[34] = B00000000; ddata[35] = B00000000; ddata[36] = B00000000; ddata[37] = B00000000; ddata[38] = B00000000; ddata[39] = B00000000; void draw(byte data[], int length) { for (int i = 0; i <= length; i++){ int scroll_speed = map(analogread(5),0,1023,0,30); Serial.println(scroll_speed); for (int j = 0; j <= scroll_speed; j++){ for (int k = 0; k <= 7; k++){ drawmatrix(1<<k, ddata[k]); delaymicroseconds(1000); offall(); for(int d = 0; d <= 44; d++){ ddata[d] = ddata[d+1]; void drawmatrix(int x, int y) { shiftout(datapin, clockpin, MSBFIRST, x); shiftout(datapin, clockpin, MSBFIRST, y); ddata[40] = B00100100; //:) ddata[41] = B00000000; ddata[42] = B01000010; ddata[43] = B00111100; ddata[44] = B00000000; //Last line of data is blank to clear display as it scrolls void offall() { init_ddata(); draw(ddata, 45); //(scroll data, data length) Physical Computing 10

포텐시오미터 2 개로 LED 제어하기 < 하드웨어 > 아날로그인풋 4, 5번핀에가변저항트리머 103(10K) 을연결 < 프로그래밍 > 2개의포텐시오미터로 LED Matrix Board의 X, Y축 (+,- 라인 ) 에해당하는 LED를제어하는프로그램. void setup() : 시리얼통신설정 : 마이크로컨트롤러에연결된 data, latch, clock핀을아웃풋설정 void loop() : 포텐시오미터로받은 0~1023의값을 map(); 함수를통해 0~7로바꾸어 pot_x, pot_y 변수에저장 : 시리얼통신으로 pot_x의값을보내줌. 아두이노 IDE의시리얼창을통해확인. : 2개의포텐시오미터를조작하기에따라 1<<pot_X = 1( 이진수 : B00000001) 을 pot_x번째만큼데이터를시프트, 128>>pot_Y = 128( 이진수 :B10000000) 을 pot_y번째만큼데이터를시프트해서 drawmatrix() 함수로매개변수 x, y에해당하는데이터를보내줌. (1이나 128을쓰는이유는포텐시오미터돌리는방향에따라 LED의위치를맞추기위해서임 ) Serial.begin(9600); int pot_x = map(analogread(5),0,1023,0,7); int pot_y = map(analogread(4),0,1023,0,7); Serial.println(pot_X); drawmatrix(1<<pot_x, 128>>pot_Y); //drawmatrix(b00000001<<pot_x, B10000000>>pot_Y); void drawmatrix(int x, int y) { shiftout(datapin, clockpin, LSBFIRST, x); shiftout(datapin, clockpin, LSBFIRST, y); drawmatrix() : 사용자함수로 int x, int y로해당되는데이터를받아순서대로 TR array를거쳐 LED Matrix의가로, 세로각핀에이진수의값을하나씩넣어줌 Physical Computing 11