Ms Timer 2 h ifndef Ms Timer 2h

  • Slides: 22
Download presentation

Ms. Timer 2. h의 구성 #ifndef Ms. Timer 2_h #define Ms. Timer 2_h #include

Ms. Timer 2. h의 구성 #ifndef Ms. Timer 2_h #define Ms. Timer 2_h #include <avr/interrupt. h> namespace Ms. Timer 2 { extern unsigned long msecs; extern void (*func)(); extern volatile unsigned long count; extern volatile char overflowing; extern volatile unsigned int tcnt 2; void set(unsigned long ms, void (*f)()); void start(); void stop(); void _overflow(); } #endif 12

예제 14. 2의 스케치 #include <Ms. Timer 2. h> byte LED[8] = {22, 24,

예제 14. 2의 스케치 #include <Ms. Timer 2. h> byte LED[8] = {22, 24, 26, 28, 30, 32, 34, 36}; byte i = 0; void flash() { LED_display(i++); } void setup() { byte k; for(k=0; k<8; k++) pin. Mode(LED[k], OUTPUT); Ms. Timer 2: : set(1000, flash); Ms. Timer 2: : start(); } void LED_display(byte data) { byte k; for(k=0; k<8; k++) digital. Write(LED[k], bit. Read(data, k)); } void loop() { } flash()는 타이머 2 오버플로우 인터럽트 발생시 실행되는 함수 LED[8]를 출력모드로 선언 타이머 2를 사용하여 1000 ms 마다 flash()함수를 실행하도록 설정 LED_display( )함수 선언 입력받은 변수 값으로 LED에 표시 14

아두이노 Mega보드와 Array-FND 모듈 연결 Mega 보드 디지털입출력 핀 연결 모듈 22 24 26

아두이노 Mega보드와 Array-FND 모듈 연결 Mega 보드 디지털입출력 핀 연결 모듈 22 24 26 28 30 32 34 36 38 40 42 44 A B C D E F G H C 0 C 1 C 2 C 3 Array-FND 모듈 16

예제 14. 3의 스케치 1 #include <Ms. Timer 2. h> enum {C 0, C

예제 14. 3의 스케치 1 #include <Ms. Timer 2. h> enum {C 0, C 1, C 2, C 3}; byte FND[8] = {22, 24, 26, 28, 30, 32, 34, 36}; byte FND_CON[4] = {38, 40, 42, 44}; byte FND_DATA_TBL[]= {0 x 3 F, 0 X 06, 0 X 5 B, 0 X 4 F, 0 X 66, 0 X 6 D, 0 X 7 C, 0 X 07, 0 X 7 F, 0 X 67, 0 X 7 C, 0 X 39, 0 X 5 E, 0 X 79, 0 X 71, 0 X 08, 0 X 80}; volatile byte time_s = 0, time_m = 0; void flash(){ if (time_s >= 59) { time_m++; time_s =0; } else time_s++; if (time_m > 59) { time_m =0; } } flash()는 타이머 2 오버플로우 인터럽트 발 생시 실행되는 함수 17

예제 14. 3의 스케치 2 void setup() { byte z; for(z=0; z<8; z++) pin.

예제 14. 3의 스케치 2 void setup() { byte z; for(z=0; z<8; z++) pin. Mode(FND[z], OUTPUT); for(z=0; z<4; z++) pin. Mode(FND_CON[z], OUTPUT); Ms. Timer 2: : set(1000, flash); Ms. Timer 2: : start(); } 1000 ms period 1000 ms 마다 flash()함수를 실행하도록 설 정 void print_FND(byte sel. Cx, byte data){ byte z, temp; temp = FND_DATA_TBL[data]; if(sel. Cx == C 1) temp |= 0 x 80; for(z=0; z<4; z++) { if(z == sel. Cx) digital. Write(FND_CON[z], LOW); else digital. Write(FND_CON[z], HIGH); } for(z=0; z<8; z++){ digital. Write(FND[z], bit. Read(temp, z)); } 출력할 숫자를 불러온다. 숫자에 점을 추가 } 18

예제 14. 3의 스케치 3 void loop() { print_FND(C 0, time_m/10); delay(1); print_FND(C 1,

예제 14. 3의 스케치 3 void loop() { print_FND(C 0, time_m/10); delay(1); print_FND(C 1, time_m%10); delay(1); print_FND(C 2, time_s/10); delay(1); print_FND(C 3, time_s%10); delay(1); } C 0: 10분단위 출력, 왼쪽 첫번째 FND C 1에 1분단위 출력, 왼쪽 두번째 FND C 2에 10초단위 출력, 왼쪽 세번째 FND C 3에 1초단위 출력, 왼쪽 네번째 FND 19

예제 14. 4의 스케치 #include <Ms. Timer 2. h> byte Piezo = 7; void

예제 14. 4의 스케치 #include <Ms. Timer 2. h> byte Piezo = 7; void setup() { Ms. Timer 2: : set(3000, alarm); Ms. Timer 2: : start(); } 타이머 2를 사용하여 3000 ms마다 alarm()함수를 실행하도록 설정 void alarm() { long ra=440; for (long i=0; i<=100000; i=i+ra) { digital. Write(Piezo, HIGH); delay. Microseconds(ra); digital. Write(Piezo, LOW); delay. Microseconds(ra); } delay(200); } 타이머 2 오버플로우 인터럽트 발생시 alarm() 실행 void loop() { } 21