아두이노 우노를 비롯한 다양한 아두이노 시리즈 보드에서
입력으로 PWM을 측정하는 방법이 3가지가 있습니다.
그에 관한 링크는 하기와 같습니다.
:=> http://www.benripley.com/diy/arduino/three-ways-to-read-a-pwm-signal-with-arduino/
위에서 언급된 것과 같이 3가지는 다음과 같습니다.
1. pulseIn() 함수를 사용하는 방법
가장 간단한 방법입니다. but, 이 함수가 실행되는 동안 CPU를 계속 점유하기에 다른 작업(코드)를 실행할 수 없습니다.
간단한 코드는 하기와 같습니다.
byte PWM_PIN = 3;
int pwm_value;
void setup() {
pinMode(PWM_PIN, INPUT);
Serial.begin(115200);
}
void loop() {
pwm_value = pulseIn(PWM_PIN, HIGH);
Serial.println(pwm_value);
}
2. 외부인터럽트를 사용하는 방법
but, 아두이노 보드에 따라 인터럽트를 사용할 수 있는 pin 이 제한됩니다.
간단한 코드는 하기와 같습니다.
volatile int pwm_value = 0;
volatile int prev_time = 0;
void setup() {
Serial.begin(115200);
// when pin D2 goes high, call the rising function
attachInterrupt(0, rising, RISING);
}
void loop() { }
void rising() {
attachInterrupt(0, falling, FALLING);
prev_time = micros();
}
void falling() {
attachInterrupt(0, rising, RISING);
pwm_value = micros()-prev_time;
Serial.println(pwm_value);
}
3. Pin Change Interrupts 라이브러리를 사용하는 방법
이 방법의 장점은 아두이노 보드의 어떤 핀도 인터럽트로 사용할 수 있는 장점이 있습니다.
간단한 코드는 하기와 같습니다.
#include <PinChangeInt.h>
#define MY_PIN 5 // we could choose any pin
volatile int pwm_value = 0;
volatile int prev_time = 0;
uint8_t latest_interrupted_pin;
void rising()
{
latest_interrupted_pin=PCintPort::arduinoPin;
PCintPort::attachInterrupt(latest_interrupted_pin, &falling, FALLING);
prev_time = micros();
}
void falling() {
latest_interrupted_pin=PCintPort::arduinoPin;
PCintPort::attachInterrupt(latest_interrupted_pin, &rising, RISING);
pwm_value = micros()-prev_time;
Serial.println(state);
}
void setup() {
pinMode(MY_PIN, INPUT); digitalWrite(MY_PIN, HIGH);
Serial.begin(115200);
PCintPort::attachInterrupt(MY_PIN, &rising, RISING);
}
void loop() { }
(광고1)
주식과 증권 커뮤니티 최신 동향을 한번에 모아서 볼 수 있는 앱이 있습니다.
'주식통' 이라는 앱인데 하기에서 다운로드 가능합니다.
https://play.google.com/store/apps/details?id=com.opensupport.StockTong
(광고2)
이젠 여기저기 있는 중고거래앱들을 번거롭게 일일이 찾아드릴 필요가 없이
중고장터거래 앱들의 원하는 아이템을 한번에 검색해 볼 수있는 앱이 있습니다.
다운로드는하기에서 가능합니다.
https://play.google.com/store/apps/details?id=com.opensupport.UsedSearch
그럼,
공유합니다.
'개발 이야기' 카테고리의 다른 글
윈도우10/11 - WSL2를 사용 시 저장공간 관리 방법 (2) | 2021.11.01 |
---|---|
로블록스 (roblox) - 게임 만들기 강좌 링크 공유 (0) | 2021.10.31 |
프로그래밍을 어떻게 시작하고 공부해나가야 하는지??? (0) | 2021.10.14 |
라이브러리 완성도에 따라 어떤 언어로 만드는지 정하는게 더 빠르네요. (0) | 2021.10.01 |
[Docker] 로컬 Docker 이미지를 다른 PC에 배포하기 (0) | 2021.09.30 |