2012-11-20 22 views
0

什麼是最好的方式,以便在通過紅外線使用二進制發送消息時不會出現錯誤。目前,我通過將它們編碼爲二進制ASCII值,然後使用兩個帶有紅外燈和傳感器的Arduinos來發送消息,這些Arduinos會檢查開始位燈,然後通過檢查紅外燈是否以3毫秒間隔開啓或關閉來讀取消息。Arduino紅外串行通信錯誤更正

我需要使它無論發生什麼(即來自遠程或其他Arduinos的干擾),正確的消息仍然會發送。

我還想說的是,即使兩個Arduinos都試圖在同一時間發送消息,他們也會互相發送消息。

我通過Arduino IDE的串行監視器發送和接收消息。

PS:我遇到了一個問題,如果我一次發送很多字母,他們會在一定數量的字符後混亂。即如果我要在數字之間輸入1到30之間的空格,我會得到結果:在17之後的1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 14 15 a s ....數字將變得混亂。

如果您對什麼問題有任何想法,我會非常感激!

+1

http://en.wikipedia.org/wiki/Protocol_%28computing%29 –

回答

0

在IR中不會出現錯誤將變得困難。問題是如果它錯過一次眨眼,它會全部移位,然後就會被擰緊。每次發送2個數據也很難,因爲arduino不會進行並行處理。

我會推薦一個不同的協議。 IR對很多信息都不是很好。如果你不需要無線的話,串口是非常容易的,如果你這樣做的話,可以使用藍牙,比如2個blueSMIRF。你將不得不將其中一個設置爲主設備,但這就像串行通信一樣。

做一些Google搜索,但我認爲IR不會用完整的信息解決問題。 1或2個數字,當然,但是一整句話或某件事情都不會很好地發揮作用。

要嘗試的一件事情就是發送消息2或3次,並比較它們是否相同。如果是,那麼很可能是正確的,但如果不同,您可以要求重新發送。

如果可以的話,你可能也想慢下來,並且使用更長的脈衝和暫停,這會給它更多的註冊時間,這意味着它應該更準確。

祝你好運!