xbee was not declared in this scope

vlad7
Offline
Зарегистрирован: 22.10.2014

Hello to everybody!

I Have two boards Arduino Uno Rev3, two IO Wireless Shields and two modules XBee Pro. And I have two computers. I wish to make program for transmitting some data from Comp_1 to Comp_2.
When I run some example-codes without XBee's library, all works good.

But when I use XBee library, I have errors: "xbee was not declared in this scope".
It's wonderfull for me, why I have this errors only for loop-section, but not for setup-section?
My code for transmitter is:

#include
#include

void setup() {
XBee xbee = XBee(); // no any errors!
xbee.setSerial(Serial); // no any errors!
// start serial
Serial.begin(9600);
uint8_t payload[] = { 'H', 'i' };
XBeeAddress64 addr64 = XBeeAddress64(0x0013a200, 0x12345678);
ZBTxRequest zbTx = ZBTxRequest(addr64, payload, sizeof(payload));
}

void loop {
if (Serial.available())
{
int val = Serial.read();
xbee.send(zbTx); //-----error: 'xbee' was not declared in this scope

Serial.flush();
delay(1000);
}
}

I can not compile this code. My question is: why there is no error setup-section, but in loop-section there is?
What I did wrong?

I was reading different forums during two weeks, but unsuccessfully. Please help.
Thanks.

vlad7
Offline
Зарегистрирован: 22.10.2014
02.12.14 11-00, Vlad7:
---------------------------------------------------------------------------------------------
Item: xbee was not declared in this scope

 Прошу прощения за то что поместил пост на английском! перепутал файлы и взял текст,
 который готовил для англоязычного форума! Исправляю свою ошибку:

Доброго времени суток всем!

  У меня есть две платы Arduino UNO Rev3, две платы IO Wireless Shields и два модуля XBee Pro.
 И ещё есть два компьютера. Хочу написать программку для пересылки некоторых данных с  компа_1
 на комп_2.

 Когда я запускаю некоторые примеры без библиотеки ХВее, всё работает хорошо.

  Но когда я использую библиотеку ХВее, получаю ошибку: "xbee was not declared in this scope".
 Меня удивляет, почему я вижу эту ошибку только в loop-section, а в setup-section такую ошибку
 не выдаёт?

  Мой код для передатчика:

#include <XBee.h>
#include <SoftwareSerial.h>

 void setup() {  
  XBee xbee = XBee();  // ошибок нет!
  xbee.setSerial(Serial); // ошибок нет!

  Serial.begin(9600);
  uint8_t payload[] = { 'H', 'i' };

  XBeeAddress64 addr64 = XBeeAddress64(0x0013a200, 0x40C04446);
  ZBTxRequest zbTx = ZBTxRequest(addr64, payload, sizeof(payload));
  
}

void loop()
{
   if (Serial.available())
 {
  int val = Serial.read();

  xbee.send(zbTx);  //-----ЗДЕСЬ ОШИБКА: xbee was not declared in this scope

  Serial.flush(); // clear bufer
  delay(1000);
 }
}

  Я не могу откомпилировать этот код. Мой вопрос звучит так:
 Почему нет этой ошибки в setup-section? Почему она в loop-section есть?
 Что я сделал неправильно?

  Две недели рылся по разным форумам и следовал разным советам, которые
 сводятся к тому, что надо правильно инсталлировать библиотеку ХВее.
 Но если бы она у меня была неправильно инсталлирована, то и в setup-е
 эту ошибку выдавало бы! Значит, здесь что-то другое?

  Прошу помощи. Любые идеи приветствуются.

 Спасибо.

 

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Потому что вы жолжны определять XBee xbee = XBee(); вне команды setup, чтобы получать доступ к нему из других функций таких как loop

Почитайте про обасть видимости переменных.

Araris
Offline
Зарегистрирован: 09.11.2012

Именно так, ХВее действительно "was not declared in this scope", поскольку scope ограничен функцией void setup().

uint8_t payload[] = { 'H', 'i' };
XBeeAddress64 addr64 = XBeeAddress64(0x0013a200, 0x12345678);
ZBTxRequest zbTx = ZBTxRequest(addr64, payload, sizeof(payload));

тоже не забудьте "наверх" перенести.

vlad7
Offline
Зарегистрирован: 22.10.2014

// Да я читал про область видимости переменных. Но я не понял, что вызов методов разрешается делать вне
// какой-либо функции. Признаюсь, затупил! перенёс всё вверх и сразу откомпилировалось!
// Всем спасибо за помощь! Тему закрываю.