2012-04-30 2 views
2

나는 Arduino에 대한 일반적인 질문을 가지고 있는데, AnalogRead()를 사용하여 센서 값을 몇 초에 몇 번 읽을 수 있습니까? 1 초에 10 번 말하고 PWM을 모터에 지속적으로 출력하십시오.센서에서 샘플링하고 동시에 PWM을 수행하는 방법은 무엇입니까?

내 루프에서 지연 시키려고하면 PWM에 영향을 미치고 모터에 AnalogWrite()를 사용하고 있습니다. 둘 다 할 수있는 방법이 있습니까?

또한 AnalogRead()에 대해 샘플 주파수를 제어하고 싶습니다. 예를 들어 10 회 1 초 또는 20 회 초를 제어 할 수 있습니까?

감사합니다.

답변

2

Arduino IDE에서 "깜박임없이 지연"예제를 검토하고 싶습니다.

예제 스케치를 읽은 후에 더 잘 이해할 수있는 짧은 대답은 millis()의 가장 최근 및 이전 반환 값의 차이를 기반으로 analogRead() 호출을 수행하고 PWM 필요에 따라 변경됩니다. analogRead()는 매우 빨리 리턴하기 때문에 delay()를 사용하지 않는다면 PWM 연산을 방해하지 않습니다.

millis()의 반환 값은 부호가 없으므로 서명되지 않은 변수를 사용하여 millis()의 반환 값을 저장하는 경우 두 개의 연속 반환 값의 차이는 항상 양수입니다. 1 초에 1,000 밀리 초가 있기 때문에 millis()에 대한 두 번 연속 호출의 차이가 100을 초과 할 때마다 다른 값을 읽습니다. 초당 10 개의 값에 가깝게 유지하려면 "이전"값을 실제 판독 값으로 바꾸는 대신 "이전"밀리 초 값을 100 씩 증가시킵니다.

+0

도움을 주셔서 감사합니다. 감사! 긴 간격 = 100; // AnalogRead()를 초당 10 번, 1000/10 mS로 수행 void setup() { // 아날로그 핀을 출력으로 설정합니다. pinMode (analogPin, OUTPUT); // 아날로그 데이터 읽기 pinMode (pwmPin, OUTPUT); // 모터에 PWM 핀 } void loop() { currentMillis = millis(); if ((currentMillis - previousMillis)> interval) { // 마지막으로 LED를 깜박이는 시간을 저장하십시오. previousMillis + = interval; \t analogRead()는 거의 당신이 그것의 걸림이 } – zacharoni16

+0

핀에게 MOSFET 여기 analogWrite 같은() analogdata 10 배를 두 } // DO PWM 코드를 읽기 //. 열쇠는 delay() 또는 과도한 시간 동안 지연되거나 반복 될 수있는 것을 사용하지 않는 것입니다. 다른 작업에 "previousMillis"변수를 더 추가 할 수 있습니다. 예를 들어 초당 5 번 (200ms마다) PMW 값을 변경해야하는 경우 "previousPwmMs"를 추가 할 수 있습니다. –

관련 문제