1. 2018 Final-term Examination (100)
Basic Computer Design
Date: 2018-12-13
1. 오른쪽 회로를 고려하라. (40)
1) Switch 개폐에 따라 D2에 입력되는 전압을
쓰고 이유를 설명하라. (10)
- Switch open: 0 V
회로가 끊어져 전류가 흐르지 않기 때문에 접
지에 있는 전압이 저항을 통과해서 D2 지점에
그대로 나타남
- Switch closed: 5 V
회로가 연결되어 전류가 흐르기 때문에 5 V에
서 전달한 전압이 D2에 그대로 나타남
2) Switch가 닫힌 경우는 Serial로 “on”을 출력하고, 열린 경우는 “off”를 출력하는 code
를 작성하라. 여기서 serial port 연결 속도는 9600 bps, setup()과 loop()가 반드시 있어
야 함. (20)
void setup() {
Serial.begin(9600);
pinMode(2, INPUT);
}
void loop() {
int nVolt = digitalRead(2);
if (nVolt == HIGH) Serial.println(“on”);
else Serial.println(“off”);
delay(1000);
}
2. 3) 이를 바탕으로 pinMode() 함수에서 INPUT과 INPUT_PULLUP의 차이를 설명하라.
INPUT_PULLUP가 가지는 장점은 무엇인가? (10)
- INPUT과 INPUT_PULLUP은 digital 입력을 받는다는 관점에서는 동일하지만 주변 회로
구성에서 차이가 난다. INPUT으로 설정하면 위 문제에 있는 회로처럼 저항과 5 V 전원
으로 입력 회로를 구성해야 한다. 하지만 INPUT_PULLUP은 접지만 연결하면 되므로 회
로 구성이 INPUT보다 매우 간단하다.
또한 INPUT_PULLUP은 Arduino board에 접지만 인가하므로, INPUT보다는 Arduino
board를 더욱 잘 보호할 수 있다.
2. Arduino Sketch 언어를 이용해 다음 작업을 programming하시오. Code는 짧을수록
가산점 부여. 여기서 serial port 연결 속도는 9600 bps. (60)
1) 문자 ‘@’를 이용해 다음과 같은 연산자를 만들었다: a @ b = 2*a*a + 3*b*b. 문자열
을 입력받아 연산자 @를 계산하는 code를 작성하라. StringTok class 사용 가능. (20)
#include <StringTok.h>
void setup() {
Serial.begin(9600);
}
void loop() {
StringTok stInput; scans(stInput);
double ans = getNewOp(stInput);
Serial.println(ans);
}
double getNewOp(StringTok & stInput) {
StringTok stToken;
stToken = stInput.getToken();
double a = stToken.toDouble();
stToken = stInput.getToken();
3. char op = stToken[0];
stToken = stInput.getToken();
double b = stToken.toDouble();
if (op == ‘@’) return 2.*a*a + 3.*b*b.
else return 0.;
}
2) 사용자에게 자연수를 입력 받아서 입력 받은 회수만큼 D13번에 연결된 LED를
On/Off하는 code를 작성하라. 단 On/Off 주기는 처음에 1초, 그 다음 2초 등과 같이 계
속 해서 1초씩 증가해야 함. (20)
#include <StringTok.h>
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop() {
int nCount; scans(nCount);
for (int i = 0; i < nCount; i++) setOnOff(i + 1);
}
void setOnOff(int nSec) {
digitalWrite(13, HIGH);
delay(nSec*500);
digitalWrite(13, LOW);
delay(nSec*500);
}
3) A0에서 analog 전압을 입력 받는다. Analog 전압은 0 ~ 5 V까지 변함. 전압이 4 ~ 5
V까지는 “normal”을 Serial로 출력하고, 2 ~ 4 V까지는 “weak”, 0 ~ 2 V 범위는 “empty”
를 출력하는 code를 작성하라. (20)
4. void setup() {
Serial.begin(9600);
}
void loop() {
int nVolt = analogRead(A0);
double volt = map(nVolt, 0, 1023, 0, 5000)/1000.;
if (volt <= 2.) Serial.println(“empty”);
else if (volt <= 4.) Serial.println(“weak”);
else Serial.println(“normal”);
delay(1000);
}