์‚ฌ๋ฌผ์ธํ„ฐ๋„ท/์•„๋‘์ด๋…ธ

[์•„๋‘์ด๋…ธ] ์•„๋‚ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ ์ž…์ถœ๋ ฅ

ใ‚ใกใ‚ƒใใกใ‚ƒ ้–‹็™บ่€…๐Ÿฆพ 2022. 4. 29. 20:20

ใ€Š ์•„๋‚ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ ์ž…/์ถœ๋ ฅ ใ€‹

 

[ ์•„๋‚ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ]

 - ์•„๋‚ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ์— ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜๋Š” 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);
}

์‹œ๋ฆฌ์–ผ ๋ชจ๋‹ˆํ„ฐ ์ถœ๋ ฅ ๊ฒฐ๊ณผ