我正在与Arduino (Nano板)一起做一个DIY项目。我在第一次和第二次阿杜亚诺之间的串行通信上有问题。第一个Arduino将一个字符(字母r)发送给第二个字符,这就是第二个Arduino如何从EEPROM (从0-25字节开始)恢复字节。唯一的问题是,第二个Arduino没有正确发送字节,或者第一个Arduino没有正确地存储它们。
第二个Arduino在EEPROM中具有默认值:
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); 循环函数在第二个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;
}
}还原第一个Arduino上的字节的代码:
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);在此过程中,我打印了所有字节,而字节根本不匹配。左侧从第二个Arduino向第一个Arduino发送字节,右侧从第二个Arduino接收第一个Arduino上的字节。

发布于 2017-07-03 16:01:04
也许写作不起作用。每个EEPROM.write()语句(每个这里的文件 )都需要3.3毫秒才能完成。在您的代码中,除了检查Serial.available()的时间之外,我没有看到任何允许写的适当步调的东西。
也要注意,所有AVR芯片的EEPROM支持无限读取,但有一个只有大约100,000周期的写入耐力。因此,您应该明智地经常写信给EEPROM。理想情况下,这是为了持久的设置和值可以经常读取,很少写。把一堆EEPROM写在一个快速循环,你可能会超过EEPROM的耐力非常快。然后EEPROM被毁了,您需要一个新的芯片(和引导加载程序)或一个新的Arduino。我从糟糕的经验中知道这一点。;)
https://stackoverflow.com/questions/44889162
复制相似问题