В одной теме два, извините, срача. Надо отдельный раздел создавать: Холивар. :)
единственное полезное дело - это почитать доводы обоих воинствующих сторон и что-то почерпнуть из сломанных копий. Не зря ж он их обо что-то сломали.
Цитата:
Просто я смотрю на автора темы и вижу, что по сути задачи, которые он решает - это некий прообраз системы умного дома. Для которой - ну совершенно глупо и неоправдано держать всю вебморду на одном МК, который, к тому же, занимается обслуживанием периферии.
Я наверно крамольную мысль выскажу, но прообраз - это точно сказано для систем на Ардуино. Человек принял осознанный выбор делать это так. И для его задач вполне достаточно будет такого решения, а не следовать вашим советам. Скорее всего, расширять её он не будет. Лучшее - враг хорошего. Если делать не прообраз, то от ардуины стоит отказаться на 95%, если не вовсе.
Цитата:
Будущее систем управения в уходе от централизации. Этот путь уже прошли "апаратчики", когда процессор всё сам делал, выступая и кунецом, и жнецом. Теперь переферия стала умной и почти всё делает самостоятельно. Точно так же устройства "умных домов" будут свои задачи решать самостоятельно, в т.ч. и по отображению информации, общаясь друг с другом системой сообщений.
Немного уточню. Распределенные системы были и ранее. Если говорить о IoT устройствах, то уход наблюдается. Умный дом в классическом же понимании строится и на централизованной системе, за одним отступлением, что незначительными командами датчики могут обмениваться между собой самостоятельно. Пока что это не так распространено, и жизненно важные решения пока что принимает контроллер.
Будущее систем управения в уходе от централизации. Этот путь уже прошли "апаратчики", когда процессор всё сам делал, выступая и кунецом, и жнецом. Теперь переферия стала умной и почти всё делает самостоятельно. Точно так же устройства "умных домов" будут свои задачи решать самостоятельно, в т.ч. и по отображению информации, общаясь друг с другом системой сообщений.
Немного уточню. Распределенные системы были и ранее. Если говорить о IoT устройствах, то уход наблюдается. Умный дом в классическом же понимании строится и на централизованной системе, за одним отступлением, что незначительными командами датчики могут обмениваться между собой самостоятельно. Пока что это не так распространено, и жизненно важные решения пока что принимает контроллер.
Пока-что. Я как раз говорил о перспективах. :) Несколько лет назад, работая в "провайдере" я у инвесторов пробивал финансирование на запуск в сеть ТВ. На меня хором орали, что я дурак и удушу всю полосу пропускания, что это нерентабельно, никому не надо и т.п. Один очень богатый чел не так давно грил 640кБ памяти это предел мечтаний и больше никогда не потребуется, а потом мы имели FAT-FAT32-eFAT, свистопляски с винтами на 3Тб, которые обогнали ОС... И это всё было совсем недавно. К тому же, умный дом - это не только включение/выключение печки и лампочек. :)
Централизованное управление проще логически. Это как в жизни - просто управлять глупыми и примитивными людьми, стадом, сложнее организовать независимые личности. :)
Никаких аякс и жиквери - зачем Вам чужие глюки? :) Я говорю о getElementById('...').value и innerHTML. Страница сидит в клинте постоянно, а обновлением данных и обменом с дуней занимается скрипт.
Как Вы храните HTML - в виде массива в eeprom? Так дунина иде вам после компиляции расскажет какой памяти и сколько поедено.
Кстати, для своих нужд написал молотилку, которая из HTML убирает лишние пробелы форматирования и создаёт массив. Если необходимо, могу выдать тут.
приведите пожалуйста пример getElementById('...').value и innerHTML., или хотя бы направьте куда нибудь. =)
Без перезагрузки страницы вам без аякса не обойтись, чтобы сделать запрос страницы с дуни, получить результаты и отобразить из, где надо. Как отобразить - простенький вариант без всяких фреймворков я показал. Как запросить по AJAX без фреймворков:
Без перезагрузки страницы вам без аякса не обойтись, чтобы сделать запрос страницы с дуни, получить результаты и отобразить из, где надо. Как отобразить - простенький вариант без всяких фреймворков я показал. Как запросить по AJAX без фреймворков:
Без перезагрузки страницы вам без аякса не обойтись, чтобы сделать запрос страницы с дуни, получить результаты и отобразить из, где надо. Как отобразить - простенький вариант без всяких фреймворков я показал. Как запросить по AJAX без фреймворков:
var Data = new XMLHttpRequest();
Data.open("GET", "ДуняДайДанные", true);
Data.onload = function () {
alert(Data.responseText);
};
Data.send();
Чего сказать-то хотели? XMLHTTPRequest - это и есть один из способов, который юзается для отправки запроса без перезагрузки страницы, сиречь - AJAX. К слову, чтоб вы знали - приведённый вами код - нереентерабельный, ибо взлетает не под всеми браузерами.
Опять вы со своими поверхностными знаниями, надоели уже...
Без перезагрузки страницы вам без аякса не обойтись, чтобы сделать запрос страницы с дуни, получить результаты и отобразить из, где надо. Как отобразить - простенький вариант без всяких фреймворков я показал. Как запросить по AJAX без фреймворков:
var Data = new XMLHttpRequest();
Data.open("GET", "ДуняДайДанные", true);
Data.onload = function () {
alert(Data.responseText);
};
Data.send();
Чего сказать-то хотели? XMLHTTPRequest - это и есть один из способов, который юзается для отправки запроса без перезагрузки страницы, сиречь - AJAX. К слову, чтоб вы знали - приведённый вами код - нереентерабельный, ибо взлетает не под всеми браузерами.
Опять вы со своими поверхностными знаниями, надоели уже...
Я не код привёл, а пример и далее ссылку для изучения . "Нереентерабельный"? Ну-ну... :)))
Никаких аякс и жиквери - зачем Вам чужие глюки? :) Я говорю о getElementById('...').value и innerHTML. Страница сидит в клинте постоянно, а обновлением данных и обменом с дуней занимается скрипт.
Как Вы храните HTML - в виде массива в eeprom? Так дунина иде вам после компиляции расскажет какой памяти и сколько поедено.
Кстати, для своих нужд написал молотилку, которая из HTML убирает лишние пробелы форматирования и создаёт массив. Если необходимо, могу выдать тут.
приведите пожалуйста пример getElementById('...').value и innerHTML., или хотя бы направьте куда нибудь. =)
В сети нашел примеры но они все аякс .
Когда-то давно-давно я изгалялся пытаясь читать данные как невидимую картинку или невидимый iframe. Что-то из того получилось, но было викинуто за ненадобностью.
обалденный ТРУД - проэкт толковый, входит по рейтингу в десятку лучших из всего интернета проэктов 2560+W5100 , автору терпения и удачи !!! я сам не профи в программировании, но по проэкту буду учить работу с кнопками и значениями !!! ура !!!
обалденный ТРУД - проэкт толковый, входит по рейтингу в десятку лучших из всего интернета проэктов 2560+W5100 , автору терпения и удачи !!! я сам не профи в программировании, но по проэкту буду учить работу с кнопками и значениями !!! ура !!!
Спасибо, давно не было меня тут, летний сезон прошел, теперь можно продолжить :)
ну и как полагается вопрос:
заказал модули расширения IO PCF8574 для подключение клавиатуры 4х4, и радиопульта на 12 каналов
все хорошо работает, но как только пытаюсь прочитать данные в прерывании, мега зависает и оживает только после ребута, похоже беда в библиотеке, может кто сталкивался с этим?
uservasil - скажите плиз, а вы умеете написать кнопку для страницы вебсервера, при нажатии на которую, она бы зеленела на 1 секунду, на выходе ардуино появлялся высокий уровень на 0,5 ... 1 секунды, и кнопка опять деактивировалась сама по себе, становилась серой, и уровень устанавливался низким ..... и система опять ожидала одиночного нажатия на такую кнопку ... Очень удобно для прямого управления через реле : гаражными воротами, кнопками на котле отопления, разными кнопочными меню устройств ..... потому что сейчас, если я раз нажму, и через секунду второй раз нажму, то всё работает как надо, но иногда бывает нажал, и тут сеть через 3G глюканула, и меню устройства от постоянного нажатия заколбасило куда то в сторону, и проблема возникает ..... заранее благодарю за ответ. Таких кнопок в проэктах я не встречал.
все хорошо работает, но как только пытаюсь прочитать данные в прерывании, мега зависает и оживает только после ребута, похоже беда в библиотеке, может кто сталкивался с этим?
У меня есть подобный проектик и там маленькая проблемка, котрую не могу победить (от незнания тонкостей HTML). Может сможете помочь?
После отправки GET запроса путем нажатия на кнопку, расположенную на форме, в адресной строке браузера появляется отправленый параметр, например "http://192.168.0.123/?y"
Но после авторефреша странички этот параметр пропадает.
А в моем случае рефреш странички происходит, но параметр остается на месте. Не пойму что влияет на это, почему он (параметр) остается?
Запускается все в правильном порядке. Поначалу весь этот код был в единой процедуре, но потом посмотрев ваш пример, решил разделить его на 3 части, так вроде легче ориентироваться.
Заменить нужно именно на заглавные буквы? Или дело в URL=Untitled-1.html ? Завтра с утра попробую. Правда не понятно, что в данном случае подставлять вместо Untitled-1.html, ведь этих файлов практически нет, весь ХТМЛ код в памяти контроллера.
работает, но почему то прерывание считывает данные со слейва только если строка Wire.requestFrom(56, 1); находится в loop(), отсюда смысл от прерывание пропадает, т.к. во время delay() прерывание не считывает данные, подскажите как решить данную проблему
все хорошо работает, но как только пытаюсь прочитать данные в прерывании, мега зависает и оживает только после ребута, похоже беда в библиотеке, может кто сталкивался с этим?
он и с delay() работает, но считывание происходит реже. Я указал тут delay() в замен другому коду который занимает процессорное время, т.е. во время delay(), прерывание срабатывает, но не считывается состояние слейва(I2C)
Пишите тут, в скором времени выложу к чему пришел этот проект в данный момент времени, много чего добавлено и часть урезано, думаю многим будет интересно и полезно
Ну привет всем! ;) давненько меня тут не было, ну что же, проект внедрен и работает по сей день, надо сказать очень стабильно, теперь уже очень редко вносятся изменения, за три с лишним года проблем со стабильностью не было от слова совсем! Много добавлено, многое переделано, добавлю немного фото, по мере возможности отвечу на вопросы.
Ни хера себе !!! Хоть поясни, что да как ? На чем сделано ? Что к чему ?
ну собственно на том с чего и начинал, т.е. MEGA+5100+DHT+DS18B20.
- убрал датчики атмосферного давления, расширители ввода\выводы PCF8575 и часы т.к мега зависала видимо из-за кривой работы I2C.(это было в самом начале больше к этому не возвращался потому что давление было не нужно, портов в итоге хватило но впритык, а часы встроены в Nextion которая делиться данными с мегой)
+GSM модуль Sim800 который позже был заменен на Sim900(UART1)
+ 3 радиомодуля по 4 канала каждый, для приема управления с радиовыключателей(очень удобно по дому раскиданы) не нужно лишний раз вставать.
+ TFT экран с управлением по тачу на локальном эл.шкафу(UART2)
+ экран Nextion у входа в дом(UART3)
+ датчики движения, датчик тока в шкафу, датчик газа на кухне, датчики протечки на кухне и в ванной
+ привод воды после гидроаккумулятора
+ MQTT+MojorDOMO
+ ESP8266(NodeMCU)(UART0) - Wifi+BLYNK (можно было Blynk сунуть и в мегу, но у него и так забот хватает)
Помогите сделать окна постоянными (не всплавающие) в коде из поста #78. Можно вниз страницы и объединить в одно окно, как в посте #64. У меня не получается.
В одной теме два, извините, срача. Надо отдельный раздел создавать: Холивар. :)
единственное полезное дело - это почитать доводы обоих воинствующих сторон и что-то почерпнуть из сломанных копий. Не зря ж он их обо что-то сломали.
Немного уточню. Распределенные системы были и ранее. Если говорить о IoT устройствах, то уход наблюдается. Умный дом в классическом же понимании строится и на централизованной системе, за одним отступлением, что незначительными командами датчики могут обмениваться между собой самостоятельно. Пока что это не так распространено, и жизненно важные решения пока что принимает контроллер.
Пока-что. Я как раз говорил о перспективах. :) Несколько лет назад, работая в "провайдере" я у инвесторов пробивал финансирование на запуск в сеть ТВ. На меня хором орали, что я дурак и удушу всю полосу пропускания, что это нерентабельно, никому не надо и т.п. Один очень богатый чел не так давно грил 640кБ памяти это предел мечтаний и больше никогда не потребуется, а потом мы имели FAT-FAT32-eFAT, свистопляски с винтами на 3Тб, которые обогнали ОС... И это всё было совсем недавно. К тому же, умный дом - это не только включение/выключение печки и лампочек. :)
Централизованное управление проще логически. Это как в жизни - просто управлять глупыми и примитивными людьми, стадом, сложнее организовать независимые личности. :)
Никаких аякс и жиквери - зачем Вам чужие глюки? :) Я говорю о getElementById('...').value и innerHTML. Страница сидит в клинте постоянно, а обновлением данных и обменом с дуней занимается скрипт.
Как Вы храните HTML - в виде массива в eeprom? Так дунина иде вам после компиляции расскажет какой памяти и сколько поедено.
Кстати, для своих нужд написал молотилку, которая из HTML убирает лишние пробелы форматирования и создаёт массив. Если необходимо, могу выдать тут.
приведите пожалуйста пример getElementById('...').value и innerHTML., или хотя бы направьте куда нибудь. =)
В сети нашел примеры но они все аякс .
Как-то так, навскидку:
<span id='mySpan'>Ta-da</span> <script type='text/javascript'> var e = document.getElementById('mySpan'); if(e) e.innerHTML = "<b>Javascript rocks!</b>"; </script>Проверил, работает.
Как-то так, навскидку:
<span id='mySpan'>Ta-da</span> <script type='text/javascript'> var e = document.getElementById('mySpan'); if(e) e.innerHTML = "<b>Javascript rocks!</b>"; </script>Проверил, работает.
вставил, переменная отображается, а как сделать так чтобы она обновлялась без перезагрузки страницы ума не прилажу =(
понимаю что нужен скрипт который будет запрашивать у дуни состояние пременной, или я не правилдьно понимаю?
вот кусок сокращенного говнокода, подскажите пожалуйста куда что нужно вставить
//ethernet #include <Ethernet.h> #include <SPI.h> //eeprom #include <EEPROM.h> //////////////////////////////////////////////////////////////////////// // WEB //////////////////////////////////////////////////////////////////////// byte ip[] = { 10, 16, 30, 2 }; //Manual setup only byte gateway[] = { 10, 16, 30, 3 }; //Manual setup only byte subnet[] = { 255, 255, 255, 0 }; //Manual setup only byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; EthernetServer server = EthernetServer(80); //default html port 80 //The number of outputs going to be switched. int outputQuantity = 24; //should not exceed 10 //Invert the output of the leds boolean outputInverted = true; //true or false //Html page refresh int refreshPage = 60; //default is 10sec. int outputAddress[24] = { 22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45}; //Allocate 10 spaces and name the output pin address. // Write the text description of the output channel String buttonText[24] = { "Дом 1 этаж","Дом 2 этаж","Кухня","Ванная","Баня 1 этаж","Баня 2 этаж","Калитка","Лестница","Веранда","Балкон","Причал","Кладовка","Гирлянда-1","Гирлянда-2","Дом 1 этаж","Дом 2 этаж","Кухня","Плита","у Входа","Ванная","Насосная","Улица","Баня","Кладовка"}; int twenty[] = {11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34}; int outp = 0; boolean printLastCommandOnce = false; boolean printButtonMenuOnce = false; boolean reading = false; boolean outputStatus[24]; //Create a boolean array for the maximum ammount. String rev = "V1.6"; int page=0; float temp1; float temp2; void setup(){ Serial.begin(9600); //запись состояний дискретных каналов for (int var = 0; var < outputQuantity; var++){ pinMode(outputAddress[var], OUTPUT); if(outputStatus[var] == 0) { if (outputInverted ==false){ digitalWrite(outputAddress[var], HIGH); } else{ digitalWrite(outputAddress[var], LOW); } } if(outputStatus[var] == 1){ if (outputInverted ==false){ digitalWrite(outputAddress[var], LOW); } else{ digitalWrite(outputAddress[var], HIGH); } } } // end for //Setting up the IP address. Comment out the one you dont need. Ethernet.begin(mac, ip, gateway, subnet); server.begin(); Serial.print("Server started at "); Serial.println(Ethernet.localIP()); } // end void setup() void loop(){ checkForClient(); } //////////////////////////////////////////////////////////////////////// //checkForClient Function //////////////////////////////////////////////////////////////////////// void checkForClient(){ EthernetClient client = server.available(); if (client) { // an http request ends with a blank line boolean currentLineIsBlank = true; boolean sentHeader = false; String command; int repeat=0; //String tcommand; while (client.connected()) { if (client.available()) { //read user input char c = client.read(); if(c == '*'){ printHtmlHeader(client); //call for html header and css printHtmlFooter(client); //sentHeader = true; break; } if(!sentHeader){ printHtmlHeader(client); //call for html header and css printHtmlButtonTitle(client); //print the button title //This is for the arduino to construct the page on the fly. sentHeader = true; } //if there was reading but is blank there was no reading if(reading && c == ' '){ reading = false; } //if there is a ? there was user input if(c == '?') { reading = true; //found the ?, begin reading the info command = F(""); // clear current command // tcommand = F(""); // clear current command } // if there was user input switch the relevant output if(reading){ //if user input is H set output to 1 if(c == 'H') { outp = 1; } //if user input is L set output to 0 if(c == 'L') { outp = 0; } if(c!='?'&&c!='H'&&c!='L') {command +=c;} repeat++; Serial.println(" "); Serial.print("repeat:"); Serial.print(repeat); if(repeat>=5){ if(command == "d11") {triggerPin(outputAddress[0], client, outp); Serial.println(" "); Serial.println("case 1 OK"); } if(command == "d12") {triggerPin(outputAddress[1], client, outp); Serial.println(" "); Serial.println("case 2 OK"); } if(command == "d13") {triggerPin(outputAddress[2], client, outp); Serial.println(" "); Serial.println("case 3 OK"); } if(command == "d14") {triggerPin(outputAddress[3], client, outp); Serial.println(" "); Serial.println("case 4 OK"); } if(command == "d15") {triggerPin(outputAddress[4], client, outp); Serial.println(" "); Serial.println("case 5 OK"); } if(command == "d16") {triggerPin(outputAddress[5], client, outp); Serial.println(" "); Serial.println("case 6 OK"); } if(command == "d17") {triggerPin(outputAddress[6], client, outp); Serial.println(" "); Serial.println("case 7 OK"); } if(command == "d18") {triggerPin(outputAddress[7], client, outp); Serial.println(" "); Serial.println("case 8 OK"); } if(command == "d19") {triggerPin(outputAddress[8], client, outp); Serial.println(" "); Serial.println("case 9 OK"); } if(command == "d20") {triggerPin(outputAddress[9], client, outp); Serial.println(" "); Serial.println("case 10 OK"); } if(command == "d21") {triggerPin(outputAddress[10], client, outp); Serial.println(" "); Serial.println("case 11 OK"); } if(command == "d22") {triggerPin(outputAddress[11], client, outp); Serial.println(" "); Serial.println("case 12 OK"); } if(command == "d23") {triggerPin(outputAddress[12], client, outp); Serial.println(" "); Serial.println("case 13 OK"); } if(command == "d24") {triggerPin(outputAddress[13], client, outp); Serial.println(" "); Serial.println("case 14 OK"); } if(command == "d25") {triggerPin(outputAddress[14], client, outp); Serial.println(" "); Serial.println("case 15 OK"); } if(command == "d26") {triggerPin(outputAddress[15], client, outp); Serial.println(" "); Serial.println("case 16 OK"); } if(command == "d27") {triggerPin(outputAddress[16], client, outp); Serial.println(" "); Serial.println("case 17 OK"); } if(command == "d28") {triggerPin(outputAddress[17], client, outp); Serial.println(" "); Serial.println("case 18 OK"); } if(command == "d29") {triggerPin(outputAddress[18], client, outp); Serial.println(" "); Serial.println("case 19 OK"); } if(command == "d30") {triggerPin(outputAddress[19], client, outp); Serial.println(" "); Serial.println("case 20 OK"); } if(command == "d31") {triggerPin(outputAddress[20], client, outp); Serial.println(" "); Serial.println("case 21 OK"); } if(command == "d32") {triggerPin(outputAddress[21], client, outp); Serial.println(" "); Serial.println("case 22 OK"); } if(command == "d33") {triggerPin(outputAddress[22], client, outp); Serial.println(" "); Serial.println("case 23 OK"); } if(command == "d34") {triggerPin(outputAddress[23], client, outp); Serial.println(" "); Serial.println("case 24 OK"); } if(command == "100"){ for (int var = 0; var < 14; var++){triggerPin(outputAddress[var], client, outp);} } if(command == "200"){ for (int var = 14; var < outputQuantity; var++){triggerPin(outputAddress[var], client, outp);} } if(command == "page1") {page=1; Serial.println(" "); Serial.println("page 1 OK"); } if(command == "page0") {page=0; Serial.println(" "); Serial.println("page 0 OK"); } }// end repeat }//end if(reading) //if user input was blank if (c == '\n' && currentLineIsBlank){ printLastCommandOnce = true; printButtonMenuOnce = true; triggerPin(777, client, outp); //Call to read input and print menu. 777 is used not to update any outputs break; } } // end if (client.available()) } // end whil Serial.println(" "); Serial.print("command:"); Serial.print(command); Serial.println(" "); Serial.println("----------"); printHtmlFooter(client); //Prints the html footer } } /////////////////////////////////////////////////////////////////////// //triggerPin Function //////////////////////////////////////////////////////////////////////// void triggerPin(int pin, EthernetClient client, int outp){ //Switching on or off outputs, reads the outputs and prints the buttons //Setting Outputs if (pin != 777){ if(outp == 1) { if (outputInverted ==false){ digitalWrite(pin, HIGH); } else{ digitalWrite(pin, LOW); } } if(outp == 0){ if (outputInverted ==false){ digitalWrite(pin, LOW); } else{ digitalWrite(pin, HIGH); } } Serial.println(" "); Serial.print("triggerPin:"); Serial.print(pin); Serial.print(" = "); Serial.println(outp); } //Refresh the reading of outputs readOutputStatuses(); //Prints the buttons if (printButtonMenuOnce == true){ printHtmlButtons(client); printButtonMenuOnce = false; } } //////////////////////////////////////////////////////////////////////// //readOutputStatuses Function //////////////////////////////////////////////////////////////////////// //Reading the Output Statuses void readOutputStatuses(){ for (int var = 0; var < outputQuantity; var++) { outputStatus[var] = digitalRead(outputAddress[var]); // Serial.print(outputStatus[var]); } } //////////////////////////////////////////////////////////////////////// //printHtmlButtons Function //////////////////////////////////////////////////////////////////////// void printHtmlButtons(EthernetClient client){ client.println(F("")); client.println(F("<FORM>")); //вывод таблиц узкая или широкая, page == 1 широкая if (page == 1){ client.println(F("<table border=\"0\" align=\"center\">")); client.println(F("<tr>")); client.println(F(" <td colspan=2>")); } //////////////////////////////////////////////////////////////////////////////// // всплывающие окна //////////////////////////////////////////////////////////////////////////////// //выыод первого окна client.println(F("<div id=\"parent_popup_click\">")); client.println(F(" <div id=\"popup_click\">")); client.println(F(" <h2>Управление овещением</h2>")); //client.println(F(" <p><center>")); //начало текста в окне client.println(F("<table>\n")); for (int var = 0; var < 14; var++) { //Print begining of row client.print(F("<tr>\n")); //Prints the button Text client.print(F(" <td><h5>")); client.print(buttonText[var]); client.print(F("</h5></td>\n")); //Prints the ON Buttons client.print(F(" <td><INPUT TYPE=\"button\" VALUE=\"ВКЛ ")); client.print(F("\" onClick=\"parent.location='/?H")); client.print(F("d")); client.print(twenty[var]); client.print(F("'\"></td>\n")); //Prints the OFF Buttons client.print(F(" <td><INPUT TYPE=\"button\" VALUE=\"ВЫКЛ")); client.print(F("\" onClick=\"parent.location='/?L")); client.print(F("d")); client.print(twenty[var]); client.print(F("'\"></td>\n")); //Print first part of the Circles or the LEDs if (outputStatus[var] == true ){ //If Output is ON if (outputInverted == false){ //and if output is not inverted client.print(F(" <td><div class='green-circle'><div class='glare'></div></div></td>\n")); //Print html for ON LED } else{ //else output is inverted then client.print(F(" <td><div class='black-circle'><div class='glare'></div></div></td>\n")); //Print html for OFF LED } } else //If Output is Off { if (outputInverted == false){ //and if output is not inverted client.print(F(" <td><div class='black-circle'><div class='glare'></div></div></td>\n")); //Print html for OFF LED } else{ //else output is inverted then client.print(F(" <td><div class='green-circle'><div class='glare'></div></div></td>\n")); //Print html for ON LED } } client.print(F("\n")); } // end for //Prints the ON All Pins Button client.print(F("<tr>\n <td colspan=2><INPUT TYPE=\"button\" VALUE=\"Включить ВСЁ")); client.print(F("\" onClick=\"parent.location='/?H100")); client.print(F("'\"></td>\n")); //Prints the OFF All Pins Button client.print(F(" <td colspan=2><INPUT TYPE=\"button\" VALUE=\"Выключить ВСЁ")); client.print(F("\" onClick=\"parent.location='/?L100")); client.print(F("'\"></td>\n <td></td>\n <td></td>\n</tr>\n")); //Prints save Button client.print(F("<tr>\n <td colspan=2><INPUT TYPE=\"button\" VALUE=\"Записать")); client.print(F("\" onClick=\"parent.location='/?save1")); client.print(F("'\"></td>\n")); //Prints reset Button client.print(F(" <td colspan=2><INPUT TYPE=\"button\" VALUE=\"Сбросить")); client.print(F("\" onClick=\"parent.location='/?reset1")); client.print(F("'\"></td>\n <td></td>\n <td></td>\n</tr>\n")); client.println(F("</table>\n")); //конец текста в вервом окне client.println(F(" <a class=\"close\" title=\"Закрыть\" onclick=\"document.getElementById('parent_popup_click').style.display='none';\">X</a>")); client.println(F(" </div>")); client.println(F(" </div>")); client.println(F("")); //вывод второго окна client.println(F(" <div id=\"parent_popup2_click\">")); client.println(F(" <div id=\"popup2_click\">")); client.println(F(" <h2>Управление нагрузками:</h2>")); //начало текста во втором окне client.println(F("<table>\n")); for (int var = 14; var < outputQuantity; var++) { //Print begining of row client.print(F("<tr>\n")); //Prints the button Text client.print(F(" <td><h5>")); client.print(buttonText[var]); client.print(F(" </h5></td>\n")); //Prints the ON Buttons client.print(F(" <td><INPUT TYPE=\"button\" VALUE=\"ВКЛ ")); client.print(F("\" onClick=\"parent.location='/?H")); client.print(F("d")); client.print(twenty[var]); client.print(F("'\"></td>\n")); //Prints the OFF Buttons client.print(F(" <td><INPUT TYPE=\"button\" VALUE=\"ВЫКЛ")); client.print(F("\" onClick=\"parent.location='/?L")); client.print(F("d")); client.print(twenty[var]); client.print(F("'\"></td>\n")); //Print first part of the Circles or the LEDs if (outputStatus[var] == true ){ //If Output is ON if (outputInverted == false){ //and if output is not inverted client.print(F(" <td><div class='green-circle'><div class='glare'></div></div></td>\n")); //Print html for ON LED } else{ //else output is inverted then client.print(F(" <td><div class='black-circle'><div class='glare'></div></div></td>\n")); //Print html for OFF LED } } else //If Output is Off { if (outputInverted == false){ //and if output is not inverted client.print(F(" <td><div class='black-circle'><div class='glare'></div></div></td>\n")); //Print html for OFF LED } else{ //else output is inverted then client.print(F(" <td><div class='green-circle'><div class='glare'></div></div></td>\n")); //Print html for ON LED } } client.print(F("</tr>\n")); } // end for //Prints the ON All Pins Button client.print(F("<tr>\n <td colspan=2><INPUT TYPE=\"button\" VALUE=\"Включить ВСЁ")); client.print(F("\" onClick=\"parent.location='/?H200")); client.print(F("'\"></td>\n")); //Prints the OFF All Pins Button client.print(F(" <td colspan=2><INPUT TYPE=\"button\" VALUE=\"Выключить ВСЁ")); client.print(F("\" onClick=\"parent.location='/?L200")); client.print(F("'\"></td>\n <td></td>\n <td></td>\n</tr>\n")); //Prints save Button client.print(F("<tr>\n <td colspan=2><INPUT TYPE=\"button\" VALUE=\"Записать")); client.print(F("\" onClick=\"parent.location='/?save2")); client.print(F("'\"></td>\n")); //Prints reset Button client.print(F(" <td colspan=2><INPUT TYPE=\"button\" VALUE=\"Сбросить")); client.print(F("\" onClick=\"parent.location='/?reset2")); client.print(F("'\"></td>\n <td></td>\n <td></td>\n</tr>\n")); client.println(F("</table>\n")); //конец текста во втором окне client.println(F(" <a class=\"close\" title=\"Закрыть\" onclick=\"document.getElementById('parent_popup2_click').style.display='none';\">X</a>")); client.println(F(" </div>")); client.println(F(" </div>")); client.println(F("")); // таблица кнопок управления client.println(F(" <table border=\"0\" align=\"center\" style=\"background-color:#f5f5f5\">")); //Prints window1 Button client.print(F(" <tr>\n <td colspan=2><INPUT TYPE=\"button\" VALUE=\"Управление освещением")); client.print(F("\" onclick=\"document.getElementById('parent_popup_click').style.display='block';\">")); client.print(F("</td>\n")); //Prints window2 Button client.print(F(" <td colspan=2><INPUT TYPE=\"button\" VALUE=\"Управление нагрузками")); client.print(F("\" onclick=\"document.getElementById('parent_popup2_click').style.display='block';\">")); client.print(F("</td>\n <td></td>\n <td></td>\n ")); client.println(F("</table>")); client.println(F("")); //вывод таблиц узкая или широкая, page == 1 широкая if (page == 1){ client.println(F("</td>")); client.println(F("</tr>")); client.println(F("<tr>")); client.println(F("<td height=\"86\">")); client.println(F("")); } client.println(F("<table border=\"0\" align=\"center\" style=\"background-color:#f5f5f5\">")); client.println(F("<tr>")); client.println(F(" <td></td>")); client.println(F(" <td><h3>улица</h3></td>")); client.println(F(" <td><h3>1 этаж</h3></td>")); client.println(F("</tr>")); client.println(F("<tr>")); client.print(F(" <td><h4>")); client.print(F("Температура:")); client.println(F("</h4></td>")); client.print(F(" <td align=\"center\">")); client.print(temp1); //отображение температуры client.println(F("°C</td>")); client.print(F(" <td align=\"center\">")); client.print(temp2); //отображение температуры client.println(F("°C</td>")); client.println(F("</tr>")); client.println(F("</table>")); client.println(F("")); if (page == 1){ client.println(F("</td>")); client.println(F("</tr>")); client.println(F("</table>")); } client.println(F("</FORM>")); } // end printHtmlButtons //////////////////////////////////////////////////////////////////////// //htmlHeader Function //////////////////////////////////////////////////////////////////////// void printHtmlHeader(EthernetClient client){ // send a standard http response header client.println(F("HTTP/1.1 200 OK")); client.println(F("Content-Type: text/html; charset=utf-8")); client.println(F("Connnection: close")); client.println(); client.println(F("<!DOCTYPE HTML>")); client.println(F("<head>")); // заголовок страницы client.println(F("<title>Контроль и управление домом</title>")); client.println(F("<meta name=\"description\" content=\"Контроль и управление домом\"/>")); // время обновления страницы client.print(F("<meta http-equiv=\"refresh\" content=\"")); client.print(refreshPage); client.println(F("; url=/\">")); // вставка данных стилей CSS client.println(F("<style type=\"text/css\">")); client.println(F("")); // как будет выглядеть страница графически client.println(F("html { height:100%; }")); client.println(F(" body {")); client.println(F(" height: 100%;")); client.println(F(" margin: 0;")); client.println(F(" font-family: helvetica, sans-serif;")); client.println(F(" -webkit-text-size-adjust: none;")); client.println(F(" }")); client.println(F("")); client.println(F("body {")); client.println(F(" -webkit-background-size: 100% 21px;")); client.println(F(" background-color: #c5ccd3;")); client.println(F(" background-image:")); client.println(F(" -webkit-gradient(linear, left top, right top,")); client.println(F(" color-stop(.75, transparent),")); client.println(F(" color-stop(.75, rgba(255,255,255,.1)) );")); client.println(F(" -webkit-background-size: 7px;")); client.println(F(" }")); client.println(F("")); client.println(F(".view {")); client.println(F(" min-height: 100%;")); client.println(F(" overflow: auto;")); client.println(F(" }")); client.println(F("")); client.println(F(".header-wrapper {")); //шапка страницы client.println(F(" height: 40px;")); client.println(F(" font-weight: bold;")); client.println(F(" text-shadow: rgba(0,0,0,0.7) 0 -1px 0;")); client.println(F(" border-top: solid 1px rgba(255,255,255,0.6);")); client.println(F(" border-bottom: solid 1px rgba(0,0,0,0.6);")); client.println(F(" color: #fff;")); client.println(F(" background-color: #8195af;")); client.println(F(" background-image:")); client.println(F(" -webkit-gradient(linear, left top, left bottom,")); client.println(F(" from(rgba(255,255,255,.4)),")); client.println(F(" to(rgba(255,255,255,.05)) ),")); client.println(F(" -webkit-gradient(linear, left top, left bottom,")); client.println(F(" from(transparent),")); client.println(F(" to(rgba(0,0,64,.1)) );")); client.println(F(" background-repeat: no-repeat;")); client.println(F(" background-position: top left, bottom left;")); client.println(F(" -webkit-background-size: 100% 21px, 100% 22px;")); client.println(F(" -webkit-box-sizing: border-box;")); client.println(F(" }")); client.println(F("")); client.println(F(".group-wrapper {")); // серый текст client.println(F(" color: #19191c;")); client.println(F(" font-weight: bold;")); client.println(F(" line-height: 1;")); client.println(F(" text-shadow: #fff 0 1px 0;")); client.println(F(" margin: 5px 5px 5px;")); client.println(F(" aling: center;")); client.println(F(" }")); client.println(F("")); client.println(F(".group-wrapper h2 {")); //крупный серый текст client.println(F(" font-size: 17px;")); client.println(F(" line-height: 0.8;")); client.println(F(" margin: 20px 10px 12px;")); client.println(F(" }")); client.println(F("")); client.println(F(".group-wrapper h3 {")); //мелкий серый текст client.println(F(" color: #4c566c;")); client.println(F(" font-size: 12px;")); client.println(F(" margin: 20px 10px 12px;")); client.println(F(" }")); client.println(F("")); client.println(F(".group-wrapper h4 {")); //крупный черный текст client.println(F(" color: #212121;")); client.println(F(" font-size: 14px;")); client.println(F(" text-shadow: #aaa 1px 1px 3px;")); client.println(F(" margin: 5px 5px 5px;")); client.println(F(" }")); client.println(F("")); client.println(F(".group-wrapper table {")); //таблицы client.println(F(" background-color: #fff;")); client.println(F(" -webkit-border-radius: 10px;")); client.println(F(" -moz-border-radius: 10px;")); client.println(F(" -khtml-border-radius: 10px;")); client.println(F(" border-radius: 10px;")); client.println(F(" font-size: 14px;")); client.println(F(" line-height: 10px;")); // ширина строк таблицы client.println(F(" margin: 5px 0 5px;")); // отступ строк таблицы client.println(F(" border: solid 1px #a9abae;")); client.println(F(" padding: 5px 3px 10px 3px;")); // отступ текста верх-права-низ-лево client.println(F(" margin-left:auto;")); client.println(F(" margin-right:auto;")); client.println(F(" -moz-transform :scale(1);")); //Code for Mozilla Firefox client.println(F(" -moz-transform-origin: 0 0;")); client.println(F(" }")); //how the green (ON) LED will look client.println(F(".green-circle {")); client.println(F(" display: block;")); client.println(F(" height: 23px;")); client.println(F(" width: 23px;")); client.println(F(" background-color: #0f0;")); client.println(F(" -moz-border-radius: 11px;")); client.println(F(" -webkit-border-radius: 11px;")); client.println(F(" -khtml-border-radius: 11px;")); client.println(F(" border-radius: 11px;")); client.println(F(" margin-left: 1px;")); client.println(F(" background-image: -webkit-gradient(linear, 0% 0%, 0% 90%, from(rgba(46, 184, 0, 0.8)), to(rgba(148, 255, 112, .9)));@")); client.println(F(" border: 2px solid #ccc;")); client.println(F(" -webkit-box-shadow: rgba(11, 140, 27, 0.5) 0px 10px 16px;")); client.println(F(" -moz-box-shadow: rgba(11, 140, 27, 0.5) 0px 10px 16px; /* FF 3.5+ */")); client.println(F(" box-shadow: rgba(11, 140, 27, 0.5) 0px 10px 16px; /* FF 3.5+ */")); client.println(F(" }")); client.println(F("")); //how the black (off)LED will look client.println(F(".black-circle {")); client.println(F(" display: block;")); client.println(F(" height: 23px;")); client.println(F(" width: 23px;")); client.println(F(" background-color: #040;")); client.println(F(" -moz-border-radius: 11px;")); client.println(F(" -webkit-border-radius: 11px;")); client.println(F(" -khtml-border-radius: 11px;")); client.println(F(" border-radius: 11px;")); client.println(F(" margin-left: 1px;")); client.println(F(" -webkit-box-shadow: rgba(11, 140, 27, 0.5) 0px 10px 16px;")); client.println(F(" -moz-box-shadow: rgba(11, 140, 27, 0.5) 0px 10px 16px; /* FF 3.5+ */")); client.println(F(" box-shadow: rgba(11, 140, 27, 0.5) 0px 10px 16px; /* FF 3.5+ */")); client.println(F(" }")); client.println(F("")); //this will add the glare to both of the LEDs client.println(F(" .glare {")); client.println(F(" position: relative;")); client.println(F(" top: 1;")); client.println(F(" left: 5px;")); client.println(F(" -webkit-border-radius: 10px;")); client.println(F(" -moz-border-radius: 10px;")); client.println(F(" -khtml-border-radius: 10px;")); client.println(F(" border-radius: 10px;")); client.println(F(" height: 1px;")); client.println(F(" width: 13px;")); client.println(F(" padding: 5px 0;")); client.println(F(" background-color: rgba(200, 200, 200, 0.25);")); client.println(F(" background-image: -webkit-gradient(linear, 0% 0%, 0% 95%, from(rgba(255, 255, 255, 0.7)), to(rgba(255, 255, 255, 0)));")); client.println(F(" }")); client.println(F("")); /////////////////////////////////////////////////////////////////////////// //CSS всплывающего окна /////////////////////////////////////////////////////////////////////////// client.println(F(" #parent_popup_click, #parent_popup2_click {")); client.println(F(" background-color: rgba(0, 0, 0, 0.8);")); client.println(F(" overflow-y: auto;")); client.println(F(" display: none;")); client.println(F(" position: fixed;")); client.println(F(" z-index: 99999;")); client.println(F(" top: 0;")); client.println(F(" right: 0;")); client.println(F(" bottom: 0;")); client.println(F(" left: 0;")); client.println(F(" }")); client.println(F("")); client.println(F(" #popup_click, #popup2_click { ")); client.println(F(" background: #fff;")); client.println(F(" max-width: 600px;")); client.println(F(" width:70%;")); client.println(F(" margin: 5% auto;")); client.println(F(" padding: 5px 20px 13px 20px;")); client.println(F(" border: 10px solid #ddd;")); client.println(F(" position: relative;")); client.println(F(" /*--CSS3 CSS3 Тени для Блока--*/")); client.println(F(" -webkit-box-shadow: 0px 0px 20px #000;")); client.println(F(" -moz-box-shadow: 0px 0px 20px #000;")); client.println(F(" box-shadow: 0px 0px 20px #000;")); client.println(F(" /*--CSS3 Закругленные углы--*/")); client.println(F(" -webkit-border-radius: 10px;")); client.println(F(" -moz-border-radius: 10px;")); client.println(F(" border-radius: 10px;")); client.println(F(" }")); client.println(F("")); client.println(F(" #popup h1, #popup_click h2, #popup2_click h2 {")); client.println(F(" font:28px Monotype Corsiva, Arial;")); client.println(F(" font-weight: bold;")); client.println(F(" text-align: center;")); client.println(F(" color: #008000;")); client.println(F(" text-shadow: 0 1px 3px rgba(0,0,0,.3);")); client.println(F(" }")); client.println(F("")); client.println(F(" #popup h2, #popup_click h5, #popup2_click h5 {")); client.println(F(" color: #008000;")); client.println(F(" font-size: 12px;")); client.println(F(" line-height: 1;")); client.println(F(" font-weight: bold;")); client.println(F(" text-shadow: 0 1px 3px rgba(0,0,0,.3);")); client.println(F(" margin: 0px 0px 0px;")); client.println(F(" }")); client.println(F("")); client.println(F(" /* кнопка закрытия */")); client.println(F(" .close {")); client.println(F(" background-color: rgba(0, 0, 0, 0.8);")); client.println(F(" border: 2px solid #ccc;")); client.println(F(" height: 24px;")); client.println(F(" line-height: 24px;")); client.println(F(" position: absolute;")); client.println(F(" right: -24px;")); client.println(F(" cursor: pointer;")); client.println(F(" text-align: center;")); client.println(F(" text-decoration: none;")); client.println(F(" color: rgba(255, 255, 255, 0.9);")); client.println(F(" font-size: 14px;")); client.println(F(" font-family: helvetica, arial;")); client.println(F(" text-shadow: 0 -1px rgba(0, 0, 0, 0.9);")); client.println(F(" top: -24px;")); client.println(F(" width: 24px;")); client.println(F(" -webkit-border-radius: 15px;")); client.println(F(" -moz-border-radius: 15px;")); client.println(F(" -ms-border-radius: 15px;")); client.println(F(" -o-border-radius: 15px;")); client.println(F(" border-radius: 15px;")); client.println(F(" -moz-box-shadow: 1px 1px 3px #000;")); client.println(F(" -webkit-box-shadow: 1px 1px 3px #000;")); client.println(F(" box-shadow: 1px 1px 3px #000;")); client.println(F(" }")); client.println(F("")); client.println(F(" .close:hover {")); client.println(F(" background-color: rgba(255, 69, 0, 0.8);")); client.println(F(" }")); client.println(F("")); //and finally this is the end of the style data and header client.println(F("</style>")); client.println(F("</head>")); //now printing the page itself client.println(F("<body>")); client.println(F("<div class=\"view\">")); client.println(F(" <div class=\"header-wrapper\">")); client.print(F(" <table border=\"0\" align=\"center\"><tr>\n <td>Стиль страницы:</td>\n <td><INPUT TYPE=\"button\" VALUE=\"широкая" "\" onClick=\"parent.location='/?page1""'\"></td>\n")); client.print(F(" <td><INPUT TYPE=\"button\" VALUE=\" узкая " "\" onClick=\"parent.location='/?page0""'\"></td>\n </tr>\n </table>\n")); client.println(F(" </div>")); client.println(F("")); } //end of htmlHeader //////////////////////////////////////////////////////////////////////// //htmlFooter Function //////////////////////////////////////////////////////////////////////// void printHtmlFooter(EthernetClient client){ //Set Variables Before Exiting printLastCommandOnce = false; printButtonMenuOnce = false; client.println(F("\n<h3 align=\"center\">©- Plagiary - <br> 774 KM - 2016 - ")); client.println(rev); client.println(F("</h3></div>\n</div>\n</body>\n</html>")); delay(1); // give the web browser time to receive the data client.stop(); // close the connection: Serial.println(" - Done, Closing Connection."); delay (2); //delay so that it will give time for client buffer to clear and does not repeat multiple pages. } //end of htmlFooter //////////////////////////////////////////////////////////////////////// //printHtmlButtonTitle Function //////////////////////////////////////////////////////////////////////// void printHtmlButtonTitle(EthernetClient client){ client.println(F(" <div class=\"group-wrapper\">")); client.print(F(" <h2 align=\"center\" >")); client.print(F(" Время: ")); client.print(F("</h2>")); client.println(); }Без перезагрузки страницы вам без аякса не обойтись, чтобы сделать запрос страницы с дуни, получить результаты и отобразить из, где надо. Как отобразить - простенький вариант без всяких фреймворков я показал. Как запросить по AJAX без фреймворков:
https://www.google.ru/search?q=ajax+%D0%B1%D0%B5%D0%B7+jquery&ie=utf-8&o...
Без перезагрузки страницы вам без аякса не обойтись, чтобы сделать запрос страницы с дуни, получить результаты и отобразить из, где надо. Как отобразить - простенький вариант без всяких фреймворков я показал. Как запросить по AJAX без фреймворков:
https://www.google.ru/search?q=ajax+%D0%B1%D0%B5%D0%B7+jquery&ie=utf-8&oe=utf-8&gws_rd=cr&ei=FG0sV7mnHoWzswHu65jIDA
Гм...
var Data = new XMLHttpRequest(); Data.open("GET", "ДуняДайДанные", true); Data.onload = function () { alert(Data.responseText); }; Data.send();http://xmlhttprequest.ru/
Без перезагрузки страницы вам без аякса не обойтись, чтобы сделать запрос страницы с дуни, получить результаты и отобразить из, где надо. Как отобразить - простенький вариант без всяких фреймворков я показал. Как запросить по AJAX без фреймворков:
https://www.google.ru/search?q=ajax+%D0%B1%D0%B5%D0%B7+jquery&ie=utf-8&oe=utf-8&gws_rd=cr&ei=FG0sV7mnHoWzswHu65jIDA
Гм...
var Data = new XMLHttpRequest(); Data.open("GET", "ДуняДайДанные", true); Data.onload = function () { alert(Data.responseText); }; Data.send();Чего сказать-то хотели? XMLHTTPRequest - это и есть один из способов, который юзается для отправки запроса без перезагрузки страницы, сиречь - AJAX. К слову, чтоб вы знали - приведённый вами код - нереентерабельный, ибо взлетает не под всеми браузерами.
Опять вы со своими поверхностными знаниями, надоели уже...
Без перезагрузки страницы вам без аякса не обойтись, чтобы сделать запрос страницы с дуни, получить результаты и отобразить из, где надо. Как отобразить - простенький вариант без всяких фреймворков я показал. Как запросить по AJAX без фреймворков:
https://www.google.ru/search?q=ajax+%D0%B1%D0%B5%D0%B7+jquery&ie=utf-8&oe=utf-8&gws_rd=cr&ei=FG0sV7mnHoWzswHu65jIDA
Гм...
var Data = new XMLHttpRequest(); Data.open("GET", "ДуняДайДанные", true); Data.onload = function () { alert(Data.responseText); }; Data.send();Чего сказать-то хотели? XMLHTTPRequest - это и есть один из способов, который юзается для отправки запроса без перезагрузки страницы, сиречь - AJAX. К слову, чтоб вы знали - приведённый вами код - нереентерабельный, ибо взлетает не под всеми браузерами.
Опять вы со своими поверхностными знаниями, надоели уже...
Я не код привёл, а пример и далее ссылку для изучения . "Нереентерабельный"? Ну-ну... :)))
Никаких аякс и жиквери - зачем Вам чужие глюки? :) Я говорю о getElementById('...').value и innerHTML. Страница сидит в клинте постоянно, а обновлением данных и обменом с дуней занимается скрипт.
Как Вы храните HTML - в виде массива в eeprom? Так дунина иде вам после компиляции расскажет какой памяти и сколько поедено.
Кстати, для своих нужд написал молотилку, которая из HTML убирает лишние пробелы форматирования и создаёт массив. Если необходимо, могу выдать тут.
приведите пожалуйста пример getElementById('...').value и innerHTML., или хотя бы направьте куда нибудь. =)
В сети нашел примеры но они все аякс .
Когда-то давно-давно я изгалялся пытаясь читать данные как невидимую картинку или невидимый iframe. Что-то из того получилось, но было викинуто за ненадобностью.
обалденный ТРУД - проэкт толковый, входит по рейтингу в десятку лучших из всего интернета проэктов 2560+W5100 , автору терпения и удачи !!! я сам не профи в программировании, но по проэкту буду учить работу с кнопками и значениями !!! ура !!!
обалденный ТРУД - проэкт толковый, входит по рейтингу в десятку лучших из всего интернета проэктов 2560+W5100 , автору терпения и удачи !!! я сам не профи в программировании, но по проэкту буду учить работу с кнопками и значениями !!! ура !!!
Спасибо, давно не было меня тут, летний сезон прошел, теперь можно продолжить :)
ну и как полагается вопрос:
заказал модули расширения IO PCF8574 для подключение клавиатуры 4х4, и радиопульта на 12 каналов
данные беру с помощью библотеки https://github.com/skywodd/pcf8574_arduino_library/tree/master/PCF8574
все хорошо работает, но как только пытаюсь прочитать данные в прерывании, мега зависает и оживает только после ребута, похоже беда в библиотеке, может кто сталкивался с этим?
#include <Wire.h> #include "PCF8574.h" PCF8574 pcf1; void setup() { Serial.begin(9600); Serial.println("Run Setup"); digitalWrite(2, HIGH); // прерывание attachInterrupt(0, RC, FALLING); // прерывание по спаду pcf1.begin(0x38); pcf1.pinMode(0, INPUT_PULLUP); // Вход pcf1.pinMode(1, INPUT_PULLUP); // Вход pcf1.pinMode(2, INPUT_PULLUP); // Вход pcf1.pinMode(3, INPUT_PULLUP); // Вход pcf1.pinMode(4, INPUT_PULLUP); // Вход pcf1.pinMode(5, INPUT_PULLUP); // Вход pcf1.pinMode(6, INPUT_PULLUP); // Вход pcf1.pinMode(7, INPUT_PULLUP); // Вход Serial.println("End Setup"); } void loop() { Serial.println(pcf1.digitalRead(0)); Serial.println(pcf1.digitalRead(1)); Serial.println(pcf1.digitalRead(2)); Serial.println(pcf1.digitalRead(3)); Serial.println(pcf1.digitalRead(4)); Serial.println(pcf1.digitalRead(5)); Serial.println(pcf1.digitalRead(6)); Serial.println(pcf1.digitalRead(7)); delay(1000); } void RC (){ Serial.println("attachInterrupt_RUN"); Serial.println(pcf1.digitalRead(0)); Serial.println("attachInterrupt_END"); }uservasil - скажите плиз, а вы умеете написать кнопку для страницы вебсервера, при нажатии на которую, она бы зеленела на 1 секунду, на выходе ардуино появлялся высокий уровень на 0,5 ... 1 секунды, и кнопка опять деактивировалась сама по себе, становилась серой, и уровень устанавливался низким ..... и система опять ожидала одиночного нажатия на такую кнопку ... Очень удобно для прямого управления через реле : гаражными воротами, кнопками на котле отопления, разными кнопочными меню устройств ..... потому что сейчас, если я раз нажму, и через секунду второй раз нажму, то всё работает как надо, но иногда бывает нажал, и тут сеть через 3G глюканула, и меню устройства от постоянного нажатия заколбасило куда то в сторону, и проблема возникает ..... заранее благодарю за ответ. Таких кнопок в проэктах я не встречал.
Не туда
заказал модули расширения IO PCF8574 для подключение клавиатуры 4х4, и радиопульта на 12 каналов
данные беру с помощью библотеки https://github.com/skywodd/pcf8574_arduino_library/tree/master/PCF8574
все хорошо работает, но как только пытаюсь прочитать данные в прерывании, мега зависает и оживает только после ребута, похоже беда в библиотеке, может кто сталкивался с этим?
#include <Wire.h> #include "PCF8574.h" PCF8574 pcf1; void setup() { Serial.begin(9600); Serial.println("Run Setup"); digitalWrite(2, HIGH); // прерывание attachInterrupt(0, RC, FALLING); // прерывание по спаду pcf1.begin(0x38); pcf1.pinMode(0, INPUT_PULLUP); // Вход pcf1.pinMode(1, INPUT_PULLUP); // Вход pcf1.pinMode(2, INPUT_PULLUP); // Вход pcf1.pinMode(3, INPUT_PULLUP); // Вход pcf1.pinMode(4, INPUT_PULLUP); // Вход pcf1.pinMode(5, INPUT_PULLUP); // Вход pcf1.pinMode(6, INPUT_PULLUP); // Вход pcf1.pinMode(7, INPUT_PULLUP); // Вход Serial.println("End Setup"); } void loop() { Serial.println(pcf1.digitalRead(0)); Serial.println(pcf1.digitalRead(1)); Serial.println(pcf1.digitalRead(2)); Serial.println(pcf1.digitalRead(3)); Serial.println(pcf1.digitalRead(4)); Serial.println(pcf1.digitalRead(5)); Serial.println(pcf1.digitalRead(6)); Serial.println(pcf1.digitalRead(7)); delay(1000); } void RC (){ Serial.println("attachInterrupt_RUN"); Serial.println(pcf1.digitalRead(0)); Serial.println("attachInterrupt_END"); }попробовал на другом железе, такая же проблема, прерывание из библиотеки не хочет работать...
для начала попробуйте сменить браузер
Пробовал хром и яндекс - одинаково. Строчка с параметром "http://192.168.0.123/?butFLW=ON" остается после авторефреша.
Пробовал хром и яндекс - одинаково. Строчка с параметром "http://192.168.0.123/?butFLW=ON" остается после авторефреша.
строчка рефреша правильно приписывается?
<meta http-equiv="refresh" content="60; url=/">html в студию)
Голого ХТМЛя нет, только в коде
void printHTMLBody(EthernetClient &wclient) { wclient.println(F("<p><strong>Подвал, приток</strong></p>")); wclient.println(F("<table width='50%' border='1' cellpadding='4'>")); wclient.println(F("<tr align='center' valign='center'>")); wclient.println(F("<td>Направление воздуха</td>")); wclient.println(F("<td>Температура, <SUP>о</SUP>C</td>")); wclient.println(F("</tr>")); wclient.println(F("<tr align='center' valign='center'>")); wclient.println(F("<td>Входящий</td>")); wclient.println(F("<td>")); wclient.println(sensor.T6); wclient.println(F("</td>")); wclient.println(F("</tr>")); wclient.println(F("<tr align='center' valign='center'>")); wclient.println(F("<td>Выходящий</td>")); wclient.println(F("<td>")); wclient.println(sensor.T5); wclient.println(F("</td>")); wclient.println(F("</tr>")); wclient.println(F("</table>")); wclient.println(F("<br> ")); //перенос на след. строчку /////////////////////////////////////////////////////////////////////////// wclient.println(F("<p><strong>Контроль температуры воздушного потока ")); if (flwControl.State) {wclient.println(F("(Активирован)"));} else {wclient.println(F("(Отключен)"));} wclient.println(F("</strong></p>")); wclient.println(F("<table width='50%' border='1' cellpadding='4'>")); wclient.println(F("<tr align='center' valign='center'>")); wclient.println(F("<td>Показатель</td>")); wclient.println(F("<td>Значение</td>")); wclient.println(F("<td>Температура вкл.</td>")); wclient.println(F("<td>Температура откл.</td>")); wclient.println(F("<td>Состояние</td>")); wclient.println(F("<td>Действие</td>")); wclient.println(F("</tr>")); wclient.println(F("<tr align='center' valign='center'>")); wclient.println(F("<td>Температура потока</td>")); wclient.println(F("<td>")); wclient.println(sensor.T11); wclient.println(F("</td>")); //////////////////////////////////////////////////// wclient.println(F("<td>")); wclient.println(F("<FORM method=get name='tflw1'> <INPUT type='int' name='tONflw' size=3 maxlength=2 value='")); wclient.println(flwControl.tFlowON); wclient.println(F("'><input type=submit value=Save></form>")); wclient.println(F("</td>\n")); wclient.println(F("<td>")); wclient.println(F("<FORM method=get name='tflw2'> <INPUT type='int' name='tOFFflw' size=3 maxlength=2 value='")); wclient.println(flwControl.tFlowOFF); wclient.println(F("'><input type=submit value=Save></form>")); wclient.println(F("</td>\n")); wclient.println(F("<td>")); if (emFlow) {wclient.println(F("Работает"));} else {wclient.println(F("Отключен"));} wclient.println(F("</td>")); //////////////////////////////////////////////////// wclient.println(F("<td><form method=get name='frmFLW'>")); butFLW(wclient); wclient.println(F("</form></td>\n")); //wclient.print(" <td><INPUT TYPE=\"button\" VALUE=\"ON" "\" onClick=\"parent.location='/?T1=5""'\"></td>"); //////////////////////////////////////////////////// wclient.println(F("</tr>")); wclient.println(F("</table>")); /////////////////////////////////////////////////////////////////////////// wclient.println(F("<p><strong>Крыша, вытяжка</strong></p>")); wclient.println(F("<table width='50%' border='1' cellpadding='4'>")); wclient.println(F("<tr align='center' valign='center'>")); wclient.println(F("<td>Направление воздуха</td>")); wclient.println(F("<td>Температура, <SUP>о</SUP>C</td>")); wclient.println(F("</tr>")); wclient.println(F("<tr align='center' valign='center'>")); wclient.println(F("<td>Входящий</td>")); wclient.println(F("<td>")); wclient.println(sensor.T1); wclient.println(F("</td>")); wclient.println(F("</tr>")); wclient.println(F("<tr align='center' valign='center'>")); wclient.println(F("<td>Выходящий</td>")); wclient.println(F("<td>")); wclient.println(sensor.T2); wclient.println(F("</td>")); wclient.println(F("</tr>")); wclient.println(F("</table>")); wclient.println(F("<br> ")); //перенос на след. строчку /////////////////////////////////////////////////////////////////////////// wclient.println(F("<p><strong>Крыша, кондиционер</strong></p>")); wclient.println(F("<table width='50%' border='1' cellpadding='4'>")); wclient.println(F("<tr align='center' valign='center'>")); wclient.println(F("<td>Направление воздуха</td>")); wclient.println(F("<td>Температура, <SUP>о</SUP>C</td>")); wclient.println(F("</tr>")); wclient.println(F("<tr align='center' valign='center'>")); wclient.println(F("<td>Входящий</td>")); wclient.println(F("<td>")); wclient.println(sensor.T3); wclient.println(F("</td>")); wclient.println(F("</tr>")); wclient.println(F("<tr align='center' valign='center'>")); wclient.println(F("<td>Выходящий</td>")); wclient.println(F("<td>")); wclient.println(sensor.T4); wclient.println(F("</td>")); wclient.println(F("</tr>")); wclient.println(F("</table>")); wclient.println(F("<br> ")); //перенос на след. строчку /////////////////////////////////////////////////////////////////////////// wclient.println(F("<p><strong>Подвал</strong></p>")); wclient.println(F("<table width='50%' border='1' cellpadding='4'>")); wclient.println(F("<tr align='center' valign='center'>")); wclient.println(F("<td>Помещение</td>")); wclient.println(F("<td>Температура, <SUP>о</SUP>C</td>")); wclient.println(F("</tr>")); wclient.println(F("<tr align='center' valign='center'>")); wclient.println(F("<td>Предпогреб</td>")); wclient.println(F("<td>")); wclient.println(sensor.T7); wclient.println(F("</td>")); wclient.println(F("</tr>")); wclient.println(F("<tr align='center' valign='center'>")); wclient.println(F("<td>Погреб</td>")); wclient.println(F("<td>")); wclient.println(sensor.T8); wclient.println(F("</td>")); wclient.println(F("</tr>")); wclient.println(F("<tr align='center' valign='center'>")); wclient.println(F("<td>Винный погреб</td>")); wclient.println(F("<td>")); wclient.println(sensor.T9); wclient.println(F("</td>")); wclient.println(F("</tr>")); wclient.println(F("<tr align='center' valign='center'>")); wclient.println(F("<td>Дверь</td>")); wclient.println(F("<td>")); wclient.println(sensor.T10); wclient.println(F("</td>")); wclient.println(F("</tr>")); wclient.println(F("</table>")); wclient.println(F("<br> ")); //перенос на след. строчку } void printHTMLFooter(EthernetClient &wclient) { wclient.println(F("<a href='gauge.htm' target='_blank'> Аналоговые индикаторы</a>")); wclient.println(F("<br> ")); //перенос на след. строчку wclient.println(F("<br> ")); //перенос на след. строчку wclient.println(F("<a href='https://thingspeak.com/channels/114415/private_show' target='_blank'> Графики температуры в Thing Speak, Канал 1 </a>")); wclient.println(F("<br> ")); //перенос на след. строчку wclient.println(F("<a href='https://thingspeak.com/channels/135609/private_show' target='_blank'> Графики температуры в Thing Speak, Канал 2 </a>")); wclient.println(F("<br> ")); //перенос на след. строчку wclient.println(F("<br> ")); //перенос на след. строчку wclient.println(F("<a href='filelist' target='_blank'> Список файлов на SD Card</a>")); wclient.println(F("<br> ")); //перенос на след. строчку wclient.println(F("<br> ")); //перенос на след. строчку wclient.println(F("<a href='sensorlist' target='_blank'> Список подключенных сенсоров</a>")); wclient.println(F("<br> ")); //перенос на след. строчку wclient.println(F("<hr />")); //линия===================================== //============================================================== wclient.println(F("\n</body>\n</html>")); delay(1); wclient.stop(); delay(2); } void printHTMLHeader(EthernetClient &wclient) { wclient.println("HTTP/1.1 200 OK"); wclient.println(F("Content-Type: text/html")); wclient.println(F("<meta charset='utf-8'>")); wclient.println("Connnection: close"); wclient.println(); wclient.println("<!DOCTYPE HTML>"); wclient.println("<head>"); wclient.print("<meta http-equiv='refresh' content='20'; url=/>"); wclient.println(F("<title>Ventilation Control System</title>")); wclient.println(F("<style type='text/css'>")); wclient.println(""); wclient.println(F(".cols {width: 260px;background: #ccc; padding: 5px;border: solid 1px black;float: right;height: 205px;margin-top: 20px;}")); // margin-top: 22px; wclient.println(F(".col1 {width: 250px;background: red;padding: 5px;border: solid 1px black; float: left;}")); // position: relative; top: 5px;left: 5px; wclient.println(F(".col2 {width: 250px;background: blue;padding: 5px;border: solid 1px black; float: left;}"));//position: relative; top: 5px;left: 10px; wclient.println(F(".col3 {width: 250px;background: green;padding: 5px;border: solid 1px black; float: left;}"));// position: relative; top: 5px;left: 15px; wclient.println(F("</style>")); wclient.println(F("</head> ")); /////////////////////////////////////////////////////////////////////////////// wclient.println(F("<body bgcolor='silver'>")); // onload='datetime()' wclient.println(F("<hr />")); wclient.println(F("<h2 align='center'> - Контроль системы вентиляции -")); wclient.println(F("</h2>")); wclient.println(F("<h4 align='center'> Текущее Время: ")); wclient.println(hour()); wclient.println(F(":")); wclient.println(minute()); wclient.println(F(" Время работы: ")); wclient.println(uptimeString); wclient.println(F(" Версия: ")); wclient.println(curVersion); wclient.println(F("</h4>")); wclient.println(F("<hr />")); //линия===================================== }тогда в начале проверь запускается ли все в правильном порядке
voidprintHTMLHeader(EthernetClient &wclient)voidprintHTMLBody(EthernetClient &wclient)voidprintHTMLFooter(EthernetClient &wclient)далее внимание на строчку 187
wclient.print("<meta http-equiv='refresh' content='20'; url=/>");нужно заменить наwclient.print("<META HTTP-EQUIV='REFRESH' CONTENT='20;URL=Untitled-1.html'>");где Untitled-1.html имя html файла (index.html или main.html и т.п.)
Запускается все в правильном порядке. Поначалу весь этот код был в единой процедуре, но потом посмотрев ваш пример, решил разделить его на 3 части, так вроде легче ориентироваться.
Заменить нужно именно на заглавные буквы? Или дело в URL=Untitled-1.html ? Завтра с утра попробую. Правда не понятно, что в данном случае подставлять вместо Untitled-1.html, ведь этих файлов практически нет, весь ХТМЛ код в памяти контроллера.
дело в URL=Untitled-1.html , что там напишите то и будет подгружаться, можете вписать адрес вебсервера (URL=http://192.168.2.2 например)
Разобрался, дело было в лишней кавычкев этой строке, вернее она была не на том месте.
ну неужто никто не сталкивался с прерыванием на I2C?!
попробовал обойтись без библиотеки PCD8574.h
#include <Wire.h> void setup() { Wire.begin(); digitalWrite(2, HIGH); // прерывание attachInterrupt(0, RC, FALLING); // прерывание по спаду pinMode(12, OUTPUT); pinMode(11, OUTPUT); } void loop() { Wire.requestFrom(56, 1); delay(1500); } void RC() { switch (Wire.read()) { case 127: digitalWrite(11, !digitalRead(11)); break; case 254: digitalWrite(12, !digitalRead(12)); break; } }работает, но почему то прерывание считывает данные со слейва только если строка Wire.requestFrom(56, 1); находится в loop(), отсюда смысл от прерывание пропадает, т.к. во время delay() прерывание не считывает данные, подскажите как решить данную проблему
Спасибо, давно не было меня тут, летний сезон прошел, теперь можно продолжить :)
ну и как полагается вопрос:
заказал модули расширения IO PCF8574 для подключение клавиатуры 4х4, и радиопульта на 12 каналов
данные беру с помощью библотеки https://github.com/skywodd/pcf8574_arduino_library/tree/master/PCF8574
все хорошо работает, но как только пытаюсь прочитать данные в прерывании, мега зависает и оживает только после ребута, похоже беда в библиотеке, может кто сталкивался с этим?
#include <Wire.h> #include "PCF8574.h" PCF8574 pcf1; void setup() { Serial.begin(9600); Serial.println("Run Setup"); digitalWrite(2, HIGH); // прерывание attachInterrupt(0, RC, FALLING); // прерывание по спаду pcf1.begin(0x38); pcf1.pinMode(0, INPUT_PULLUP); // Вход pcf1.pinMode(1, INPUT_PULLUP); // Вход pcf1.pinMode(2, INPUT_PULLUP); // Вход pcf1.pinMode(3, INPUT_PULLUP); // Вход pcf1.pinMode(4, INPUT_PULLUP); // Вход pcf1.pinMode(5, INPUT_PULLUP); // Вход pcf1.pinMode(6, INPUT_PULLUP); // Вход pcf1.pinMode(7, INPUT_PULLUP); // Вход Serial.println("End Setup"); } void loop() { Serial.println(pcf1.digitalRead(0)); Serial.println(pcf1.digitalRead(1)); Serial.println(pcf1.digitalRead(2)); Serial.println(pcf1.digitalRead(3)); Serial.println(pcf1.digitalRead(4)); Serial.println(pcf1.digitalRead(5)); Serial.println(pcf1.digitalRead(6)); Serial.println(pcf1.digitalRead(7)); delay(1000); } void RC (){ Serial.println("attachInterrupt_RUN"); Serial.println(pcf1.digitalRead(0)); Serial.println("attachInterrupt_END"); }а если delay() убрать работает?
он и с delay() работает, но считывание происходит реже. Я указал тут delay() в замен другому коду который занимает процессорное время, т.е. во время delay(), прерывание срабатывает, но не считывается состояние слейва(I2C)
Новой информации по проекту нет, подскажите как связаться с автором?
Пишите тут, в скором времени выложу к чему пришел этот проект в данный момент времени, много чего добавлено и часть урезано, думаю многим будет интересно и полезно
Интересно узнать чем дело продолжается.
Ждем продолжения.
Прошло уже три с лишним года. Интересно, проект ещё живой?
Проект очень интересный.
Автор, благодарю за проделанную работу. Вы ещё занимаетесь этим проектом ? Хочу повторить со своими изменениями.
Ну привет всем! ;) давненько меня тут не было, ну что же, проект внедрен и работает по сей день, надо сказать очень стабильно, теперь уже очень редко вносятся изменения, за три с лишним года проблем со стабильностью не было от слова совсем! Много добавлено, многое переделано, добавлю немного фото, по мере возможности отвечу на вопросы.
иоптваюмать!
Это очень круто!
На фото HMI панель или задействован планшет?
BLYNK - очень офигительная весч !!!
Спасибо)
Это Nextion 7 дюймовый
Ни хера себе !!! Хоть поясни, что да как ? На чем сделано ? Что к чему ?
Ни хера себе !!! Хоть поясни, что да как ? На чем сделано ? Что к чему ?
ну собственно на том с чего и начинал, т.е. MEGA+5100+DHT+DS18B20.
- убрал датчики атмосферного давления, расширители ввода\выводы PCF8575 и часы т.к мега зависала видимо из-за кривой работы I2C.(это было в самом начале больше к этому не возвращался потому что давление было не нужно, портов в итоге хватило но впритык, а часы встроены в Nextion которая делиться данными с мегой)
+GSM модуль Sim800 который позже был заменен на Sim900(UART1)
+ 3 радиомодуля по 4 канала каждый, для приема управления с радиовыключателей(очень удобно по дому раскиданы) не нужно лишний раз вставать.
+ TFT экран с управлением по тачу на локальном эл.шкафу(UART2)
+ экран Nextion у входа в дом(UART3)
+ датчики движения, датчик тока в шкафу, датчик газа на кухне, датчики протечки на кухне и в ванной
+ привод воды после гидроаккумулятора
+ MQTT+MojorDOMO
+ ESP8266(NodeMCU)(UART0) - Wifi+BLYNK (можно было Blynk сунуть и в мегу, но у него и так забот хватает)
пока все что вспомнил ;)
[+ экран Nextion у входа в дом(UART3)
А Некстион далеко от Меги? Как вы его питаете? Сейчас реализую подобный проект, поэтому интересно
[+ экран Nextion у входа в дом(UART3)
А Некстион далеко от Меги? Как вы его питаете? Сейчас реализую подобный проект, поэтому интересно
ну метров 7-8, питание и сигнал по одной витухе, скорость 57600
Помогите сделать окна постоянными (не всплавающие) в коде из поста #78. Можно вниз страницы и объединить в одно окно, как в посте #64. У меня не получается.
Ну собственно на том с чего и начинал, т.е. MEGA+5100+DHT+DS18B20.
+ MQTT+MojorDOMO
+ ESP8266(NodeMCU)(UART0) - Wifi+BLYNK (можно было Blynk сунуть и в мегу, но у него и так забот хватает)
пока все что вспомнил ;)
MojorDOMO на чем крутится?
Похоже автор снова ушёл на долго. А жаль.