Web-сервер для MEGA+5100+DHT+DS18B20

Artemiy
Offline
Зарегистрирован: 20.10.2014

В одной теме два, извините, срача. Надо отдельный раздел создавать: Холивар. :)

единственное полезное дело - это почитать доводы обоих воинствующих сторон и что-то почерпнуть из сломанных копий. Не зря ж он их обо что-то сломали. 

Цитата:
Просто я смотрю на автора темы и вижу, что по сути задачи, которые он решает - это некий прообраз системы умного дома. Для которой - ну совершенно глупо и неоправдано держать всю вебморду на одном МК, который, к тому же, занимается обслуживанием периферии.
Я наверно крамольную мысль выскажу, но прообраз - это точно сказано для систем на Ардуино. Человек принял осознанный выбор делать это так. И для его задач вполне достаточно будет такого решения, а не следовать вашим советам. Скорее всего, расширять её он не будет. Лучшее - враг хорошего. Если делать не прообраз, то от ардуины стоит отказаться на 95%, если не вовсе.

Цитата:
Будущее систем управения в уходе от централизации. Этот путь уже прошли "апаратчики", когда процессор всё сам делал, выступая и кунецом, и жнецом. Теперь переферия стала умной и почти всё делает самостоятельно. Точно так же устройства "умных домов" будут свои задачи решать самостоятельно, в т.ч. и по отображению информации, общаясь друг с другом системой сообщений.
Немного уточню. Распределенные системы были и ранее. Если говорить о IoT устройствах, то уход наблюдается. Умный дом в классическом же понимании строится и на централизованной системе, за одним отступлением, что незначительными командами датчики могут обмениваться между собой самостоятельно. Пока что это не так распространено, и жизненно важные решения пока что принимает контроллер. 

faeton
faeton аватар
Offline
Зарегистрирован: 21.03.2016

Artemiy пишет:

Цитата:
Будущее систем управения в уходе от централизации. Этот путь уже прошли "апаратчики", когда процессор всё сам делал, выступая и кунецом, и жнецом. Теперь переферия стала умной и почти всё делает самостоятельно. Точно так же устройства "умных домов" будут свои задачи решать самостоятельно, в т.ч. и по отображению информации, общаясь друг с другом системой сообщений.

Немного уточню. Распределенные системы были и ранее. Если говорить о IoT устройствах, то уход наблюдается. Умный дом в классическом же понимании строится и на централизованной системе, за одним отступлением, что незначительными командами датчики могут обмениваться между собой самостоятельно. Пока что это не так распространено, и жизненно важные решения пока что принимает контроллер. 

Пока-что. Я как раз говорил о перспективах. :) Несколько лет назад, работая в "провайдере" я у инвесторов пробивал финансирование на запуск в сеть ТВ. На меня хором орали, что я дурак и удушу всю полосу пропускания, что это нерентабельно, никому не надо и т.п. Один очень богатый чел не так давно грил 640кБ памяти это предел мечтаний и больше никогда не потребуется, а потом мы имели FAT-FAT32-eFAT, свистопляски с винтами на 3Тб, которые обогнали ОС... И это всё было совсем недавно. К тому же, умный дом - это не только включение/выключение печки и лампочек. :)

Централизованное управление проще логически. Это как в жизни - просто управлять глупыми и примитивными людьми, стадом, сложнее организовать независимые личности. :)

uservasil
Offline
Зарегистрирован: 09.07.2015

faeton пишет:

Никаких аякс и жиквери - зачем Вам чужие глюки? :) Я говорю о getElementById('...').value и innerHTML. Страница сидит в клинте постоянно, а обновлением данных и обменом с дуней занимается скрипт.

Как Вы храните HTML - в виде массива в eeprom? Так дунина иде вам после компиляции расскажет какой памяти и сколько поедено.

Кстати, для своих нужд написал молотилку, которая из HTML убирает лишние пробелы форматирования и создаёт массив. Если необходимо, могу выдать тут.

приведите пожалуйста пример getElementById('...').value и innerHTML., или хотя бы направьте куда нибудь. =)

В сети нашел примеры но они все аякс .

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Как-то так, навскидку:

<span id='mySpan'>Ta-da</span>

<script type='text/javascript'>

var e = document.getElementById('mySpan');

if(e) e.innerHTML = "<b>Javascript rocks!</b>";

</script>

Проверил, работает.

 

