13 1 int pin 8 volatile int state
- Slides: 27
예제 13. 1의 스케치 int pin = 8; volatile int state = LOW; void setup() { pin. Mode(pin, OUTPUT); attach. Interrupt(0, toggle, CHANGE); } void toggle() { state = !state; } 0번 인터럽트 사용 인터럽트가 호출되면 함수 ‘toggle()’를 호출 함수 호출 때 마다 state 값 반전 (HIGH이면 LOW로, LOW이면 HIHG 반전) void loop() { digital. Write(pin, state); } 10
예제 13. 2의 스케치 1 byte LED[8] = {22, 24, 26, 28, 30, 32, 34, 36}; byte LED_Data = 0 x 01; volatile byte Time_STOP = 0; void setup() { byte i; for(i=0; i<8; i++) pin. Mode(LED[i], OUTPUT); attach. Interrupt(0, toggle, RISING); } LED 모듈 연결 핀을 배열로 선언 LED 모듈에 출력할 초기값 인터럽트 서비스 루틴 선언, 인터럽트 0(Pin 2) void LED_display(byte data) { byte i; for(i=0; i<8; i++) digital. Write(LED[i], bit. Read(data, i)); } LED를 한 bit씩 ON 시키는 함수 void toggle() { if(Time_STOP == 0) Time_STOP = 1; else Time_STOP = 0; } 외부 인터럽트가 발생하면 호출될 함수 16
예제 13. 2의 스케치 2 void loop() { LED_display(LED_Data); if(Time_STOP == 0) { if(LED_Data == 0 x 80) LED_Data = 0 x 01; else LED_Data <<= 1; } Time_STOP가 ‘ 0’ 이면 on될 LED를 우측으로 쉬프트 delay(100); 0. 1초 시간지연 } 17
Array FND 모듈 스톱워치 Mega 보드 디지털입출력 핀 연결 모듈 2 3 22 24 26 28 30 32 34 36 38 40 42 44 BT 0 BT 1 A B C D E F G H C 0 C 1 C 2 C 3 SWITCH모듈 Array-FND 모듈 20
예제 13. 3의 스케치 1 byte FND[8] = {22, 24, 26, 28, 30, 32, 34, 36}; 세그먼트의 a~g와 dot 핀 지정 byte FND_CON[4] = {38, 40, 42, 44}; 4개의 FND 선택 핀 지정 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}; 0~9, A~B, _, dot 표현 데이터 volatile byte time_10 ms=0, time_100 ms=0; volatile byte time_1 s=0, time_10 s=0; volatile byte Time_STOP = 0; 스톱워치 구현에 사용하는 변수 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); attach. Interrupt(0, blink 1, RISING); attach. Interrupt(1, blink 2, RISING); Int 0 => pin 2 Int 1 => pin 3 } 23
예제 13. 3의 스케치 2 void FND_display(byte data) { byte z; for(z=0; z<8; z++) digital. Write(FND[z], bit. Read(data, z)); } FND_DATA_TBL 배열값을 Array. FND에 표현하는 함수 void FND_control(byte data) { byte z; for(z=0; z<4; z++) { if(z == data) digital. Write(FND_CON[z], LOW); else digital. Write(FND_CON[z], HIGH); } } Array. FND 중 출력할 FND를 선택하는 함수 void loop() { FND_control(0); FND_display(FND_DATA_TBL[time_10 s]); delay(2); C 0선택 왼쪽에서 첫번째 FND 선택 2 ms 대기 FND_control(1); FND_display(FND_DATA_TBL[time_1 s]|0 x 80); delay(2); C 1선택 왼쪽에서 2번째 FND 선택 2 ms 대기 24
예제 13. 3의 스케치 3 FND_control(2); FND_display(FND_DATA_TBL[time_100 ms]); delay(3); C 2선택 왼쪽에서 3번째 FND 선택 3 ms 대기 FND_control(3); FND_display(FND_DATA_TBL[time_10 ms]); delay(3); C 3선택 왼쪽에서 4번째 FND 선택 3 ms 대기 if(Time_STOP==1) return; time_10 ms++; if(time_10 ms == 10) { time_10 ms = 0; time_100 ms++ ; } 인터럽트에 의한 Stop/Resume 처리 여기까지 사용된 딜레이 함수가 약 10 ms, time_10 ms는 10 ms마다 증가 됨. if(time_100 ms == 10) { time_100 ms = 0; time_1 s++ ; } 25
예제 13. 3의 스케치 4 if(time_1 s == 10) { time_1 s = 0; time_10 s++ ; } if(time_10 s == 10) { time_10 s = 0; } } void blink 1() { if(Time_STOP == 0) Time_STOP = 1; else Time_STOP = 0; } void blink 2() { time_10 ms=0; time_100 ms=0; time_10 s=0; } 26
- Int sum(int a int n) int sum=0 i
- Int max(int x int y)
- Interface calculator public int add(int a int b) class test
- Public void drawsquare(int x, int y, int len)
- Divideint
- Que lindo pinta pablo
- Int pin
- Interface myinterface int foo(int x)
- Int main int argc char argv
- #include stdio.h int main() int i = 5
- 7팩토리얼
- Arduino const
- Int main() int num=4
- Void swap(int a int b)
- Void f(int i) int j=0
- Int.max
- Include
- Volatile oils - pharmacognosy
- Nama simplisia minyak klenteng
- Raoult's law and dalton's law
- Volatile oils pharmacognosy
- Percent by mass of volatile water in hydrated salt
- Wet gum method examples
- Uses rigid metallic platters
- Is rom volatile or nonvolatile
- Hydroalcoholic solution are syrups
- Motivation is volatile
- Volatile c