回答:
はいといいえ。あなたは何をしたいのかちょっとあいまいです。これをいくつかの異なるセクションに分けました(主にセンサーデータの読み取りに焦点を当てています...それはすべてに適用されますが、それは私が使用しているコンテキストです)。
私の知る限り、すべてのArduinosには1つのコアしかありません(一度に1つのことを実行できます)。ほとんどのArduinoボードでは、ハードウェアマルチスレッドはサポートされていません。ただし、ソフトウェアマルチスレッドを実装する方法があります。AsheeshRによるアプローチは、完了するまでに長い時間がかかる関数(つまり、ライブラリ内の何かに時間がかかる、または遅延)ではうまくいきません。なぜなら、それらの命令によって詰まってしまうからです。のような機能pinMode()
。そこにリストされているProtothreadsライブラリはこれで良いかもしれませんが、私は本当に知りません。
特にこれを作成する必要があるため、HTTPでこれを調整するのは難しいでしょう。
スケッチがストールする一般的な方法は、遅延の使用です。これは、メインループでifステートメントとmillis()
時刻(時刻ではなく、Arduinoが起動してからの時刻)を返す関数を使用することで解決できます。ループ内でループを実行して、センサーデータをポーリングすることもできます。
このmillis()
アプローチは、プログラム全体が停止する原因になるもの(つまり、かなりの時間続くより多くの遅延またはループ)ではうまく機能しません。100msのIIRCは、UIが遅延していないように見える一般的な最大時間であることに注意してください。
割り込みは、物事をほぼ非同期に保つ素晴らしい方法です。ピンの状態が変わるたびに、(指定した)短いコードを実行します。から中断し、loop()
「ISR」が実行されると中断したところに戻ります。これを行う方法を説明する時間はあまりありませんが、簡単なGoogle検索では多くの結果が得られます。
あなたの例では、スレッド化セクションが最も適切です。このトピックはかなりあいまいなので、いくつかのことを試して、動作するものを見つける必要があります。
先日、プレイグラウンドでタスクスケジューラ用のコードを投稿しました。覗いてみてください。必要に応じて調整してください。
Arduinoのプロセッサは本質的にシングルスレッドであり、マルチタスクはできません。ただし、前述のように、マルチタスクの錯覚を作成する方法があります。Annonomus Penguinはそれらにかなりよく当たりました。