Страница 134 из 326

Re: Arduino Mega Server

Добавлено: Вс мар 20, 2016 8:42 am
Alex
В текущей версии интерфейс управления светодиодными лентами находится в разработке, но цвет свечения ленты можно менять при помощи плиток «Управление светом»

http://hi-lab.ru/arduino-mega-server/do ... es/control
http://hi-lab.ru/arduino-mega-server/do ... ed-control

В 0.15 версии появится беспроводное управление лентой при помощи оборудования nooLite.

http://hi-lab.ru/arduino-mega-server/do ... oolite-led

Поменять названия кнопок можно в файле

control.htm

Изменить цвета можно в скетче, в модуле server_ajax

Код: Выделить всё

void setControl() {
  if (StrContains(HTTP_req, "light1=1")) {
    light1 = 1;
    red(led1, 127); // <------------------------------------------------------------------
  } 
  else if (StrContains(HTTP_req, "light1=0")) {
    light1 = 0;
    black(led1);
  }

  if (StrContains(HTTP_req, "light2=1")) {
    light2 = 1;
    blue(led1, 127); // <------------------------------------------------------------------
  } 
  else if (StrContains(HTTP_req, "light2=0")) {
    light2 = 0;
    black(led1);
  }

  if (StrContains(HTTP_req, "light3=1")) {
    light3 = 1;
    green(led1, 127); // <------------------------------------------------------------------
  } 
  else if (StrContains(HTTP_req, "light3=0")) {
    light3 = 0;
    black(led1);
  }

  if (StrContains(HTTP_req, "light4=1")) {
    light4 = 1;
    magenta(led1, 127); // <------------------------------------------------------------------
  } 
  else if (StrContains(HTTP_req, "light4=0")) {
    light4 = 0;
    black(led1);
  }

  if (StrContains(HTTP_req, "light5=1")) {
    light5 = 1;
    yellow(led1, 127); // <------------------------------------------------------------------
  } 
  else if (StrContains(HTTP_req, "light5=0")) {
    light5 = 0;
    black(led1);
  }     
} // setControl()  
Функции цветов свечения ленты (находятся в модуле leds)

Код: Выделить всё

// set color LED
void black  (byte pins[])         {analogWrite(pins[R], 0); analogWrite(pins[G], 0); analogWrite(pins[B], 0);}
void white  (byte pins[], byte v) {analogWrite(pins[R], v); analogWrite(pins[G], v); analogWrite(pins[B], v);}
void red    (byte pins[], byte v) {analogWrite(pins[R], v); analogWrite(pins[G], 0); analogWrite(pins[B], 0);}
void green  (byte pins[], byte v) {analogWrite(pins[R], 0); analogWrite(pins[G], v); analogWrite(pins[B], 0);}
void blue   (byte pins[], byte v) {analogWrite(pins[R], 0); analogWrite(pins[G], 0); analogWrite(pins[B], v);}
void yellow (byte pins[], byte v) {analogWrite(pins[R], v); analogWrite(pins[G], v); analogWrite(pins[B], 0);}
void magenta(byte pins[], byte v) {analogWrite(pins[R], v); analogWrite(pins[G], 0); analogWrite(pins[B], v);}
void cyan   (byte pins[], byte v) {analogWrite(pins[R], 0); analogWrite(pins[G], v); analogWrite(pins[B], v);}
void color  (byte pins[], byte r, byte g, byte b) {analogWrite(pins[R], r); analogWrite(pins[G], g); analogWrite(pins[B], b);}

Re: Arduino Mega Server

Добавлено: Вс мар 20, 2016 12:06 pm
allexmak1
Спасибо, еще столкнулся с таким моментом, возможно вы знали, что автоматизацию какого либо процесса нужно писать в Ардуино скетче, а не на JS. Так как JS требует постоянно открытой страничке на ПК.
Я использую планшет и после выключения подсветки стопорится страничка, скрипты в JS не работают.

Re: Arduino Mega Server

