2013-06-28 2 views
0

좋아, 이제 막 Arduino 프로그래밍으로 뛰어 들었어. 현재는 LED가 파란색, 녹색, 빨간색으로 바뀌는 RGB LED 프로그램과 함께 기본적인 깜박임 기능이 있습니다. 나는 2 개의 LED가 간단하고 기본적인 노란색 LED가 "작동 상태"에 대한 지표로 기능해야한다고 생각합니다. 그리고 LED는 RGB입니다. 이제 노란색 LED가 지속적으로 깜박이는 상태로 유지하려고하지만 RGB를 정상적으로 전환하는 것이 좋습니다. 두 프로세스를 동시에 실행할 수 있도록 내 코드를 작성하는 방법은 무엇입니까? 같은C++ Arduino, 한 번에 두 개의 루프를 실행 하시겠습니까?

답변

2

뭔가 :

int timekeeper=0; 
while (1) 
{ 
    do_fade(timekeeper); 
    if (timekeeper%100==0) { 
     do_blink_off(); 
    } 
    if (timekeeper%100==50) { 
     do_blink_on(); 
    } 
    delay(10); 
    timekeeper++; 
} 

이 너무 귀하의 마일리지가 다를 수 있습니다, 메모리에서 수행됩니다. 나는 타임 키퍼를 do_fade()에 전달 했으므로 페이드를 얼마나 멀리 할 수 ​​있는지 알아낼 수 있습니다. do_fade()는 페이드를 업데이트 한 다음 즉시 반환합니다. do_blink_on() 및 do_blink_off()도 비슷합니다. 변경해야하는 내용을 변경 한 다음 반환하십시오. 이 예제에서 do_fade()는 매 10 밀리 초마다 호출되고, do_blink_off()는 초당 한 번 호출되며, do_blink_on()은 1/2 초 후에 호출됩니다 (이렇게 켜기, 1/2 초, 꺼짐, 1/2 초 켜짐, 1/2 초 ...)

+0

좋아 보인다. 내가 추가 할 수있는 유일한 방법은 타이밍이 관련이없는 경우 단일 카운터를 사용하는 것에 국한되지 않는다는 것입니다. 여러 카운트를 독립적으로 관리 할 수 ​​있습니다. 또한 50에서 깜박이는 경우 모듈로를 수행 할 필요가 없으며 깜박일 때 100에서 0으로 재설정 할 수도 있습니다. – paddy

+0

독립적 인 시계를 사용하려고한다면 각 함수에서 정적을 만들 것입니다 (그리고 do_blink_on/off를 하나로 결합). 나는 대답을 위해 그것을 고려했다. 그러나 나는 그것이 누가 위의 질문을 질문 할 필요가 있기에 아마도 너무 앞서 갈 것이라고 생각했다. –

1

AMADANON의 대답은 효과적 일 수 있습니다. 그러나 이와 같은 여러 작업을 수행하는 기본 방법은 타이머 인터럽트입니다. 예를 들어, 코드가 페이드 한 후에 다른 작업을 수행하기를 원한다면, 다른 기능의 타이밍이 LED 깜박임을 방해합니다. 이를 해결하기 위해 Arduino에 내장 된 타이머를 사용합니다.

백그라운드에서 타이머가 카운트 업되고 특정 값에 도달하면 카운터를 재설정하고 LED를 켜고 끄는 인터럽트 서비스 루틴을 트리거합니다.

여기 타이머와 함께 LED를 점멸에 대한 자습서의 인터럽트 : http://www.engblaze.com/microcontroller-tutorial-avr-and-arduino-timer-interrupts/

관련 문제