Arduino Mega Server
Модератор: Alex
-
- Сообщения: 15
- Зарегистрирован: Чт мар 28, 2013 12:33 pm
- Благодарил (а): 0
- Поблагодарили: 1 раз
Re: Arduino Mega Server
Подскажите, каковы правила подключения датчиков к конкретным пинам ардуины? Где и как в AMS настраивать эти моменты? Я так понимаю, привязку пинов к датчикам можно менять "на лету"?
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Сейчас практически готов первый блок (долгожданной) документации и в ближайшее время он будет выложен на сайте. И посвящён этот блок как раз подключению датчиков и устройств к АМС.
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Я тоже так думаю и всем пользователям, которые умудрились работать с такой сложной системой как АМС без документации, нужно памятник поставить.Думаю, не только я буду очень этому рад!

Но документации не было по объективной причине — это отдельный и большой труд. Теперь, постепенно, будет выкладываться документация.
Но теперь затормозится развитие АМС — я не могу делать всё и сразу. (Благо 0.14 версия очень достойная)
-
- Сообщения: 51
- Зарегистрирован: Ср сен 18, 2013 12:21 am
- Благодарил (а): 9 раз
- Поблагодарили: 7 раз
Re: Arduino Mega Server
Alex'y respect и просьба или вопрос...
Как правильно обработать запрос вида http://ipAMS/index.htm?rgb=1&r=10&g=110&b=100&a=40
Я при находжении command="rgb" передаю в функцию setRGBA() параметр вида 1&r=10&g=110&b=100&a=40
Вот функция установки RGB в AMS:
Код рабочий, НО при частом обращении из вне, контроллер виснет наглухо...с чем связано понять пока не удалось...может кто чего дельного подскажет или Alex допишет сам)))
Как правильно обработать запрос вида http://ipAMS/index.htm?rgb=1&r=10&g=110&b=100&a=40
Я при находжении command="rgb" передаю в функцию setRGBA() параметр вида 1&r=10&g=110&b=100&a=40
Вот функция установки RGB в AMS:
Код: Выделить всё
void setRGBA() {
byte parsedParams=0;
int r, g, b, a;
unsigned char* buf = new unsigned char[32];
parameter.getBytes(buf, 32, 0);
char* inputString = (char*)buf;
parsedParams=0;
char* buffer = strtok(inputString,"&");
if(buffer!=NULL){
for(buffer=strtok(NULL,"&"); buffer!=NULL; buffer=strtok(NULL,"&") )
{
String buffer1= String(buffer);
params[parsedParams].name= buffer1.substring(0,buffer1.indexOf('='));
params[parsedParams].value=strtoint(buffer1.substring(buffer1.indexOf('=')+1));
parsedParams++; // отмечаем сколько удалось распарсить
}
}
r = params[0].value;
g = params[1].value;
b = params[2].value;
a = params[3].value;
color(led1, r, g, b); //Вызываем функцию установки цвета из стандартного пакета AMS
}
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Если на простые вопросы есть возможность отвечать, то на анализ кода и эксперименты сейчас нет времени (может кто из мастеров или заинтересованных подскажет).
Могу только высказать предположение, что зависания связаны не с кодом, а с сетевой работой с одним свободным сокетом (но может это не так и виноват именно код).
Установить где конкретно виснет можно поставив маркеры, выводящие сообщения в Сериал. Причина выясняется за пять минут.
Могу только высказать предположение, что зависания связаны не с кодом, а с сетевой работой с одним свободным сокетом (но может это не так и виноват именно код).
Установить где конкретно виснет можно поставив маркеры, выводящие сообщения в Сериал. Причина выясняется за пять минут.
-
- Сообщения: 113
- Зарегистрирован: Пн окт 19, 2015 8:27 am
- Благодарил (а): 9 раз
- Поблагодарили: 21 раз
Re: Arduino Mega Server
1. Чем код Алекса по парсингу запросов не устроил?Xseon писал(а):Alex'y respect и просьба или вопрос...
Как правильно обработать запрос вида http://ipAMS/index.htm?rgb=1&r=10&g=110&b=100&a=40
Я при находжении command="rgb" передаю в функцию setRGBA() параметр вида 1&r=10&g=110&b=100&a=40
Вот функция установки RGB в AMS:Код рабочий, НО при частом обращении из вне, контроллер виснет наглухо...с чем связано понять пока не удалось...может кто чего дельного подскажет или Alex допишет сам)))Код: Выделить всё
void setRGBA() { byte parsedParams=0; int r, g, b, a; unsigned char* buf = new unsigned char[32]; parameter.getBytes(buf, 32, 0); char* inputString = (char*)buf; parsedParams=0; char* buffer = strtok(inputString,"&"); if(buffer!=NULL){ for(buffer=strtok(NULL,"&"); buffer!=NULL; buffer=strtok(NULL,"&") ) { String buffer1= String(buffer); params[parsedParams].name= buffer1.substring(0,buffer1.indexOf('=')); params[parsedParams].value=strtoint(buffer1.substring(buffer1.indexOf('=')+1)); parsedParams++; // отмечаем сколько удалось распарсить } } r = params[0].value; g = params[1].value; b = params[2].value; a = params[3].value; color(led1, r, g, b); //Вызываем функцию установки цвета из стандартного пакета AMS }
2. Откуда код стащили?
3. Зачем столько указателей?
4. увидел
5. Проблема в "unsigned char* buf = new unsigned char[32];" - если не знаете, то зачем забивать кучу?
Последний раз редактировалось SPbDima Пн фев 01, 2016 8:23 pm, всего редактировалось 1 раз.
-
- Сообщения: 51
- Зарегистрирован: Ср сен 18, 2013 12:21 am
- Благодарил (а): 9 раз
- Поблагодарили: 7 раз
Re: Arduino Mega Server
1. Если вы штатным парсингом Алекса можете распарсить несколько параметров за раз, то подскажите как, был бы очень признателен.
2. С простор интернета и переделкой под себя.
3. Можно и без них, но увеличится объем резервируемой памяти.
4. Входящий параметр штатный
5. Я так понимаю меня спасет sizeof?
Спасибо за отклик тёска.
2. С простор интернета и переделкой под себя.
3. Можно и без них, но увеличится объем резервируемой памяти.
4. Входящий параметр штатный
Код: Выделить всё
parameter.getBytes(buf, 32, 0); // Этот штатный "parameter" типа String
Спасибо за отклик тёска.
-
- Сообщения: 113
- Зарегистрирован: Пн окт 19, 2015 8:27 am
- Благодарил (а): 9 раз
- Поблагодарили: 21 раз
Re: Arduino Mega Server
5. Нет, ты создал объект и его не удалил. Куча, очень опасная вещь, не надо её использовать без крайней надобности.
Код дам завтра.
Код дам завтра.
-
- Сообщения: 51
- Зарегистрирован: Ср сен 18, 2013 12:21 am
- Благодарил (а): 9 раз
- Поблагодарили: 7 раз
Re: Arduino Mega Server
Премного благодарен!
UPD Починил по наводке Димы! Действительно sizeof должным образом отрабатывает и не переполняет буффер!
Ну и рабочий код оставлю на всякий случай
Еще раз спасибо Диме!
UPD Починил по наводке Димы! Действительно sizeof должным образом отрабатывает и не переполняет буффер!
Ну и рабочий код оставлю на всякий случай
Код: Выделить всё
===Объявлено снаружи===
struct port_param_t{String name; int value;};
#define MAX_PARAMS 20 // сколько параметров максимально мы умеем парсить
port_param_t params[MAX_PARAMS];
===Объявлено снаружи===
void setRGBA() {
byte parsedParams=0;
int r, g, b, a;
unsigned char* buf = new unsigned char[parameter.length()]; // С sizeof(parameter) НЕ РАБОТАЕТ!!!
parameter.getBytes(buf, parameter.length()); // С sizeof(parameter) НЕ РАБОТАЕТ!!!
char* inputString = (char*)buf;
parsedParams=0;
char* buffer = strtok(inputString,"&");
if(buffer!=NULL){
for(buffer=strtok(NULL,"&"); buffer!=NULL; buffer=strtok(NULL,"&") )
{
String buffer1= String(buffer);
params[parsedParams].name= buffer1.substring(0,buffer1.indexOf('='));
params[parsedParams].value=strtoint(buffer1.substring(buffer1.indexOf('=')+1));
parsedParams++; // отмечаем сколько удалось распарсить
}
if(parsedParams>MAX_PARAMS-1)return; // больше нет места куда сохранять парсенное.
}
r = params[0].value;
g = params[1].value;
b = params[2].value;
a = params[3].value;
color(led1, r, g, b);
}
int strtoint(String str) // Процедура переобразования строки в число
{
int tempInt;
char rez[str.length()+1];
str.toCharArray(rez, sizeof(rez));
tempInt = atoi(rez);
return tempInt;
}
Последний раз редактировалось Xseon Пн фев 01, 2016 10:25 pm, всего редактировалось 3 раза.