Arduino 아날로그 신호
- IoT
- 2022. 3. 25.
//PWM테스트 - pulse width modulation
//아날로그를 디지털신호로 바꾸기 위한 방법
//pwm은 8bit를 사용 - 2의8승이니까 256까지 즉, 0부터 255까지 표현 가능
//AnalogDigitalConverter(ADC) - 10bit(2의 10승 - 1024)
int led4=11;
void setup() {
pinMode(led4, OUTPUT);
}
void loop() {
for(int i=0; i<256; i++) {
analogWrite(led4, i);
delay(10);
}
for(int i=255; i>=0; i--) {
analogWrite(led4, i);
delay(10);
}
}
회로를 사진처럼 구성하고 코드를 작성해보자.
실행 시키면 LED가 서서히 밝아지고 서서히 밝기가 줄어드는것을 볼 수 있다
이게 아날로그 신호다
아날로그 신호는 8bit로 동작하기에 0~255까지의 값을 만들어 낸다
전압을 5V로 주는데 0~255까지의 밝기를 조절하면서 하는것이다.
저항 조절가는것은 10bit로 계산이 된다 0~1023까지 값을 만들어낸다
회로는 이렇게 구성 후
저항값이 500이상이면 led 불을 키고
500이하면 led 불을 끄게 설정해보자.
void setup() {
pinMode(11, OUTPUT);
}
void loop() {
int readValue = analogRead(A0);
if(readValue >= 500 )
digitalWrite(11, HIGH);
else
digitalWrite(11, LOW);
}
저항 조절에 3개의 다리가 달려있는데
가운데는 핀을 꼽아주고
양쪽은 +,-를 꼽아줘야 한다.
문제)
저항 조절기를 이용해 LED 밝기를 나타내라.
회로는 위와 같다.
void setup() {
Serial.begin(9600);
pinMode(11, OUTPUT);
}
void loop() {
int readValue = analogRead(A0);
Serial.println(readValue/4);
analogWrite(11,readValue/4);
}
위와 같이 해도 되고 이런 계산하는 일이 이번만 있는게 아니니 우리는 map을 이용해서 변환을 해줄거다
map(평가할 기준이 되는 변수 , 변수의 최소값, 변수의 최대값, 적용할 갑의 최소값, 적용할 값의 최대값)
-------------------------------- --------------------------------------------
실제 변수가 갖는 값의 범위 변환할 값의 범위
void setup() {
Serial.begin(9600);
pinMode(11, OUTPUT);
}
void loop() {
int readValue = analogRead(A0);
Serial.println(map(readValue,0,1023,0,255));
analogWrite(11,map(readValue,0,1023,0,255));
}
문제
led 3개, push버튼 풀업 1개, 가변저항 1개 이용
- 가변저항의 값이 1~300 사이면 led1 켜기
301~700 사이면 led2 켜기
701~1023 사이면 led3 켜기
- push 버튼을 누르면 모든 led가 off
int value = 0; //가변저항 값
void setup() {
Serial.begin(9600);
for(int i=9; i<12; i++)
pinMode(i, OUTPUT); //LED핀
pinMode(12, INPUT); //push버튼
}
void loop() {
value = analogRead(A0);
Serial.println(value);
a0(value);
if(digitalRead(12) == LOW)
ledoff();
}
void a0(int value) {
if(value >= 1 && value <= 300)
digitalWrite(11, HIGH);
else if(value >= 301 && value <= 700)
digitalWrite(10, HIGH);
else if(value >= 701 && value <= 1023)
digitalWrite(9, HIGH);
}
void ledoff() {
for(int i=9; i<12; i++)
digitalWrite(i, LOW);
delay(1000);
}