2017-07-03 19 views
0

私はArduinos(Nanoボード)を使用したDIYプロジェクトに取り組んでいます。私は最初と2番目のArduinos間のシリアル通信に問題があります。最初のArduinoは2文字目に1文字(r文字)を送信し、2度目のArduinoがEEPROMからバイトを復元する方法を示します(0〜25バイト)。唯一の問題は、2番目のArduinoがバイトを正しく送信しないか、または最初のArduinoが正しく格納しないことです。EEPROMの復元が機能しない

第アルドゥイーノはEEPROMのデフォルト値があります最初のArduinoにバイトを復元する

if (Serial.available()) { 
    incoming = Serial.read(); 
    if (incoming == 'r') { 
    uint8_t address = 0; 
    notSend = 255; 
    do { 
     Serial.write(EEPROM.read(address)); 
     address++; 
     delay(50); 
    } 
    while (address < 26); 
     notSend = 0; 
    } 
    } 

コード:

uint8_t byteCount = 0; 
Serial.write('r'); // STARTS RESTORING 
do { 
    if (Serial.available()) { 
    if (byteCount >= 0 && byteCount <= 17) EEPROM.write(byteCount, Serial.read()); 
    // FROM DISTANCE TO TOP SPEED (BYTES 0 - 17) 
    else if (byteCount >= 18 && byteCount <= 21) EEPROM.write(byteCount + 8, Serial.read()); 
    // TRIP TIME 
    else EEPROM.write(byteCount + 16, Serial.read()); 
    // WORK HOURS 
    byteCount++; 
    } 
} 
while (byteCount != 26); 

第アルドゥイーノで

EEPROMWritelong(EEPROM_DISTANCE, 1500); 
EEPROMWritelong(EEPROM_DISTANCE_B, 100); 
EEPROMWritelong(EEPROM_DISTANCE_C, 1000); 
EEPROMWritelong(EEPROM_DISTANCE_D, 400); 
EEPROM.write(EEPROM_MAX_SPEED, 43); 
EEPROM.write(EEPROM_TOP_SPEED, 38); 
EEPROMWritelong(EEPROM_TRIP_TIME, 1800); 
EEPROMWritelong(EEPROM_WOKR_HOURS, 3600);  

ループ機能を私はこの過程ですべてのバイトを印刷しましたが、バイトはまったくマッチしません。 左側が第2のArduinoから第1のArduinoにバイトを送信し、右側が第2のArduinoから最初のArduinoでバイトを受信して​​います。

Serial monitor

+0

トピックオフ:エンディアンスワップを処理する関数を作成して使用することで、多くの重複したコードを駆除できます。 – user4581301

+0

@ user4581301私は何かを見ますか? – SilvioCro

+0

私はあなたが何を意味するかを見ていると思います。ありがとう! – SilvioCro

答えて

2

おそらく書き込みが動作していません。各EEPROM.write()ステートメントは、the documentation hereごとに、3.3ミリ秒で完了します。 Serial.available()をチェックする以外に、書き込みの適切なペーシングを可能にするコード内に何も表示されません。

また、すべてのAVRチップのEEPROMは無制限の読み取りをサポートしていますが、約100,000サイクルの書き込み耐性しか持たないことにも注意してください。したがって、EEPROMに書き込む頻度は賢明でなければなりません。理想的には、これは永続的な設定用であり、値はしばしば読み書きされることがほとんどありません。 EEPROM書き込みの束を高速ループに入れて、EEPROMの耐久性を非常に早く超えることができます。その後、EEPROMが破壊され、新しいチップ(およびブートローダ)または新しいArduinoが必要になります。私は悪い経験からこれを知っています。 ;)

+0

だから私は遅延を使用する必要がありますか? – SilvioCro

+0

書き込みが有効であることを確認するには、ある程度の遅延が必要です。私があなたを参照した文書が最後の行でどのように遅れているかに注目してください。効果的な書き込みを保証するには、いくらかの遅延が必要です。 – TomServo

+0

私は5msと250msの間の遅延を試みました。一度だけ良いコミュニケーションだった。 – SilvioCro

関連する問題