Привет. До этого подключал XBee, к своей Arduino Mega, так всё было нормально. Подключал XBee напрямую, без всяких шилдов, с помощью четырех контактов (3.3V, GND, RX1, TX1). Теперь же, купил Mega Shield, и подключаю через него. Однако столкнулся с тем, что при попытке отослать один ответ на запрос, получаю неограниченное число ответов. Сыпет без перерыва. Код основного файла: Код (Text): #include <dht.h> unsigned long workTime; // Время работы Arduino с начала старта int DHTSensorSelector = 1; // Флаг обозначающий, с какого сенсора DHT будут сниматься данные void setup() { Serial.begin(9600); XBeeModuleInit(); DHTSensorFirstInit(); DHTSensorSecondInit(); } void loop() { workTime = millis(); XBeeCommandListener(); if ((workTime % 1000) == 0) { if (DHTSensorSelector == 1) { DHTSensorFirstHandler(); DHTSensorSelector = 2; } else if (DHTSensorSelector == 2) { DHTSensorSecondHandler(); DHTSensorSelector = 1; } } } Файл с методами для XBee: Код (Text): #define TEMPERATURE_FIRST_READ '1' // Считать температуру с первого датчика #define TEMPERATURE_SECOND_READ '2' // Считать температуру со второго датчика #define HUMIDITY_FIRST_READ '3' // Считать влажность с первого датчика #define HUMIDITY_SECOND_READ '4' // Считать влажность со второго датчика char XBeeResponseMsg[128]; void XBeeModuleInit() { Serial1.begin(9600); } void XBeeCommandListener() { if (Serial1.available() > 0) { Serial1.println("Command"); } Serial1.flush(); } Фотография с подключнием: И видео поведения:
Полагаю вы проверять, что что-то есть — проверяете, а считывать — не считываете. И то, что пришло — находится в буфере вечно. Если вы думаете, что буфер очищается через метод `flush`, то это не совсем так. `flush` очищал буфер в версиях 0.x, теперь это метод гарантирующию сиюмоментную отправку накопившегося. Вам нужно делать: Код (Text): while (Serial1.available()) Serial1.read();
Изменил метод на: Код (Text): void XBeeCommandListener() { while (Serial1.available()) { int incoming = Serial1.read() - 0; Serial1.println(incoming); } } Всё равно сыпет. Правда не понятно что... я отправляю единицу, и обратно возвращаю то, что прислал. Но в итоге, в ответ получаю следующее: Код (Text): vir@laptop:~/Work/WWW/chehome.local$ app/console arduino:sensor:data:load temperature_first 49 52 57 13 10 13 10 53 50 13 13 10 49 51 13 10 13 10 49 48 13 10 13 10 53 51 13 10 13 10 53 48 Первое число "49", понятно откуда... а вот дальше. Такое впечатление, то что он мне возвращает, то снова он принимает в виде команды =(
Что-то не то у вас на стороне PHP. Видно, что из-вне в Serial идут данные. Причём не беспорядочные. Они явно осмысленного происхождения. Из того, что вы привели, я увидел, что на Arduino приходит: 159 52 13 10 53 … Узнаёте? А так: 1;4;5…?