Добавлено: Пн мар 21, 2016 8:10 am
Alex
Спасибо, еще столкнулся с таким моментом, возможно вы знали, что автоматизацию какого либо процесса нужно писать в Ардуино скетче, а не на JS. Так как JS требует постоянно открытой страничке на ПК.
Это само-собой разумеется и так оно и сделано. Об этом написано на странице «Архитектура системы»

http://hi-lab.ru/arduino-mega-server/do ... chitecture

Цитата:

«Контроллер без подключения браузера

Это основной режим работы контроллера в котором он проводит 99% своего времени. Подключение браузера отсутствует, интерфейс не работает. Контроллер занимается своими прямыми обязанностями, т. е. обслуживает датчики и периферийные устройства. Также, в этом режиме контроллер осуществляет сетевые взаимодействия (принимает и отдаёт команды и информацию по сети).»
Я использую планшет и после выключения подсветки стопорится страничка, скрипты в JS не работают.
Трудно сказать в чём причина, у меня работает корректно.

Re: Arduino Mega Server

Добавлено: Вт мар 22, 2016 1:14 pm
allexmak1
еще вопрос, немогу разобратся как мне отправить данные (1...255) с переменной JS на мегу?

Re: Arduino Mega Server

Добавлено: Ср мар 23, 2016 7:58 am
Alex
еще вопрос, немогу разобратся как мне отправить данные (1...255) с переменной JS на мегу?
Посмотрите любой пример отправки и сделайте по аналогии. Например, в файле settings.js

Код: Выделить всё

  // send HTTP GET request with strCommands
  request.open("GET", "request_settings" + strLED1 + strLED2 +randomNoCache(), true);
отправляются значения переменных strLED1 и strLED2, а в модуле server_ajax они «ловятся»

Код: Выделить всё

  else if (StrContains(HTTP_req, "request_settings")) {
    sendXmlAnswer(cl);
    setControl();
    responseControl(cl);
  }
и

Код: Выделить всё

  if (StrContains(HTTP_req, "LED1=1")) {
    modeNetWork = MODE_MAJOR;
  } 
  else if (StrContains(HTTP_req, "LED1=0")) {
    modeNetWork = MODE_ONE;
  }

Re: Arduino Mega Server

Добавлено: Пт мар 25, 2016 6:30 pm
allexmak1
Спасибо работает, только немогу сообразить как сделать цикл, а то 100 значений для каждой переменной это не практично.

Код: Выделить всё

  
int variable1 = 0;
if (StrContains(HTTP_req, "var1=0a")) {
    variable1 = 0;
     } else if (StrContains(HTTP_req, "var1=1a")) {
      variable1 = 1;
    } else if (StrContains(HTTP_req, "var1=2a")) {
      variable1 = 2;
    } else if (StrContains(HTTP_req, "var1=3a")) {
      variable1 = 3;
    } else if (StrContains(HTTP_req, "var1=4a")) {
      variable1 = 4;
    } else if (StrContains(HTTP_req, "var1=5a")) {
      variable1 = 5;
    } else if (StrContains(HTTP_req, "var1=6a")) {
      variable1 = 6;
    } else if (StrContains(HTTP_req, "var1=7a")) {
      variable1 = 7;
    } else if (StrContains(HTTP_req, "var1=8a")) {
      variable1 = 8;
    } else if (StrContains(HTTP_req, "var1=9a")) {
      variable1 = 9;
    } else if (StrContains(HTTP_req, "var1=10a")) {
      variable1 = 10;
    }
*** Сообщение запрещено. Сообщение похоже на спам. ***

Re: Arduino Mega Server

Добавлено: Пт мар 25, 2016 6:34 pm
allexmak1
Работает, спасибо, вот только немогу разобратся с цыклом, а то 100 значений как то непрактично.

Код: Выделить всё

