質問: Arduinoを使った可視光通信の実装をしているのですが、調歩同期式通信においてデータのビット幅を100msecから70msec等に狭めていくと、正しく受信することができません。 この理由を知りたいです。 ここで、ストップビットから次のデータのスタートビットまで(データの送信間隔)は1000msecに設定しています。 追記: ご指摘があったのでより詳細な状況を説明します。 送信者はスタートビットから100msecで次々にビットを送り、受信者はスタートビットを確認すると、100msecで信号を読み取るとるようにしており、 そのビット間隔100msecを70msec等に狭めていくと、データが抜け落ちたりと正しく受信することができないということです。 (すなわち、送信者においてビット間の送信間隔を狭め、受信者においてもビットの検出間隔を同じだけ狭めるという意味合いです。) また、この可視光通信の実装は、自然光の全くない暗室で行っています。 具体的なスケッチを簡単に述べると、送信側が送った可視光の明滅に対して、受信側においては可視光の強度をセンサによって数値化したものを、analogRead()で読み取り、その値が閾値を超えていれば"1"とし超えていなければ"0"としています。また、スタートビットを受信すると、データの読み取りをはじめ、データの読み取りごとにdelay(ビット間隔時間)を複数回行うことによって、ビット列を受信するようにしています。
回答: まずはオシロスコープを用意して、受信側の波形がどうなっているのか、というのを確認しましょう。 可視光を使っている、といってますが、送信側はどういう発光体を使って、受信側はどういうセンサを使っているのか全く記述がないところを見ると、ハードウエアについては全く頓着してなさそうに思えます。 当てずっぽで、推測で物事をすすめるのではなく、確実な観測事実を積み重ねていきましょう。 そうでないと、なにかわからないけど、だめでした、という結果にしかなりませんよ。