Несколько вопросов. Не могу решить сам.

k4m454k
k4m454k аватар
Offline
Зарегистрирован: 18.10.2013

1. Можно ли прошить арду через bluetooth?

Имеем: Arduino Uno,  Wireless Shield, Bluetooth Bee, MacBook Pro.  Реально ли прошить ардуину (залить написанную программу) не подключая по проводу? Я пытался, выбирал в Arduino.App порт нужный (tty bluetooth), но заливка идёт с ошибкой в конце. Что делаю не так? 

2. Где можно найти более менее адекватный мануал по sprintf ? И как в нём использовать перенос строки? ('/n')
пробовал вставить '/n' внутрь строки  внутри sprintf, ничего не вышло.
пример(вывод температуры и давления "T:23;H:30"):
sprintf(buf,"T:%dC;H:%d%%",t,h);
 
и вот вместо ; надо вставить /n. Но если делаю это
sprintf(buf ,"T:%dC" + '/n' + "H:%d%%", t, h);
выдаётся ошибка.
Как быть?
 

3. Как можно распилить строку типа "name:key;name2:key2;name4:key4;name98:key1" по названиям функции и значению? 

Грубо говря, встретилось значение name, значит key (всё, что до следующего ";" ) кладём в переменную A. Если встретилось name2, то в переменную B. и т.д.

4. Как изменить напряжение аккумулятора, который подключер ко входу питания?
Там аккумулятор на 12в. Надо если садится, то сообщить. 

За ответы с меня восхищение, и бутыль пива (или бургер), если вы в мск)) 

 

std
Offline
Зарегистрирован: 05.01.2012

k4m454k пишет:
1. Можно ли прошить арду через bluetooth?

ales2k занимается этим вопросом, мну самого интересует. Ищите в теме "Заливка скетча через Bluetooth".

k4m454k пишет:
2. Где можно найти более менее адекватный мануал по sprintf ? И как в нём использовать перенос строки? ('/n')

Может быть, нужно \n. Если никак, то может вывести сначала одну строку, потом перевод строки, потом другую. Если нет, то может быть нельзя использовать выражение "+", тогда надо sprintf(buf ,"T:%dC\nH:%d%%", t, h); или типа того. В этом же месте кстати кавычки у \n одиночные а у основного выражения двойные - возможно тупит из-за этого.

k4m454k пишет:
3. Как можно распилить строку типа "name:key;name2:key2;name4:key4;name98:key1" по названиям функции и значению?

Скорее всего циклом и подстрокой. Поймали "name" в строке - копируем всё что до следующего двоеточия, получаем n - номер name. пропускаем один знак (:), копипуем все что до следующей точки с запятой - получаем содержимое name[n]. Вырезаем из строки всё от начала до того места где находимся, плюс один байт (;). Повторяем пока строка не будет пустой или не перестанет попадаться "name". Сейчас исходник писать вилы, спать охота.

k4m454k пишет:
4. Как изменить напряжение аккумулятора, который подключер ко входу питания?

Бьюсь об заклад, что имелось в виду измерить. Имеем вход 12 и 5-вольтовую логику (плата Uno). Значит, собираем делитель на три (20k+10k например), соединяем на АЦП, измеряем цифру на АЦП, измеряем на аккуме тестером. Домножим потом на коэффициент компенсации, который находится делением напряжения измеренного скетчем, на напряжение которое сказал тестер. Или наоборот, напряг на тестере поделить на напряг измеренный. Короче варианта только два :)

Формула - U=5/(1024*D)*ADC, где D - коэффициент деления делителя, примерно равный 1/3, но реально что-нибудь типа 0.9975/3.0073, поэтому сначала грубо подгоняется а потом делается компенсация.

Если будет стоять на автомобиле, на всякий пожарный можно делитель сделать на 4, разрешающая способность особенно от этого не хромает.

mixail844
Offline
Зарегистрирован: 30.04.2012

строки пиляться отлично функцией



