Не могу разобраться с XBee
- Войдите на сайт для отправки комментариев
Доброго времени суток!
Есть 2 XBee'шки 1S, 2 Uno, UartSBee, IO и ХВее шилды.. В виду своего незнания данной технологии, пытался разобраться по видео Ждереми Блюма.. Прошить ХВее удалось далеко не с первого раза и в итоге программой X-CTU. Помогите, пожалуйста, разобраться, в чем может быть проблема теперь:
На оду Уну цепляю ИОшилд, аналоговый датчик и ХВее.. Значения датчика хочу передавать на другую Уну для просмотра их на компе и дальнейшей обработки. ДАнные датчика колеблются от 0 до 1000, примерно, выше не замечал.. Отправка данных осуществляется вполне нормально, данные передаются четко, датчик не врет. Но вот проблема, принимать второй ХВее никак не хочет, сперва выдает результаты типа, 55 49 53 13 10 и дальше все по кругу, через мин 5 появляется единственное значение - 55. Реакции на датчик нет, т.е. если я его отключаю - то все те же цифры.. Но если выключаю отправителя - то и приемник перестает выдавать хоть какие-то цифры. Проверял отправителя всеми способами, в том числе и в X-CTU, да и простым подключением XBee в UaerSBee - данные верные, только вставляю в Уну с шилдом - все по-новой. Пробовал перепрошивать, менял шилды, смотрел в сторону типов данных(на них, почему-то и есть подозрение, но уже не хватит сил осознать). Помогите, плиз, разобраться!
Отправитель:
int MPin = 0; void setup() { Serial.begin(9600); } void loop() { int val = analogRead(MPin); Serial.println(val); delay(1000); }
Получатель:
void setup() { Serial.begin(9600); } void loop() { while( Serial.available() == 0); int data = Serial.read(); delay(1); Serial.println(data); Serial.flush(); delay(1000); }
Для того что бы быть уверенным, что у вас правильно организованна передача данных сначала проверьте без модулей, соеденив RX с TX, TX с RX и GND с GND дуин.
Подключил, запутался еще больше.. был уверен, что проблема на стороне приемника... а теперь уже и не знаю..
При таком соединении - приемник показывает все те же 55 и.т.д, но никак не то, что нужно.
Вы должны понимать, что функия Serial.print(val); преобразует ваше значение в коды АСКИ и отправляет по байтам (по символам). То есть например значение 1234 преобразуется в 49, 50, 51, 52 и отправляется этими 4 байтами. На стороне приемника, так как функция Serial.read() просто читает принимаемые байты вам нужно собрать значение из кодов АСКИ.
Вот примеры:
Приемник:
Передатчик: (отличается от вашего только функцией Serial.print(val);)
И кстати, код 55, который вы видите в мониторе это цифра 7.
И еще есть второй способ, разбить значение на 2 байта, отправить, принять и собрать обратно.
Приемник:
или можно так
Передатчик:
или так:
А хВее (в АТ режиме) я настраивал так чтобы модули адресовали пакеты друг другу, а не отправляли их в широковещательном режиме.
Максим, огромное спасибо! Я догадывался, что у меня проблема с типом данных, точнее, их "сборе".. но после целого дня проб и попыток - уже не мог сообразить, потому обратился сюда! Спасибо, разобрался, настроил, все получилось.. благодаря Вам!