[์๋์ด๋ ธ] ์๋ ๋ก๊ทธ ๋ฐ์ดํฐ ์ ์ถ๋ ฅ
ใ ์๋ ๋ก๊ทธ ๋ฐ์ดํฐ ์ /์ถ๋ ฅ ใ
[ ์๋ ๋ก๊ทธ ๋ฐ์ดํฐ ์ ๋ ฅ ]
- ์๋ ๋ก๊ทธ ๋ฐ์ดํฐ ์ ๋ ฅ์ ์ฌ์ฉ๋๋ ํจ์๋ analogRead()
- ์๋ ๋ก๊ทธ ๋ฐ์ดํฐ๋ ์ ๋ ฅ๋ง ๊ฐ๋ฅ, ์ถ๋ ฅ ๋ถ๊ฐ๋ฅ
โ ๊ฐ๋ณ์ ํญ ๊ฐ ์ถ๋ ฅ ์์
// C++ code
// ๊ฐ๋ณ์ ํญ ๊ฐ ์ถ๋ ฅ ์์
// int anologRead(uint8_t pin)
// ๋งค๊ฐ๋ณ์ : ์๋ ๋ก๊ทธ pin
// ๋ฐํ : 0~1023 ์ฌ์ด ์ ์ ๊ฐ
void setup(){
Serial.begin(9600);
pinMode(A0, INPUT); // pinMode ์ค์ ํ์์์ง๋ง ์ง๊ด์ฑ์ ์ํด ์ฌ์ฉ
}
void loop()
{
Serial.println(analogRead(A0));
delay(2000);
}
โก ๊ฐ๋ณ์ ํญ ๊ฐ์ผ๋ก LED ๊ฐ์ ์กฐ์ ์์
// C++ code
// ๊ฐ๋ณ์ ํญ ๊ฐ์ ๋ฐ๋ฅธ LED ๊ฐ์ ์กฐ์
int pins_LED[] = {13, 12, 11, 10};
void setup()
{
Serial.begin(9600);
for(int i=0; i<4; i++){
pinMode(pins_LED[i], OUTPUT);
}
}
void loop()
{
int adc = analogRead(A0); // ๊ฐ๋ณ ์ ํญ ๊ฐ ์ฝ์ด์ค๊ธฐ
int count_led = (adc >> 8)+1; // LED ๊ฐ์ ๊ฒฐ์
for(int i=0; i<4; i++){ // LED ์ ๋ฉธ
if(i < count_led)
digitalWrite(pins_LED[i], HIGH);
else
digitalWrite(pins_LED[i], LOW);
}
// ADC ๊ฐ๊ณผ LED ๊ฐ์ ์ถ๋ ฅ
Serial.println(String("ADC : ") + adc + ", LED count : " + count_led);
delay(1000);
}
[ ์๋ ๋ก๊ทธ ๋ฐ์ดํฐ ์ถ๋ ฅ ]
- ์๋์ด๋ ธ ์ฐ๋ ธ ๋ณด๋๋ ์๋ ๋ก๊ทธ ๋ฐ์ดํฐ ์ ๋ ฅ์ด ๊ฐ๋ฅํ ADC๋ฅผ ํฌํจํ๊ณ ์์ง๋ง
์๋ ๋ก๊ทธ ์ถ๋ ฅ์ด ๊ฐ๋ฅํ DAC๋ฅผ ํฌํจํ๊ณ ์์ง๋ ์์ผ๋ฏ๋ก ์ถ๋ ฅ์ ๋ถ๊ฐ๋ฅ
- ๋์ PWM ์ ํธ๋ฅผ ์ด์ฉํ์ฌ ์๋ ๋ก๊ทธ ์ ํธ์ ์ ์ฌํ ํจ๊ณผ๋ฅผ ์ป์ ์ ์์
- PWM ์ ํธ๋ ๊ตฌํํ๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํ๊ณ , ํ ์ฃผ๊ธฐ ๋ด์์ ON(HIGH) ์ํ์ธ ์๊ฐ์ ๋น์จ๋ก ํ์
- PWM ์ ํธ ์ถ๋ ฅ์ ์ํด ๋์งํธ ํ์ analogWrite() ํจ์๋ฅผ ํตํด 0~255 ์ฌ์ด์ ๊ฐ์ ์ถ๋ ฅ
ํจ์ผ๋ก ์๋ก ๋ค๋ฅธ ๋ํฐ ์ฌ์ดํด์ ๊ฐ์ง๋ ๊ตฌํํ๋ฅผ ์ถ๋ ฅ ๊ฐ๋ฅ
โ RGB LED์ ๋ฐ๊ธฐ ์กฐ์ ์์
// C++ code
// RGB LED์ ๋ฐ๊ธฐ ์กฐ์
int RGB_LED[] = {12, 10, 9};
void handleRGB(int num){
// Red ์์ ์กฐ์ , Green, Blue ๋
if(num == 0){
digitalWrite(RGB_LED[1], LOW);
digitalWrite(RGB_LED[2], LOW);
for(int i=255; i>=0; i--){
analogWrite(RGB_LED[num], i);
delay(10);
}
}
// Blue ์์ ์กฐ์ , Red, Green ๋
else if(num == 1){
digitalWrite(RGB_LED[0], LOW);
digitalWrite(RGB_LED[2], LOW);
for(int i=255; i>=0; i--){
analogWrite(RGB_LED[num], i);
delay(10);
}
}
// Green ์์ ์กฐ์ , Red, Blue ๋
else if(num == 2){
digitalWrite(RGB_LED[0], LOW);
digitalWrite(RGB_LED[1], LOW);
for(int i=255; i>=0; i--){
analogWrite(RGB_LED[num], i);
delay(10);
}
}
else
exit(0);
}
void setup() {
Serial.begin(9600);
for(int i=0; i<4; i++){
pinMode(RGB_LED[i], OUTPUT);
}
}
void loop() {
// Red ์ ๋ฉธ
handleRGB(0);
// Blue ์ ๋ฉธ
handleRGB(1);
// Green ์ ๋ฉธ
handleRGB(2);
}
โก ๊ฐ๋ณ์ ํญ ๊ฐ์ผ๋ก 4๊ฐ์ LED ๋ฐ๊ธฐ ๋์ผ ์กฐ์ ์์
// C++ code
// ๊ฐ๋ณ์ ํญ ๊ฐ์ผ๋ก 4๊ฐ์ LED ๋ฐ๊ธฐ๋ฅผ ๋์ผํ๊ฒ ์กฐ์
// PWM์ ์ํ ์ถ๋ ฅ์ ์ต๋๊ฐ์ 255์ด๋ฏ๋ก
// ADC์ ์ต๋๊ฐ์ธ 1023์ ์ค๋ฅธ์ชฝ์ผ๋ก 2๋นํธ ์ด๋์์ผ 0~255 ์ฌ์ด ๊ฐ์ผ๋ก ์ ํ
int pins_LED[] = {13, 12, 8, 7};
void setup()
{
Serial.begin(9600);
pinMode(A0, INPUT); // ๊ฐ๋ณ์ ํญ ์ฐ๊ฒฐ ํ ์
๋ ฅ์ผ๋ก ์ค์
for(int i=0; i<4; i++){
pinMode(pins_LED[i], OUTPUT);
}
}
void loop()
{
int ADC_value = analogRead(A0); // ADC ๊ฐ
int PWM_value = ADC_value >> 2; // PWM ๊ฐ
Serial.print(String("ADC value : ") + ADC_value);
Serial.println(String(", PWM value : ") + PWM_value);
// LED ๋ฐ๊ธฐ ์กฐ์
for(int i=0; i<4; i++){
analogWrite(pins_LED[i], PWM_value);
}
delay(1000);
}
โข ๊ฐ๋ณ์ ํญ ๊ฐ์ผ๋ก 4๊ฐ์ LED ๋ฐ๊ธฐ ์ฐ์ ์กฐ์ ์์
// C++ code
// ๊ฐ๋ณ์ ํญ ๊ฐ์ ๋ฐ๋ฅธ LED ๊ฐ์์ ๋ฐ๊ธฐ ์ ์ด
int pins_LED[] = {13, 12, 8, 7};
void setup()
{
pinMode(A0, INPUT); // ๊ฐ๋ณ์ ํญ ์ฐ๊ฒฐ ํ ์
๋ ฅ์ผ๋ก ์ค์
for(int i=0; i<4; i++){
pinMode(pins_LED[i], OUTPUT);
}
Serial.begin(9600);
}
void loop()
{
int ADC_value = analogRead(A0); // ADC ๊ฐ
int PWM_value[4] = {0,};
Serial.println(String("ADC value : ") + ADC_value);
for(int i=3; i>=0; i--){
if(ADC_value >= 256 * i){
PWM_value[i] = ADC_value - (256 * i);
ADC_value -= (PWM_value[i] + 1);
}
analogWrite(pins_LED[i], PWM_value[i]); // LED ๋ฐ๊ธฐ ์กฐ์
Serial.print(" ");
Serial.print(PWM_value[i]);
}
Serial.println();
delay(1000);
}