char * strtok ( char * str, const char * delimiters );

 пример тут

k4m454k
k4m454k аватар
Offline
Зарегистрирован: 18.10.2013

std пишет:

В этом же месте кстати кавычки у \n одиночные а у основного выражения двойные - возможно тупит из-за этого.

не, одинарные кавычки как-то по другому реагируют. Хз как объяснить правильно, в общем "\n" в двойных выдаст "\n", а в одинарных станет переводом строки. то есть символ NL

 

std пишет:

Бьюсь об заклад, что имелось в виду измерить.

Да, именно) За ответ огромное спасибо) буду пытаться))) Использоваться будет не в машине))) а в воздухе)) 

 

mixail844 пишет:

строки пиляться отлично функцией

char * strtok ( char * str, const char * delimiters );

 пример тут

Мм.. Супер)) спасибки) То, что надо))

axill
Offline
Зарегистрирован: 05.09.2011

k4m454k пишет:

не, одинарные кавычки как-то по другому реагируют. Хз как объяснить правильно, в общем "\n" в двойных выдаст "\n", а в одинарных станет переводом строки. то есть символ NL

как бы не совсем так или точнее вовсе не так

компилятор С/С++ воспринимает одинарные кавычки как тип char те один символ, а двойные кавычки как строка заканчивающася нулевым символом. При использовании sprintf должно работать так sprintf(buf, "%d\n%d", i, j).

Честно не знаю как серийном мониторе ардуино, но в IBM PC всегда стандартным было перевод строки делать двумя следующими друг за друном символами "\n\r"

k4m454k
k4m454k аватар
Offline
Зарегистрирован: 18.10.2013

axill пишет:

k4m454k пишет:

не, одинарные кавычки как-то по другому реагируют. Хз как объяснить правильно, в общем "\n" в двойных выдаст "\n", а в одинарных станет переводом строки. то есть символ NL

как бы не совсем так или точнее вовсе не так

компилятор С/С++ воспринимает одинарные кавычки как тип char те один символ, а двойные кавычки как строка заканчивающася нулевым символом. При использовании sprintf должно работать так sprintf(buf, "%d\n%d", i, j).

Честно не знаю как серийном мониторе ардуино, но в IBM PC всегда стандартным было перевод строки делать двумя следующими друг за друном символами "\n\r"

Действительно, так просто и работает =) Я думал не будет так. Спасибо!

ales2k
Offline
Зарегистрирован: 25.02.2013

К сожалению с голубым зубом пока подвижек вперед нету.

Далее немного не в эту тему Ж)

Для экспериментов собрал схему с из двух 328p (пока не по радио а проводом) соединенных по ком порту - задача прошить третью.

То есть

Комп <-com-> источник 328p <-com-> приемник 328p <-com-> прошиваемая 328p

Даже такую схему пока наладить не удалось - не понимаю в чем дело...

Везде 57600. Щупал цифровым пробником - сеанс начинается и сразу рвется. Пока думаю про задержки обработки и буферы портов.

 

axill
Offline
Зарегистрирован: 05.09.2011

а что насчет ресета? заливка осушествляется кодом загрузчика, а загрузчик активируется в момент рестарта

без резстарта номер с загрузкой не пройдет

ales2k
Offline
Зарегистрирован: 25.02.2013

Вопрос ресета конечно решен. и прошиваемая 328p уходит в ребут и даже начинает принимать первые данные - смотрел анализатором, затем чтото отвечает и облом.

Причем данные туда обратно предаются, то есть заранее загруженный скетч  через ком порт управляется нормально.

Я предполагаю что проблема в следующем:

57600 это 1 байт каждые 138 микросекунд и задержка на ожидание ответа от прошиваемой 328р тоже находится гдето в этом порядке, а постановка в промежуток моей машинерии вносит доп задержку и этому мешает.

Нашел сегодня страничку http://www.faludi.com/itp_coursework/meshnetworking/XBee/XBee_program_Arduino_wireless.html

Попробую использовать.