답변:
예, 아니오 당신이하고 싶은 일에 대해 다소 모호합니다. 나는 이것을 몇 가지 다른 섹션으로 만들었습니다 (주로 센서 데이터 읽기에 중점을 둡니다 ... 모든 것에 적용되지만 내가 사용하는 컨텍스트입니다).
AFAIK 모든 Arduino는 하나의 코어 만 있습니다 (한 번에 하나의 작업 만 수행 할 수 있음). 대부분의 Arduino 보드의 경우 하드웨어 멀티 스레딩이 지원되지 않습니다. 그러나 소프트웨어 멀티 스레딩을 구현하는 방법이 있습니다 . AsheeshR의 접근 방식은 완료하는 데 오랜 시간이 걸리는 기능 (예 : 라이브러리에서 무언가가 지연되거나 지연되는 기능)에 대해서는 잘 작동하지 않지만 짧게 잘 작동합니다. 같은 기능 pinMode()
. 거기에 나열된 Protothreads 라이브러리가 더 좋을지 모르지만 실제로는 모르겠습니다.
HTTP로 이것을 조정하기가 어렵습니다. 특히 만들어야하기 때문에
스케치가 멈추는 일반적인 방법은 지연을 사용하는 것입니다. 메인 루프에서 if 문과 millis()
시간 (시계 시간이 아니라 Arduino가 시작된 이후의 시간)을 반환하는 함수를 사용하여 해결할 수 있습니다 . 루프 내에서 루프를 수행하여 센서 데이터를 폴링 할 수도 있습니다.
이 millis()
접근 방식은 전체 프로그램을 정지시키는 것 (즉 , 눈에 띄는 시간 동안 지속되는 더 많은 지연 또는 루프)에는 적합하지 않습니다. 100ms IIRC는 UI가 게으른 것처럼 보이지 않는 일반적인 최대 시간입니다.
인터럽트는 사물을 거의 비동기 적으로 유지할 수있는 좋은 방법입니다. 핀 상태가 변경 될 때마다 짧은 코드 (지정한)를 실행합니다. 그것은에서 중단 loop()
하고 "일단이 off 상태로 돌아갑니다 ISR은 "으로 실행하고있다. 이 작업을 수행하는 방법을 설명 할 시간이 없지만 빠른 Google 검색으로 많은 결과를 얻을 수 있습니다.
예를 들어 스레딩 섹션이 가장 적합합니다. 이 주제는 매우 모호하므로 몇 가지 사항을 실험하고 작동하는 것을 찾아야합니다.
방금 전 놀이터에서 작업 스케줄러 에 대한 코드를 게시 했습니다. 조심히 살펴보고 싶을 수도 있습니다.
Arduino의 프로세서는 본질적으로 단일 스레드이며 멀티 태스킹 할 수 없습니다. 언급했듯이 멀티 태스킹의 환상을 만드는 방법이 있습니다. Annonomus Penguin은 꽤 잘 맞았습니다.
또한 TimerOne을 확인하십시오 (아마 더 낫습니다.)