(部分的に)成功スケッチ
|
まず"micros()"はリファレンスにもある通り、戻り値を"unsigned long"で返す。
格納させる変数を気を付けないとオーバーフローさせてしまう。
割込み処理内で使う変数には"volatile"という装飾を付けるべきとの事。
シリアル通信のビットレートは9600[bps]が一般値らしい。
割込み関数を指定する"attachInterrupt"は1ピンに対して一種類の関数しか決められない。
同一ピンに対してFOLLINGとRISINGで2種類の関数を指定しようとしても、後で指定した関数しか動作しない。
下は結果をグラフにしたもの。
1つめ突き抜けているのは待機時間、以降Low 3.5、High 1.5強、Low 0.5弱[ms]…と"Arduinoでエアコン制御 2-1"で望んだ結果になった。
フォーマットの判断
ChaNさんや秋月さんを参考にしました。これまでさんざん0.5[ms]云々と書いてきたが、0.4[ms]が1単位になっているようである。
400[μs]を単位として考える方が整合性が取れる。
つまり"家電協フォーマット"になっていると思われる。
リーダコードとして(1)3.2,(0)1.6 [ms]。
うまく受信できたかのように思っていたが良く見ると同符号が連続している部分がたくさんある。
それは明らかにおかしい…。
"digitalRead"の処理の重さが原因で取りこぼしが出るのか、符号の付け間違いが生じるのか、あるいはその両方かもしれない。
割込み時に"FOLLING""RISING"のいずれで処理に入ったのか、その情報が取得できれば良いのだが、結局は明確な情報が見つけられなかった。
Arduinoでエアコン制御 2-3
0 件のコメント :
コメントを投稿