티스토리 뷰

아두이노를 이용해
사용자가 원하는 특정한 주파수를 갖는 GPIO 출력을 갖도록 하는 코드

 

[예제 코드]

// 설정할 GPIO 핀
const int outputPin = 18;   // 원하는 출력 핀 번호로 설정

// PWM 채널 설정
const int pwmChannel = 0;
const int resolution = 8;   // 8-bit (0~255)
int dutyCycle = 128;        // 50% 듀티사이클 (8-bit 기준)

// 초기 주파수
int currentFrequency = 1000;  // Hz

void setup() {
  Serial.begin(115200);

  // 초기 PWM 설정
  ledcSetup(pwmChannel, currentFrequency, resolution);
  ledcAttachPin(outputPin, pwmChannel);
  ledcWrite(pwmChannel, dutyCycle);

  Serial.println("PWM 시작. 주파수를 시리얼로 입력하세요 (예: 1000)");
}

void loop() {
  if (Serial.available()) {
    String input = Serial.readStringUntil('\n');
    int newFreq = input.toInt();

    if (newFreq > 0 && newFreq <= 40000) { // ESP32에서 안정적으로 가능한 범위
      currentFrequency = newFreq;

      // PWM 다시 설정
      ledcSetup(pwmChannel, currentFrequency, resolution);
      ledcWrite(pwmChannel, dutyCycle);

      Serial.print("주파수 변경됨: ");
      Serial.print(currentFrequency);
      Serial.println(" Hz");
    } else {
      Serial.println("올바른 주파수를 입력하세요 (1~40000Hz)");
    }
  }

  // loop에서 별다른 작업 없음. PWM은 하드웨어에서 유지됨.
}

 

[설명]

  • ESP32의 경우 총 16개의 PWM 채널을 가지며
  • 각 채널은 독립적으로 운용되며
  • 1Hz에서 40kHz까지 광범위한 주파수 대역의 출력 생성 가능
반응형
반응형
250x250
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함