uservasil
Offline
Зарегистрирован: 09.07.2015

DIYMan пишет:

Как-то так, навскидку:

<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("&deg;C</td>"));
  client.print(F(" <td align=\"center\">"));
  client.print(temp2);           //отображение температуры 
  client.println(F("&deg;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\">&copy;- 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();
          
}

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Без перезагрузки страницы вам без аякса не обойтись, чтобы сделать запрос страницы с дуни, получить результаты и отобразить из, где надо. Как отобразить - простенький вариант без всяких фреймворков я показал. Как запросить по AJAX без фреймворков:

https://www.google.ru/search?q=ajax+%D0%B1%D0%B5%D0%B7+jquery&ie=utf-8&o...

faeton
faeton аватар
Offline
Зарегистрирован: 21.03.2016

DIYMan пишет:

Без перезагрузки страницы вам без аякса не обойтись, чтобы сделать запрос страницы с дуни, получить результаты и отобразить из, где надо. Как отобразить - простенький вариант без всяких фреймворков я показал. Как запросить по 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();

 

faeton
faeton аватар
Offline
Зарегистрирован: 21.03.2016
DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

faeton пишет:

DIYMan пишет:

Без перезагрузки страницы вам без аякса не обойтись, чтобы сделать запрос страницы с дуни, получить результаты и отобразить из, где надо. Как отобразить - простенький вариант без всяких фреймворков я показал. Как запросить по 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. К слову, чтоб вы знали - приведённый вами код - нереентерабельный, ибо взлетает не под всеми браузерами.

Опять вы со своими поверхностными знаниями, надоели уже...

faeton
faeton аватар
Offline
Зарегистрирован: 21.03.2016

DIYMan пишет:

faeton пишет:

DIYMan пишет:

Без перезагрузки страницы вам без аякса не обойтись, чтобы сделать запрос страницы с дуни, получить результаты и отобразить из, где надо. Как отобразить - простенький вариант без всяких фреймворков я показал. Как запросить по 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. К слову, чтоб вы знали - приведённый вами код - нереентерабельный, ибо взлетает не под всеми браузерами.

Опять вы со своими поверхностными знаниями, надоели уже...

Я не код привёл, а пример и далее ссылку для изучения .  "Нереентерабельный"? Ну-ну... :)))

faeton
faeton аватар
Offline
Зарегистрирован: 21.03.2016

uservasil пишет:

faeton пишет:

Никаких аякс и жиквери - зачем Вам чужие глюки? :) Я говорю о getElementById('...').value и innerHTML. Страница сидит в клинте постоянно, а обновлением данных и обменом с дуней занимается скрипт.

Как Вы храните HTML - в виде массива в eeprom? Так дунина иде вам после компиляции расскажет какой памяти и сколько поедено.

Кстати, для своих нужд написал молотилку, которая из HTML убирает лишние пробелы форматирования и создаёт массив. Если необходимо, могу выдать тут.

приведите пожалуйста пример getElementById('...').value и innerHTML., или хотя бы направьте куда нибудь. =)

В сети нашел примеры но они все аякс .

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

Shrotnet
Offline
Зарегистрирован: 29.07.2016

обалденный ТРУД - проэкт толковый, входит по рейтингу в десятку лучших из всего интернета проэктов 2560+W5100 , автору терпения и удачи !!! я сам не профи в программировании, но по проэкту буду учить работу с кнопками и значениями !!! ура !!!

uservasil
Offline
Зарегистрирован: 09.07.2015

Shrotnet пишет:

обалденный ТРУД - проэкт толковый, входит по рейтингу в десятку лучших из всего интернета проэктов 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");

}

 

Shrotnet
Offline
Зарегистрирован: 29.07.2016

uservasil - скажите плиз, а вы умеете написать кнопку для страницы вебсервера, при нажатии на которую, она бы зеленела на 1 секунду, на выходе ардуино появлялся высокий уровень на 0,5 ... 1 секунды, и кнопка опять деактивировалась сама по себе, становилась серой, и уровень устанавливался низким ..... и система опять ожидала одиночного нажатия на такую кнопку ... Очень удобно для прямого управления через реле : гаражными воротами, кнопками на котле отопления, разными кнопочными меню устройств ..... потому что сейчас, если я раз нажму, и через секунду второй раз нажму, то всё работает как надо, но иногда бывает нажал, и тут сеть через 3G глюканула, и меню устройства от постоянного нажатия заколбасило куда то в сторону, и проблема возникает ..... заранее благодарю за ответ. Таких кнопок в проэктах я не встречал.

