Arduino Mega Server

Модератор: Alex

Android2i2
Сообщения: 18
Зарегистрирован: Вс фев 05, 2017 2:19 pm
Контактная информация:

Re: Arduino Mega Server

Сообщение Android2i2 »

Ох... И снова я со своими проблемами. >.<
Повесил 2 реле на 11 и 12 пин.
Код был культурно слизан с данного форума, но чуть-чуть под себя переделан.
SPOILERSPOILER_SHOW

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

#ifdef RELAYS_FEATURE
  byte RPIN[2] ={11,12};
  byte RCTRPIN[2]={11,12};
  int current_val[2];
  int old_val[2];

void relInit() {
  for (byte i=0; i<=1; i++){
pinMode(RCTRPIN[i],LOW);
}

  Serial.print("Relays module... ");
  modulRel = MODUL_ENABLE;
  Serial.print("started\n");
}

void rel_control() {
for (byte i=0; i<=1; i++) {
current_val[i]=digitalRead(RCTRPIN[i]);
if (old_val[i] != current_val[i]){
        if (digitalRead(RCTRPIN[i])== HIGH) {
          rel_sw(i, 1);
        }else {
          rel_sw(i, 0);
        }
old_val[i] = current_val[i];
}
}}

void rel_sw(byte num, byte stat) {
    if(stat==1) {
    digitalWrite(RPIN[num], HIGH);
      Serial.print("REL");
      Serial.print(num+1);
      Serial.print(": on\n");
      REL_state[num] = 1;
    } else {
    digitalWrite(RPIN[num], LOW);
      Serial.print("REL");
      Serial.print(num+1);
      Serial.print(": off\n");
      REL_state[num] = 0; 
    }
}
#endif
Ну и, как и со всеми другими железяками, для начала решил воткнуть свой модуль на уже готовую страницу управления.
По примеру leds добавил пару строк в Ajax.
SPOILERSPOILER_SHOW

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

    else if (StrContains(HTTP_req, "request_generic")) {sendXmlAnswer(cl); SetREL();         responseGeneric(cl);}
.
.
.
// Generic
void SetREL() {
    if (StrContains(HTTP_req, "REL1=1")) {
    REL_state[0] = 1;  // save LED state
    digitalWrite(11, HIGH);
  } else if (StrContains(HTTP_req, "REL1=0")) {
      REL_state[0] = 0;  // save LED state
      digitalWrite(11, LOW);
    }

    // REL 2 (pin 12)
  if (StrContains(HTTP_req, "REL2=1")) {
    REL_state[1] = 1;
    digitalWrite(12, HIGH);
  } else if (StrContains(HTTP_req, "REL2=0")) {
      REL_state[1] = 0;
      digitalWrite(12, LOW);
    }
}
В sample2 просто заменил два LED'a на свои REL.
SPOILERSPOILER_SHOW

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

var strREL1 = "";
var strLED3 = "";
var strLED4 = "";
var REL2_state = 0;
var LED4_state = 0;
...
 // REL 1
          if (this.responseXML.getElementsByTagName('REL')[0].childNodes[0].nodeValue === "checked") {
            document.REL_form.REL1.checked = true;
            document.getElementById("REL1").innerHTML = "ON";
          } else {
              document.REL_form.REL1.checked = false;
              document.getElementById("REL1").innerHTML = "OFF";
            }


          // REL 2
          if (this.responseXML.getElementsByTagName('REL')[2].childNodes[0].nodeValue === "on") {
            document.getElementById("REL2").innerHTML = "REL 2 is ON (D12)";
            document.getElementById("REL2").innerHTML = "ON";
            LED3_state = 1;
          } else {
              document.getElementById("REL2").innerHTML = "REL2 is OFF (D5)";
              document.getElementById("REL2").innerHTML = "OFF";
              REL2_state = 0;
            }

          // LED 4
          if (this.responseXML.getElementsByTagName('LED')[3].childNodes[0].nodeValue === "on") {
            document.getElementById("LED4").innerHTML = "LED 4 is ON (D3)";
            document.getElementById("ld3").innerHTML = "ON";
            LED4_state = 1;
          } else {
              document.getElementById("LED4").innerHTML = "LED 4 is OFF (D3)";
              document.getElementById("ld3").innerHTML = "OFF";
              LED4_state = 0;
            }
