Вопрос по Char[]
- Войдите на сайт для отправки комментариев
Чт, 21/11/2013 - 16:14
if (datacomplete) { Serial.print(gpsdata); datacomplete = false; if (gpsdata.length() > 10){ int N= gpsdata.indexOf("V,"); Serial.println( N, DEC); char gpsN[3]; for (int i=0; i <= 2; i++){ gpsN[i]=gpsdata[i+N];} gpsdata = ""; Serial.println(gpsN); } }
$GPRMC,,V,,,,,,,,,,N*53 8 V,,Q
такой кусок кода выдает нечто странное в сериал... если gpsN[3], то почему оно равно V,,Q ?? Ресет не помогает. Понимаю что что-то просрал, но что? Ну и еще вопрос: как проще выдрать кусок строки в другую строку?
П.С. На строку не обращайте внимания. Тут просто не ловит спутники.
такой кусок кода выдает нечто странное в сериал... если gpsN[3], то почему оно равно V,,Q ??
Потому что string
как проще выдрать кусок строки в другую строку?
Так же как и сорвать яблоко на яблоню.
А получить подстроку из строки можно так substring().
Потому что string
Ну да, туплю, помогло... в моем случае char gpsN[3] - 2 знака, почему в сериал выпало 6 ? Откуда нарисовалось "Q" и еще 2 непечатки.
А получить подстроку из строки можно так substring().
тем временем:
http://arduino.cc/en/Tutorial/StringSubstring
It allows you to look for an instance of a particular substring within a given String.
Насколько я понял проверяет вхождение подстроки в строку, не?
Все... дошло... Прости, я всю жисть в паскале прожил, а там функции отдельно от процедур :) Тяжело перестроить отработанную годами логику.
З.Ы. На русском сайте про стринги: "Текстовые строки в Ардуино объявляются как массив (array) типа char (символов - литер), оканчивающийся символом "конца строки"." явно сообщают что стрнингов не бывает вообще. На англ. они есть, но субстринги не для того...
читайте внимательнее
String - это специальный тип, КЛАСС!!! и к стандартной сишной строке, которая является массивом символов char[], не имеет никакого отношения!
почему в сериал выпало 6 ? Откуда нарисовалось "Q" и еще 2 непечатки.
Так как у вас не было символа конца строки (\0, 0), print() выводил данные до тех пор пока в памяти не встретился тот самый 0.
Насколько я понял проверяет вхождение подстроки в строку, не?
Ну да, туплю, помогло... в моем случае char gpsN[3] - 2 знака, почему в сериал выпало 6 ? Откуда нарисовалось "Q" и еще 2 непечатки.
Размер массива char не контроллируется.
Функция вывода работает пока не встретиться символ \0, который является сиволом окончания строки.
И это уже Ваша задача обеспечить его появление (например как то так chargps[2] = 0;), это за Вас может сделать любая функция которая выыводит данные в массив, только аккуратно, что бы за определенные пределы не выйти.
Да понял уже... просто геморойно совмещать аппаратную часть с програмной, да еще на незнакомом языке в незнакомом окружении. Итого трабл на трабле, а почему хрен поймешь. Но интересно же... :)
Например:
uno
mega 2560
И тишина... Не передал? Не принял? Код? Настройка? Неконтакт? Криво собрал?
Да понял уже... просто геморойно совмещать аппаратную часть с програмной, да еще на незнакомом языке в незнакомом окружении. Итого трабл на трабле, а почему хрен поймешь. Но интересно же... :)
вы мазохист? :)
Используйте другую библтотеку для работы с nRF24L01.
Используйте другую библтотеку для работы с nRF24L01.
Не думаю что дело в библиотеке.
Вы 3 вольта для питания нрф откуда берете?
Начните с другого примера, для одного дивайся, типа сканера, если не ошибаюсь в примерах должен быть.
ну и как включаете, мегу?
если можна, ссыль?
Эта попалась первой на глаза у продавца плат на страничке.
Не думаю что дело в библиотеке.
Вы 3 вольта для питания нрф откуда берете?
Начните с другого примера, для одного дивайся, типа сканера, если не ошибаюсь в примерах должен быть.
ну и как включаете, мегу?
3 вольта с 3.3 ардуин.
Пример однажды завелся, больше не хочет :))) там как раз на 2 девайса пинг.
мега 30,31 50,51,52 :) спай-разъем прячется под ЛСД шилдом.
Попробуйте на внешнем питании, в первую очередь для меги.
Сканер нашли? Работает на обоих девайсах?
Буквально вчера сам с этим разбирался, любопытно заработало (пинги пошли) когда. Брал в руки антенки нрф...
правда на другой библиотеке
Питание не при делах... только что залил пинг из примеров. Бегает красиво. НО! В сериал выдает данные только если мегу ресетнуть после того как открыть монитор порта. Странно, да?
Нрф с усилками и внешними антеннами. Так что ваш финт не пройдет. А вообще где-то тут вспоминали что бывают кривые платы, плохо пропаянные, которые работают зависимо от положения или прижима кварца/прогиба.
По поводу Ваших первых скетчей, для уно и меги.
Проверил на уно и диамолове, работают.
Только надо закаментировать 16-ые строки в обоих скечах, и во втором добавить в loop() задержку, например delay( 100 )
По поводу Ваших первых скетчей, для уно и меги.
Проверил на уно и диамолове, работают.
Только надо закаментировать 16-ые строки в обоих скечах, и во втором добавить в loop() задержку, например delay( 100 )
Не помогло... Каментить именно 16е строки?
Если можна уточнить, а зачем их каментить? они же вроде задают адреса получателя/отправителя. Можна валить в эфир кому попало?
А теперь насчет задержки - проверка if (mirf.dataready()) разве не для того? А асли добавить проверку типа if (millis - time)
Зачем - надо в библитеках покопаться.
if (mirf.dataready()) - задержку не заменяет, проблема думаю в частом обращении к модулю, не нравится ей слишком частое дерганье.
А заменить delay() на if (millis - time) конечно можно.
А по номерам строк - вот собственно код.....
Эффект приинтереснейший... если дергать ресетом Уно, то через раз приходит пара пакетов. Потом все глохнет навсегда. Значения делея не играют роли. Уно при этом моргает Тх-ом (тоесть не висит). При удачной отправке за каким то лешим моргает Rx. Чую что где-то бок... Тестовый пинг, то проходит нормально.
if (mirf.dataready()) - задержку не заменяет, проблема думаю в частом обращении к модулю, не нравится ей
Не должно бы... оно кабы 2мбита дежит, такша по 256 бит должно 8192 раза пережить :)
чем дальше в лес, тем третий лишний... Тот же скетч при установке уно - передатчиком, мегу - приемником глюкает. Наоборот все отлично... Сами радейки менял местами. Нифига, это не они... Проблемы с питаловом на меге наоборот должны бы быть в режиме передатчика... короче ХЗ..