phoenixoid
Offline
Зарегистрирован: 14.07.2015

Не туда

uservasil
Offline
Зарегистрирован: 09.07.2015

uservasil пишет:

заказал модули расширения 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");

}

 

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

alexvs
Offline
Зарегистрирован: 22.07.2014
uservasil  вы еще в теме?
 
У меня есть подобный проектик и там маленькая проблемка, котрую не могу победить (от незнания тонкостей HTML). Может сможете помочь?
 
После отправки GET запроса путем нажатия на кнопку, расположенную на  форме, в адресной строке браузера появляется отправленый параметр, например  "http://192.168.0.123/?y"
 
Но после авторефреша странички этот параметр пропадает.
А в моем случае рефреш странички происходит, но параметр остается на месте. Не пойму что влияет на это, почему он (параметр) остается?

 

uservasil
Offline
Зарегистрирован: 09.07.2015

для начала попробуйте сменить браузер

alexvs
Offline
Зарегистрирован: 22.07.2014

Пробовал хром и яндекс - одинаково. Строчка с параметром "http://192.168.0.123/?butFLW=ON" остается после авторефреша.

 

 

uservasil
Offline
Зарегистрирован: 09.07.2015

alexvs пишет:

Пробовал хром и яндекс - одинаково. Строчка с параметром "http://192.168.0.123/?butFLW=ON" остается после авторефреша.

строчка рефреша правильно приписывается?

<meta http-equiv="refresh" content="60; url=/">

html в студию)

alexvs
Offline
Зарегистрирован: 22.07.2014

Голого ХТМЛя нет, только в коде

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("&nbsp;&nbsp;&nbsp;Время работы: "));
  wclient.println(uptimeString);
  wclient.println(F("&nbsp;&nbsp;&nbsp;Версия: "));
  wclient.println(curVersion);          
  wclient.println(F("</h4>"));
  wclient.println(F("<hr />"));  //линия=====================================          
}

 

uservasil
Offline
Зарегистрирован: 09.07.2015

тогда в начале проверь запускается ли все в правильном порядке

void printHTMLHeader(EthernetClient &wclient)

void printHTMLBody(EthernetClient &wclient)

void printHTMLFooter(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 и т.п.)

alexvs
Offline
Зарегистрирован: 22.07.2014

Запускается все в правильном порядке. Поначалу весь этот код был в единой процедуре, но потом посмотрев ваш пример, решил разделить его на 3 части, так вроде легче ориентироваться.

Заменить нужно именно на заглавные буквы? Или дело в URL=Untitled-1.html ? Завтра с утра попробую. Правда не понятно, что в данном случае подставлять вместо Untitled-1.html, ведь этих файлов практически нет, весь ХТМЛ код в памяти контроллера.

uservasil
Offline
Зарегистрирован: 09.07.2015

дело в URL=Untitled-1.html , что там напишите то и будет подгружаться, можете вписать адрес вебсервера (URL=http://192.168.2.2 например)

alexvs
Offline
Зарегистрирован: 22.07.2014

Разобрался, дело было в лишней кавычкев этой строке, вернее она была не на том месте.

uservasil
Offline
Зарегистрирован: 09.07.2015

ну неужто никто не сталкивался с прерыванием на 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() прерывание не считывает данные, подскажите как решить данную проблему

 

Kest430
Offline
Зарегистрирован: 21.06.2016

uservasil пишет:

 

Спасибо, давно не было меня тут, летний сезон прошел, теперь можно продолжить :)

ну и как полагается вопрос:

заказал модули расширения 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() убрать работает?

uservasil
Offline
Зарегистрирован: 09.07.2015

он и с delay() работает, но считывание происходит реже. Я указал тут delay() в замен другому коду который занимает процессорное время, т.е. во время delay(), прерывание срабатывает, но не считывается состояние слейва(I2C)

msserg
Offline
Зарегистрирован: 18.03.2017

Новой информации по проекту нет, подскажите как связаться с автором?

uservasil
Offline
Зарегистрирован: 09.07.2015

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

Andrey_tolstopuz
Offline
Зарегистрирован: 26.07.2016

Интересно узнать чем дело продолжается.

macc
Offline
Зарегистрирован: 06.10.2016

Ждем продолжения.