티스토리 뷰

이전 실험까지는 CdS 센서로 들어온 밝기 값을 곧바로

LED가 켜지는 delay 시간으로 사용해서

LED 불의 밝기를 조절했었습니다.

 

하지만 이런 방법으로는

주변 밝기에 따른 LED 밝기를 정확히 비례적으로 변하도록 하기가 어렵습니다.

 

그래서 찾아보니, map 함수라는 것이 있네요.

map 함수는 아날로그 입력으로 받은 값를

일정 범위 안에서 비례적으로 출력값을 만들어 주는 함수입니다.

 

int a= map (입력값, 입력값의 최소값, 입력값의 최대값, 출력값의 최소값, 출력값의 최대값)

 

예를 들어

int a = map (200, 0, 1000, 0, 200) 라고 쓴다면, 

입력값 범위는 0 에서 1000 이고 200을 입력했을 때,

이는 전체 입력 범위에서 1/5 수준이므로

출력값 범위인 0에서 200 사이에서 비례적으로 1/5 인 40 이 변수 a 값이 됩니다.  

a=200/(1000-0)*(200-0)= 40

 

마찬가지로

int b = map (30, 0, 300, 0, 500) 이라면

b=30/(300-0)*(500-0)= 50 가 되는 것입니다.

 

이전 실험에서

if 문을 써서 CdS센서 값이 500 이하면 아예 LED 불을 끄고,

500 이상이면 LED 불이 켜지는 시간을 조절해서 밝기 변화를 주는 것으로 했으니,

 

CdS 아날로그 입력값이 0~500 은 LED를 꺼버리고

CdS 센서값이 500~1023 사이이면,

0~255에서 비례적으로 출력값이 변할 수 있도록 해보았습니다.

 

이 출력값을 PWM 길이로 사용하면서,

CdS 값이 클 수록 LED를 밝게 보이게 할 수 있습니다.

 

map 함수 사용

 

프로그램 내용은 아래와 같습니다.

1. 아주 밝으면 LED 꺼짐

2. 조금 어두우면 LED 불이 적당히 빛나는데 빠르게 밝아졌다가 빠르게 어두워짐 

3. 많이 어두우면 LED 불이 밝게 빛나는데 천천히 밝아졌다가 천천히 어두짐

https://youtu.be/sw1N1DcVO4g?si=ysLTfTfa5FyhGsA2

 

 

 

 

 

 

다음에는 PWM 에 대해서 실험을 해보겠습니다.

댓글
공지사항
최근에 올라온 글