int variable1 = 0;
  if (StrContains(HTTP_req, "var1=0a")) {
    variable1 = 0;
     } else if (StrContains(HTTP_req, "var1=1a")) {
      variable1 = 1;
    } else if (StrContains(HTTP_req, "var1=2a")) {
      variable1 = 2;
    } else if (StrContains(HTTP_req, "var1=3a")) {
      variable1 = 3;
    } else if (StrContains(HTTP_req, "var1=4a")) {
      variable1 = 4;
    } else if (StrContains(HTTP_req, "var1=5a")) {
      variable1 = 5;
    } else if (StrContains(HTTP_req, "var1=6a")) {
      variable1 = 6;
    } else if (StrContains(HTTP_req, "var1=7a")) {
      variable1 = 7;
    } else if (StrContains(HTTP_req, "var1=8a")) {
      variable1 = 8;
    } else if (StrContains(HTTP_req, "var1=9a")) {
      variable1 = 9;
    } else if (StrContains(HTTP_req, "var1=10a")) {
      variable1 = 10;
    }
 
*** Сообщение запрещено. Сообщение похоже на спам. ***

Re: Arduino Mega Server

Добавлено: Сб мар 26, 2016 8:09 am
Alex
По идее, нужно не определять заранее 100 значений переменной, а один раз сделать парсинг любого значения из пары var=xxx. Парсить нужно переменную HTTP_req. Как конкретно это сделать не подскажу (у меня нет примеров), но идеи вы можете взять из функций

Код: Выделить всё

void parseCommands(EthernetClient cl) {
  int posBegin;
  int posEnd;
  int posParam;
  
  if (request.indexOf("?") >= 0) {
    posBegin = request.indexOf("?") + 1;
    posEnd = request.indexOf("HTTP");

    if (request.indexOf("=") >= 0) {
       posParam = request.indexOf("=");
       command = request.substring(posBegin, posParam);              
       parameter = request.substring(posParam + 1, posEnd - 1);              
    } else {
        command = request.substring(posBegin, posEnd - 1);              
        parameter = "";
      }

    Serialprint("command: "); Serial.println(command);
    Serialprint("parameter: "); Serial.println(parameter);
и

Код: Выделить всё

char StrContains(char *str, char *sfind) {
  char found = 0;
  char index = 0;
  char len;

  len = strlen(str);
  if (strlen(sfind) > len) {return 0;}
  
  while (index < len) {
    if (str[index] == sfind[found]) {
      found++;
      if (strlen(sfind) == found) {return 1;}
    } else {
        found = 0;
      }
    index++;
  }
  return 0;
}

Re: Arduino Mega Server

Добавлено: Сб мар 26, 2016 2:13 pm
allexmak1
Alex, мне конкретно это нужно для выставления времени включения и выключения какого либо прибора (конкретно с веб странички), и точную яркость светильников, так что думаю в будующем, это будет реализованно в проекте.

Re: Arduino Mega Server

Добавлено: Вт мар 29, 2016 2:19 pm
SPbDima
ledmax писал(а):По поводу выше сказанного насчёт отображения страницы в браузере-
У меня веб морда толком не работает - главная страница загружается - все остальные только текст без картинок и фонов. При этом с мажор домом связь норм, и отправляет и получает.
За не имением время толком не разбирался в этой проблеме - пока что использую сервер только для посылки и приёма гет запросов, но с большими планами на будущие...
Грешу на китайский шилд. Буду рад, если вы разберётесь с проблемой зависания вебморды..
Хоть вопрос был месяц назад, но отвечу:
У меня похожая ситуация (МД не использую), т.к. периодически загружается только страничка (без скриптов и стилей) спасает энное количество обновления сайта. Кто то писал про перегрев чипа 5100, так и у меня когда перестают доставляться пакеты для Даш - о чип можно обжечься.
Поэтому при проблеме с открытием страницы лезем в "инструменты разработчика" (в chrome: "ctrl+Shift+I") открываем закладку Network и смотрим как прогружается сайт. Если пакеты перестали доставляться, тогда проверяем температуру, а если данная беда постоянно, то нужен радиатор.
Ещё про проблему с Хромом вспомнил: При длительной работе у него (Хрома) забиваются сокеты и страница перестаёт открываться с сообщением, что "Ожидание сокета"(вроде звучит так. Пишу по памяти).