Привет, ребята, меня зовут Джованни, и я создатель PJON. Я прочитал ваше обсуждение через Google Translate, и благодаря вашим тестам действительно обнаружил неприятный баг в Arduino Toolchain. Я очень рад, что вы пользуетесь PJON, и надеюсь, что он поможет вам в ваших
экспериментах, так как, с моей стороны, я очень уважаю Российскую инженерную школу и ваш подход к решению проблем!
TX:
Код: Выделить всё
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("I will now freeze you!");
};
RX:
Код: Выделить всё
void setup() {
pinMode(13, OUTPUT);
digitalWrite(13, LOW); // Initialize LED 13 to be off
Serial.begin(9600);
};
void loop() {
digitalWrite(13, HIGH); // Initialize LED 13 to be off
delay(10);
digitalWrite(13, LOW); // Initialize LED 13 to be off
delay(30);
};
В общем, не используя библиотеку PJON, я получил те же результаты, что описываете вы: в этом коде ресивер получает функцию begin() и затем циклично мигает, если же я перезагружаю:
- Часто ресивер зависает с включенным индикатором (LED ON) - кажется, это происходит перед установкой (setup)
- Часто ресивер зависает с выключенным индикатором (LED OFF) - а это, кажется, происходит сразу после установки (setup)
- Я заметил, что для того, чтобы ресивер снова замигал, мне приходится одновременно перезагрузить и ресивер, и трансмиттер
- Осциллограф показывает, что трансмиттер передает данные - поэтому, судя по всему, он не зависает
- Тот же баг происходит и с использованием USB порта, подключенного к ресиверу и трансмиттеру, и без (то есть с другим источником питания)
Перегрузка буфера Serial? (Serial buffer overflow?) Или что-то связанное с загрузчиком (boot loader) или с самим процессом передачи входящих данных во время загрузки после перезагрузки (serial incoming Data in the process of boot after reset)? Я уже сообщил об этой проблеме Arduino:
https://github.com/arduino/Arduino/issues/6050
После тестирования, я пришел к выводу, что Arduino Duemilanove работает нормально, не зависает, а у Arduino Mega как раз возникают эти проблемы. Скоро планирую протестировать Arduino Leonardo и Uno.
Еще раз спасибо, что обнаружили этот баг, и помогли разобраться в этой проблеме!