Работа с массивом

Abdulla
Offline
Зарегистрирован: 18.06.2013

Здравствуйте!

У меня возникла проблема с массивом, задачка вроде легкая, но чего-то до меня не доходит, как реализовать =(((

Задача состоит в следующем: Один модуль ХBee отсылает API-пакет на другой модуль, подключенный к ардуине.  Мне нужно из полученного пакета вытащить именно управляющее значение.  

byte data = 0;
byte dataarray[16];
void setup()
{
  Serial.begin(9600);
  Serial1.begin(9600);
}
void loop()
{
  if (Serial1.available() > 0) 
  {
   dataarray[16] = Serial1.read();  
   Serial.print(dataarray[16]);
   Serial.print(' ');
  } 
}

Вот что я получаю на выходе: 126 0 13 144 0 19 162 0 64 166 121 16 0 0 1 125 205

Мне нужно то что жирным выделено, т.е. 125 в данном случае. 

Я уже перепробовала различные вариации, но все бесполезно, подозреваю что это у меня проблемы с логикой =(( Посоветуйте как можно это реализовать, заранее благодарю!

leshak
Offline
Зарегистрирован: 29.09.2011

Для начала пойдите в раздел программирование, найдите там массивы. И научитесь их вначале с ними работать. Объвлять,выводить, читать/писать отедльный элемент и т.п.  Можно еще какую-нибудь книжечку по C в разделе массивы полистать.

Вначале не из, сериал, а при объявлении заполните его каки-нибудь цифрами и научитесь выводить массив.

Потом научитесь заполнять его не при объвление, а циклом for. Скажем заполните его програмно цифрами {0,3,6,9,....} и выведите.

Потом уже будете разбиратся как заполнять цифрами приходящими из Serial (выводить к этому момету вы уже умеете).
Ну а уже после этого, будете разбиратся как выцепить именно то что вам нужно. Когда будете способны посмореть/вывести весь пришедший пакет целиком.

Вот потом можно и XBee заниматься.

Вот как так. Проблемы у вас не слогикой, а с базовыми знаниями. Следовательно их и нужно подтягивать, а не "пробовать разные вариации". Это не "магия" в которой "нужно знать правильное заклинание".

Потому что текущий ваш "вариант" смысла обсуждать нет. Указание "что не так", вам ничего не дадут:
1. Читаете/пишите за границы массива
2. Не итерируете по массиву, пишите/читате все по одному адресу.
3. Массив (именно массив) в Serial вы не выводите
4. Ничего не делаете для определения где начался пакет, а где закончился.....
5. И т.д. и т.п.

Вообщем у вас тут всего три строки правильных.

byte dataarray[16]; - скорее всего правильно (так как не известно какая у вас длина пакета в реальности).
if (Serial1.available() > 0) - без нареканий.
Serial.print(' '); - тоже все логично.

А... ну еще setup() выкгляит целиком правильным. Все остальное (то есть "работа с массивом") - совершенные чудеса.

leshak
Offline
Зарегистрирован: 29.09.2011

BTW. Это очепятка или опасание дискриминации? :)

Abdulla: "Я уже перепробовала различные вариации..."

P.S. Впрочем можете не отвечать, к коду и советам "что читать" - это отношения не имеет. Все советы в любом случае остаются в силе.

Abdulla
Offline
Зарегистрирован: 18.06.2013

А почему "опасание дискриминации"? Опечаток там нет, я девушка. Спасибо за совет в любом случае.

leshak
Offline
Зарегистрирован: 29.09.2011

Abdulla пишет:

А почему "опасание дискриминации"? 

Ну потому что ник как-бы мужской :) Значит три варианта:
1. Пытались скрыть (ничего криминального в этом нет. имеете право ;)
2. Очепятка
3. Пользуетесь логином мужа/брата/папы/свата
4. Abdulla - это обревеатура, акроним и т.п.
5. Abdulla - любимый герой/актер и т.п.

Вообщем, в любом случае это "пустое любопыство" ничего не меняющие.

Abdulla пишет:

А почему "опасание дискриминации"? Опечаток там нет, я девушка. Спасибо за совет в любом случае.

Ну и ладно. Не обращайте внимание. Проф.деформация: цеплятся ко всем расхождениям/нестыковкам. В 90% случаев они и являются причиной проблем. К примеру переменная объялена как int, а сохраняют в нее значение функции возвращающей unsigned long. Или, скажем, объявили массив скажем размеров в 16-ть элементов, а читаем/пишем в 17-тый :) Нестыковочка ;)

Вообщем читайте:

for и массив (array)

Учитесь, для начала просто выводить массив в Serial. Если не получается - показывайте "что вышло". Не ждите телепатов.