공부/아두이노, 전자·전기

[아두이노 공부] 4. 코드를 통한 간접적(?) PWM 구현

어제 PWM에 대해서 공부하며,

 

digitalWrite와 delay 함수를 이용하여

PWM 역할을 할 수 있는 코드를 만들면, 비슷하게 출력이 될까?

 

라는 생각을 가지게 되어서

정말 간단하게 한번 구현해보았다.

 

void setup() {
  Serial.begin(9600);
  pinMode(10,OUTPUT);
}

void loop() {
  if(Serial.available()){
    int i = Serial.read();
    int j = 0;
    
    if (i ==49) 
    {
        for (j=0;j<300;j++) // 여기서 300은 임의로 정한 숫자이다.
        {
        digitalWrite(10,1);
        delay(1);
        digitalWrite(10,0);
        delay(1);
        }
    }
    if (i==50)
    {
        for (j=0;j<300;j++) 
        {
        digitalWrite(10,1);
        delay(1);
        digitalWrite(10,0);
        delay(4);
        }
    }
  }
}

 

디지털 신호 0과 1이 짧은 간격으로 반복되는 것에 착안하여 

시리얼 모니터에 1과 2를 대입했을 때, duty cycle이 각각 50%, 20%가 되도록 작성해보았다. 

 

 

 

영상에서는 차이가 잘 안보이지만, 실제로 보면 차이가 난다 ㅠㅠ...