Работа с массивом
- Войдите на сайт для отправки комментариев
Чт, 26/06/2014 - 13:57
Здравствуйте!
У меня возникла проблема с массивом, задачка вроде легкая, но чего-то до меня не доходит, как реализовать =(((
Задача состоит в следующем: Один модуль Х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 в данном случае.
Я уже перепробовала различные вариации, но все бесполезно, подозреваю что это у меня проблемы с логикой =(( Посоветуйте как можно это реализовать, заранее благодарю!
Для начала пойдите в раздел программирование, найдите там массивы. И научитесь их вначале с ними работать. Объвлять,выводить, читать/писать отедльный элемент и т.п. Можно еще какую-нибудь книжечку по C в разделе массивы полистать.
Вначале не из, сериал, а при объявлении заполните его каки-нибудь цифрами и научитесь выводить массив.
Потом научитесь заполнять его не при объвление, а циклом for. Скажем заполните его програмно цифрами {0,3,6,9,....} и выведите.
Потом уже будете разбиратся как заполнять цифрами приходящими из Serial (выводить к этому момету вы уже умеете).
Ну а уже после этого, будете разбиратся как выцепить именно то что вам нужно. Когда будете способны посмореть/вывести весь пришедший пакет целиком.
Вот потом можно и XBee заниматься.
Вот как так. Проблемы у вас не слогикой, а с базовыми знаниями. Следовательно их и нужно подтягивать, а не "пробовать разные вариации". Это не "магия" в которой "нужно знать правильное заклинание".
Потому что текущий ваш "вариант" смысла обсуждать нет. Указание "что не так", вам ничего не дадут:
1. Читаете/пишите за границы массива
2. Не итерируете по массиву, пишите/читате все по одному адресу.
3. Массив (именно массив) в Serial вы не выводите
4. Ничего не делаете для определения где начался пакет, а где закончился.....
5. И т.д. и т.п.
Вообщем у вас тут всего три строки правильных.
byte dataarray[16]; - скорее всего правильно (так как не известно какая у вас длина пакета в реальности).
if (Serial1.available() > 0) - без нареканий.
Serial.print(' '); - тоже все логично.
А... ну еще setup() выкгляит целиком правильным. Все остальное (то есть "работа с массивом") - совершенные чудеса.
BTW. Это очепятка или опасание дискриминации? :)
Abdulla: "Я уже перепробовала различные вариации..."
P.S. Впрочем можете не отвечать, к коду и советам "что читать" - это отношения не имеет. Все советы в любом случае остаются в силе.
А почему "опасание дискриминации"? Опечаток там нет, я девушка. Спасибо за совет в любом случае.
А почему "опасание дискриминации"?
Ну потому что ник как-бы мужской :) Значит три варианта:
1. Пытались скрыть (ничего криминального в этом нет. имеете право ;)
2. Очепятка
3. Пользуетесь логином мужа/брата/папы/свата
4. Abdulla - это обревеатура, акроним и т.п.
5. Abdulla - любимый герой/актер и т.п.
Вообщем, в любом случае это "пустое любопыство" ничего не меняющие.
А почему "опасание дискриминации"? Опечаток там нет, я девушка. Спасибо за совет в любом случае.
Ну и ладно. Не обращайте внимание. Проф.деформация: цеплятся ко всем расхождениям/нестыковкам. В 90% случаев они и являются причиной проблем. К примеру переменная объялена как int, а сохраняют в нее значение функции возвращающей unsigned long. Или, скажем, объявили массив скажем размеров в 16-ть элементов, а читаем/пишем в 17-тый :) Нестыковочка ;)
Вообщем читайте:
for и массив (array)
Учитесь, для начала просто выводить массив в Serial. Если не получается - показывайте "что вышло". Не ждите телепатов.