실습1. Bread Board 사용
- LED의 다리가 긴 쪽이 (+), 짧은 쪽이 (-)
실습2. LED 깜빡이기
- 함수
- 함수 pinMode(pin, Input or Output): 해당핀을 input으로 사용할 건지, ouput으로 사용할 건지.
- 함수 digitalRead(pin): 입력 핀의 현재 상태를 읽음.(High or Low)
- 함수 digitalWrite(pin, High or Low): 출력 핀의 상태를 설정함.
- 함수 delay(ms): 행동을 멈춤.
- 함수 analogWrite(pin, val): PWM기법 사용. val은 0~255사이. 출력 전압 = 5V * (val/255)
- (PWM: Pulse Width Modulation으로 밝기 변경 기법. 9번 핀에서 사용 가능.)
- 전자 회로 지식
- 전압: 전위차, 기본 단위 V(볼트)
- 전류: 전위차에 의해 발생한 전자의 흐름, 기본 단위 A(암페어)
- 저항: 전류 제어. 기본 단위 옴.
- I = V/R: 전류 = 전압/저항 ( ex. 5V, 500옴 → 0.01 암페어(10m암페어) )
- VCC: 전원을 공급하는 핀.
- GND: 전원을 반환하는 핀
- 코드
int led1 = 8;
int led2 = 9;
void setup()
{
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
}
void loop()
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
delay(500);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
delay(500);
}
# 밝기 변경
int led = 9;
void setup()
{
pinMode(led, OUTPUT);
}
void loop()
{
for (int i=10;i<=255;i+=10) {
analogWrite (led, i);
delay(200);
}
}
실습3. Button Switch
- 사용할 스위치: 푸시 버튼 스위치.
- Button Debounce
: 버튼을 누르거나 뗄 때 일시적으로 입력값이 불안정
- Button Debounce H/W 해결책: capacitor 사용(전기가 차단되면 자신이 흡수한 전기를 풀어줌)
- Button Debounce S/W 해결책: 버튼 입력시 약간 시간 간격을 가지고 측정
- 코드
int led = 9;
int key = 12;
int led_status = LOW;
void setup() {
pinMode(led, OUTPUT);
pinMode(key, INPUT);
digitalWrite(led, LOW);
}
void loop() {
if (digitalRead(key) == HIGH) {
if (led_status == LOW) {
digitalWrite(led, HIGH);
led_status = HIGH;
}
else {
digitalWrite(led, LOW);
led_status = LOW;
}
}
delay(100);
}
실습4. 7-Segment
- 7-Segment
- FND라고 불림.(Flexible Numeric Display)
- 1, 2, 3은 세그먼트의 자릿수를 의미.
- 알파벳과 dot(.)은 불이 들어오는 세그먼트를 의미.
- 코드
int fndStartPin= 2;
int fndEndPin= 9;
void fndWrite(int num) {
static unsigned char fnd_segcode[] = {
0x7E, 0x06, 0xBC, 0x9E, 0xC6, 0xDA,
0xFA, 0x4E, 0xFE, 0xDE, 0xEE, 0xF2,
0x78, 0xB6, 0xF8, 0xE8 };
unsigned char outcode;
int value;
if (num < 0) num = 0;
else if (num >= 16) num = 15;
outcode= fnd_segcode[num];
for (int i=fndStartPin; i<=fndEndPin; i++) {
value = (outcode& 0x80) ? LOW : HIGH; # outcode를 검사함!!
digitalWrite(i, value); # a 검사, b 검사 ...
outcode<<= 1;
}
}
void setup() {
pinMode(10, OUTPUT); pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
for (int i=fndStartPin; i<=fndEndPin; i++)
pinMode(i, OUTPUT);
}
void loop() {
for (int num=0; num<16; num++) {
// digitalWrite(10, HIGH);
// digitalWrite(11, LOW);
// digitalWrite(12, LOW);
fndWrite(num); # 출력할 숫자. 0~f까지
delay(500);
}
}
'Computer Science > Embedded System Design' 카테고리의 다른 글
[임베디드] 3장 라즈베리파이 실습 (2) (0) | 2023.10.20 |
---|---|
[임베디드] 3장 라즈베리파이 실습 (1) (0) | 2023.10.20 |
[임베디드] 2장 라즈베리파이 소개 (0) | 2023.10.20 |
[임베디드] 1장 아두이노보드 실습 (2) (0) | 2023.10.20 |
[임베디드] 0장 임베디드 시스템과 아두이노 보드 (2) | 2023.09.20 |