...
request.open("GET", "request_generic" + strREL1 + strREL2 + strLED3 + strLED4 + randomNoCache(), true);
  request.send(null);
  setTimeout('getArduinoIO()', 1000);
  strREL1 = "";
  strREL2 = "";
  strLED3 = "";
  strLED4 = "";
} // getArduinoIO()
...
unction GetCheck() {
  if (REL_form.REL1.checked) {
    strREL1 = "&REL1=1";
  } else {
      strREL1 = "&REL1=0";
    }
  }

/* -----------------------------------------
  service LEDs when button checked/unchecked
-------------------------------------------- */

function GetButton1() {
  if (REL2_state === 1) {
    REL2_state = 0;
    strREL2 = "&REL2=0";
  } else {
      REL2_state = 1;
      strREL2 = "&REL2=1";
    }
  }

function GetButton2() {
  if (LED4_state === 1) {
    LED4_state = 0;
    strLED4 = "&LED4=0";
  } else {
      LED4_state = 1;
      strLED4 = "&LED4=1";
    }
...
<h3>Светодиоды,<br>использующие чекбоксы</h3>
          <form id="check_RELs" name="REL_form">
            <input type="checkbox" name="REL1" value="0" onclick="GetCheck()" /> REL 1 (D11)<br /><br />
          </form>
        </div>
      </div>
      <div class="cell-4">
        <div class="box">
          <h3>Светодиоды,<br>использующие кнопки</h3>
          <button type="button" id="REL2" onclick="GetButton1()">REL 2 is OFF (D12)</button><br /><br />
          <button type="button" id="LED4" onclick="GetButton2()">LED 4 is OFF (D9)</button><br /><br />
        </div>
      </div>
Но...
  
Скриншот 13-02-2017 174424.jpg
Скриншот 13-02-2017 174424.jpg (476.15 КБ) 10342 просмотра
Как понимаете, ничего с моим реле не происходит, как бы яростно я не тыкал по кнопкам.
Направьте на путь истинный. :cry:
Что я опять сделал не так? :(
Arduino Mega 2560 + Ethernet 5100
Windows 10
IDE 1.6.5

Уровень знаний: Пещерный человек
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв

Re: Arduino Mega Server

Сообщение serghei »

Android2i2 писал(а):
SPOILERSPOILER_SHOW

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

          // REL 2
          if (this.responseXML.getElementsByTagName('REL')[2].childNodes[0].nodeValue === "on") {
            document.getElementById("REL2").innerHTML = "REL 2 is ON (D12)";
            document.getElementById("REL2").innerHTML = "ON"; //  сравни с LED - ID должен быть другой
            LED3_state = 1;
          } else {
              document.getElementById("REL2").innerHTML = "REL2 is OFF (D5)"; //  Наверное  надо D(12)
              document.getElementById("REL2").innerHTML = "OFF";
              REL2_state = 0;
            }

          // LED 4
          if (this.responseXML.getElementsByTagName('LED')[3].childNodes[0].nodeValue === "on") {
            document.getElementById("LED4").innerHTML = "LED 4 is ON (D3)";
            document.getElementById("ld3").innerHTML = "ON";
            LED4_state = 1;
          } else {
              document.getElementById("LED4").innerHTML = "LED 4 is OFF (D3)";
              document.getElementById("ld3").innerHTML = "OFF";
              LED4_state = 0;
            }
...
Что я опять сделал не так? :(
Сравни очень внимательно ID Реле и LED . Что то напутал.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am

Re: Arduino Mega Server

Сообщение alexsis_76 »

у вас парсер не работает скорей всего.
Android2i2
Сообщения: 18
Зарегистрирован: Вс фев 05, 2017 2:19 pm
Контактная информация:

Re: Arduino Mega Server

Сообщение Android2i2 »

alexsis_76 писал(а):у вас парсер не работает скорей всего.
Знать бы ещё, как заставить его работать...
Сунул реле просто в модуль LED и на чекбоксах вроде начало всё работать.
Решил слегка переделать под box-control на кнопках и...
Скриншот 15-02-2017 173919.jpg
Скриншот 15-02-2017 173919.jpg (650.8 КБ) 10398 просмотров
Всё опять пошло как-то не так.
Arduino Mega 2560 + Ethernet 5100
Windows 10
IDE 1.6.5

Уровень знаний: Пещерный человек
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am

Re: Arduino Mega Server

Сообщение alexsis_76 »

void parseRequest(EthernetClient cl) {
allowMarkers = false;

// index request
if (StrContains(HTTP_req, "GET / ") || StrContains(HTTP_req, "GET /index.htm")) {
if (openIndexFile(partSuffix(currentDesign))) {sendHtmlAnswer(cl);} else {webFile = SD.open(F("404.htm"));}
allowMarkers = true;
}
else if (StrContains(HTTP_req, GET)) {
// files requests
if (StrContains(HTTP_req, HTM_EXT)) {if (openWebFile()) {sendHtmlAnswer(cl);} else {webFile = SD.open(F("404.htm"));} allowMarkers = true;}
else if (StrContains(HTTP_req, ".css")) {if (openWebFile()) {sendCssAnswer(cl);} else {sendErrorAnswer("", cl);}}
else if (StrContains(HTTP_req, ".js")) {if (openWebFile()) {sendJsAnswer(cl);} else {sendErrorAnswer("", cl);}}
else if (StrContains(HTTP_req, ".pde")) {if (openWebFile()) {sendJsAnswer(cl);} else {sendErrorAnswer("", cl);}}
else if (StrContains(HTTP_req, ".png")) {if (openWebFile()) {sendPngAnswer(cl);} else {sendErrorAnswer("", cl);}}
else if (StrContains(HTTP_req, ".jpg")) {if (openWebFile()) {sendJpgAnswer(cl);} else {sendErrorAnswer("", cl);}}
else if (StrContains(HTTP_req, ".gif")) {if (openWebFile()) {sendGifAnswer(cl);} else {sendErrorAnswer("", cl);}}
else if (StrContains(HTTP_req, ".ico")) {if (openWebFile()) {sendIcoAnswer(cl);} else {sendErrorAnswer("", cl);}}
// Ajax requests
else if (StrContains(HTTP_req, "request_dash")) {sendXmlAnswer(cl); checkPage(); responseDash(cl);}
else if (StrContains(HTTP_req, "request_generic")) {sendXmlAnswer(cl); setLeds(); responseGeneric(cl);}
else if (StrContains(HTTP_req, "request_settings")){sendXmlAnswer(cl); setSettings(); responseSettings(cl);}
else if (StrContains(HTTP_req, "request_themes")) {sendXmlAnswer(cl); setTheme(); responseThemes(cl);}
else if (StrContains(HTTP_req, "request_control")) {sendXmlAnswer(cl); setControl(); responseControl(cl);}
else if (StrContains(HTTP_req, "request_noo")) {sendXmlAnswer(cl); setNoo(); responseNoo(cl);}
else if (StrContains(HTTP_req, "request_mr1132")) {sendXmlAnswer(cl); setMr1132(); responseMr1132(cl);}
else if (StrContains(HTTP_req, "req_el_control")) {sendXmlAnswer(cl); setElectroCtrl(); responseElectroCtrl(cl);}
else if (StrContains(HTTP_req, "req_el_freq")) {sendXmlAnswer(cl); checkOscill(); responseElectroFreq(cl);}
else if (StrContains(HTTP_req, "request_sdcard")) {sendXmlAnswer(cl); responseSd(cl);}
else if (StrContains(HTTP_req, "request_network")) {sendXmlAnswer(cl); responseNetwork(cl);}
else if (StrContains(HTTP_req, "request_nrf24")) {sendXmlAnswer(cl); responseNrf24(cl);}
} // else if (StrContains(HTTP_req, GET))
} // parseRequest ( ) вот собственно первая часть
управление светодиодами вызываем setLeds();
void setLeds() {
// LED 1 (pin 6)
if (StrContains(HTTP_req, "LED1=1")) {
LED_state[0] = 1; // save LED state
digitalWrite(6, HIGH);
} else if (StrContains(HTTP_req, "LED1=0")) {
LED_state[0] = 0; // save LED state
digitalWrite(6, LOW);
}

// LED 2 (pin 7)
if (StrContains(HTTP_req, "LED2=1")) {
LED_state[1] = 1;
digitalWrite(7, HIGH);
} else if (StrContains(HTTP_req, "LED2=0")) {
LED_state[1] = 0;
digitalWrite(7, LOW);
}

// LED 3 (pin 5)
if (StrContains(HTTP_req, "LED3=1")) {
LED_state[2] = 1;
digitalWrite(5, HIGH);
} else if (StrContains(HTTP_req, "LED3=0")) {
LED_state[2] = 0;
digitalWrite(5, LOW);
}

// LED 4 (pin 3)
if (StrContains(HTTP_req, "LED4=1")) {
LED_state[3] = 1;
digitalWrite(3, HIGH);
} else if (StrContains(HTTP_req, "LED4=0")) {
LED_state[3] = 0;
digitalWrite(3, LOW);
}
} // SetLEDs
Android2i2
Сообщения: 18
Зарегистрирован: Вс фев 05, 2017 2:19 pm
Контактная информация:

Re: Arduino Mega Server

Сообщение Android2i2 »

Что-то у меня подозрения, что меня хорошенечко так простебал мой компьютер.
Потому что на учебе у меня чекбоксы работали стабильно ("ТЫК" - Включил; "ТЫК" - Выключил).
А дома либо совсем не работает, либо работает с задержкой ~15сек...
Я уж все варианты перепробовал. А оказалось, что проблема не в AMS, а в моем ПК.
Arduino Mega 2560 + Ethernet 5100
Windows 10
IDE 1.6.5

Уровень знаний: Пещерный человек
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв

Re: Arduino Mega Server

Сообщение serghei »

А у меня вообще какая то беда с 016 версией для Меги. Установил дистрибутив , сервер поднялся ,но половина страниц пустые , в смысле без данных. На вкладке Электро вообще нет ни графиков , ни чисел. Я уже грешил на SD карту. Вернул обратно 015 - все идеально. Теперь осталось воткнуть плиточный интерфейс в 015 версию. Простое копирование TILE.HTM мало что дает - страница открывается , но так как в коде нет упоминания про альтернативный CSS ,она вся поломана.Сейчас пытаюсь привести в соответствие.
На форуме меня " забанили " , авторизацию надо проходить усиленную и вложения не могу добавлять.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Android2i2
Сообщения: 18
Зарегистрирован: Вс фев 05, 2017 2:19 pm
Контактная информация:

Re: Arduino Mega Server

Сообщение Android2i2 »

serghei писал(а):А у меня вообще какая то беда с 016 версией для Меги. Установил дистрибутив , сервер поднялся ,но половина страниц пустые , в смысле без данных. На вкладке Электро вообще нет ни графиков , ни чисел. Я уже грешил на SD карту. Вернул обратно 015 - все идеально. Теперь осталось воткнуть плиточный интерфейс в 015 версию. Простое копирование TILE.HTM мало что дает - страница открывается , но так как в коде нет упоминания про альтернативный CSS ,она вся поломана.Сейчас пытаюсь привести в соответствие.
На форуме меня " забанили " , авторизацию надо проходить усиленную и вложения не могу добавлять.
Там

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

%7 /* alt style */
Объявляет плиточный интерфейс.
А CSS собственно называется STYLE_A1. Он лежит в архиве в 0.16 (в других версиях не знаю), но на всякий случай прикреплю.
-------------------
P.S.
У меня сначала 0.16 вообще не хотел работать. Даже не загружался. Поставил 0.14ENG, загрузилась, но страницы вообще не грузились. Поставил обратно 0.16 и всё заработало.
Последнее время, мне всё чаще кажется, что я сомнамбула и по ночам приношу в жертву девственниц, чтобы всё работало. :lol:
Вложения
STYLE_A1.zip
(1.43 КБ) 225 скачиваний
Arduino Mega 2560 + Ethernet 5100
Windows 10
IDE 1.6.5

Уровень знаний: Пещерный человек
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв

Re: Arduino Mega Server

Сообщение serghei »

Да это я уже понял. У меня случайно объединились файлы на одной карте 015 и 016 версии. Теперь плиточный интерфейс открывается в 015 , но он поломанный. Добавить надо все недостающее )))
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Android2i2
Сообщения: 18
Зарегистрирован: Вс фев 05, 2017 2:19 pm
Контактная информация:

Re: Arduino Mega Server

Сообщение Android2i2 »

Удачи. Могу сегодня в вашу честь жертвенный костёр разжечь :D
Arduino Mega 2560 + Ethernet 5100
Windows 10
IDE 1.6.5

Уровень знаний: Пещерный человек
Ответить