Arduino + Adobe Flash

leshak
Offline
Зарегистрирован: 29.09.2011

Вообщем попробуйте

<input id="curtain_stop" type="button" data-icon="delete" data-iconpos="left"
2
value="Stop">

сделать.

мне это самым вероятным кажется.

alexey_and
Offline
Зарегистрирован: 03.03.2013

спасибо, вечером попробую :)

другой адрес - потому что страница на отдельном сервере лежит. еще у меня было подозрение, что ардуина должна что-то отвечать на запрос. может такое быть?

leshak
Offline
Зарегистрирован: 29.09.2011

alexey_and пишет:

другой адрес - потому что страница на отдельном сервере лежит.

Ну да... и есть подозрение, что вы шлете свой запрос этому серверу, а не ардуине. Если тестить не через F12, а с помощью Fiddler2, то подозреваю что мы увидим два запроса :) Один сгенерированный jQuery кодом, а второй - сабмитом формы. Просто F12 с помощью вы не успеваете увидить первый. Второй запрос вам очищает лог вызовов и зависает сам (Fiddle2 - избавлен от недостатка "очистки", поэтому через него картина выглядит полнее).

А еще - стоит на вкладочку Console заглянуть. Убедится что там никаких ошибок не светится. Вдруг браузер срубил запрос по соображениям секьюрности? Заодно убедится проверить что "MK Updated" вывеслось. Если вывелось, значит запрос к арудине у нас прошол нормально, а кипишь поднимает второй, мусорный запрос. Которого вообще быть не должно.

alexey_and пишет:

 что ардуина должна что-то отвечать на запрос. может такое быть?

Правильное подозрение.

Строка:

client.println("HTTP/1.1 200 OK"); //send new page

Это и есть, то что должна минимально должна ответить ардуина, что-бы браузер понял что "с запросом все хорошо".

List of HTTP status codes - Wikipedia, the free encyclopedia

Цитата:

200 OK
Standard response for successful HTTP requests. The actual response will depend on the request method used. In a GET request, the response will contain an entity corresponding to the requested resource. In a POST request the response will contain an entity describing or containing the result of the action.[2]

alexey_and
Offline
Зарегистрирован: 03.03.2013

не не. запрос точно ардуине. я конечно бамбук, но не до такой степени :)

ардуина имеет адрес 192.168.1.177, а сервер, где крутится страница - 192.168.1.1

потестю вдоль и поперек вечером, mk updated ни разу в консоли не видел

попробую со стороны ардуины отвечать ок-ями :)

leshak
Offline
Зарегистрирован: 29.09.2011

alexey_and пишет:

не не. запрос точно ардуине. я конечно бамбук, но не до такой степени :)

А вот скриншот говорит что бамбук :)

Вы не путайте "что вы хотели сделать" и "что вышло" ;)

Кнопка у вас типа submit?  А что происходит при нажатии такой кнопки? А формочка отправляется на адресс который указан в качестве action, у тега form. Если там ничего не указанно, то... на адресс текущей страницы (и происходит перезагрузка страницы). А текущая страница - у вас "на другом сервере". 

Вот вы... и стали бамбуком ;)  Отправили запрос на адресс текущей страницы, на "другой сервер", а не ардуины. 

Вернее скорее всего на ардуину вы тоже успеле отправить, своим jQuery кодом. Но вот "дождатся ответа" - уже некому. Страница перегрузилас.

Вообщем вам нужно, либо менить тип кнопки (что я предложил в  "попробуйте..."), либо пытатся "задавить" дефолтную логику кнопки типа submit. Вешатся не на событеие onClick, а на submit и не кнопки, а формы... как-то так:

$("#form-id").submit(function(e){
    ....Что-то делаем на сабмит формы.....

    // предотвращаем дефолтный обработчи
    e.preventDefault();
   return false;
  });

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

leshak
Offline
Зарегистрирован: 29.09.2011

alexey_and пишет:

попробую со стороны ардуины отвечать ок-ями :)

Перед тем как добавалять - попробуте, все-таки, вначале руками урл дернуть. Велика вероятность что вы уже отвечаете OK-ями. Строчку "как отвечать", а копировал из кода выше по ветке. Так что - вероятно что вы уже отвечаете. По крайней мере "иногда" (не вникал, всегда ли отвечаете).

alexey_and
Offline
Зарегистрирован: 03.03.2013

проблему примерно понял... ошибку в типе кнопки осознаю :)

Цитата:

Велика вероятность что вы уже отвечаете OK-ями.

 мне кажется не отвечаю. вот на всякий случай текущий код

 


#include <SPI.h>
#include <Ethernet.h>

#define curtainOpenPIN   6
#define curtainClosePIN  7
#define leftRollUpPIN    30
#define leftRollDownPIN  31
#define rightRollUpPIN   32
#define rightRollDownPIN 33

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = { 192, 168, 1, 177 }; // ip in lan
byte gateway[] = { 192, 168, 1, 1 }; // internet access via router 
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
EthernetServer server(80); //server port
 
String readString;


int rightButton = 29;
int lightPin = 28;
boolean lastRightBT = LOW;
boolean currentRightBT = LOW;
boolean lightON = false;

 
void setup(){
 
//  pinMode(13, OUTPUT); 
  pinMode(curtainOpenPIN,   OUTPUT);
  pinMode(curtainClosePIN,  OUTPUT);
  pinMode(leftRollUpPIN,    OUTPUT);
  pinMode(leftRollDownPIN,  OUTPUT);
  pinMode(rightRollUpPIN,   OUTPUT);
  pinMode(rightRollDownPIN, OUTPUT);

  pinMode(rightButton, INPUT);
  pinMode(lightPin, OUTPUT);

  
  digitalWrite(curtainOpenPIN,   LOW);
  digitalWrite(curtainClosePIN,  LOW);
  digitalWrite(leftRollUpPIN,    LOW);
  digitalWrite(leftRollDownPIN,  LOW);
  digitalWrite(rightRollUpPIN,   LOW);
  digitalWrite(rightRollDownPIN, LOW);
  
  digitalWrite(28, LOW);
  
  //start Ethernet
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();

  Serial.begin(9600);
}


boolean debounce(boolean last)
{
  boolean current = digitalRead(rightButton);
  if (last != current)
  {
    delay(5);
    current = digitalRead(rightButton);
  }
  return current;
}


//////curtain functions
void curtainOPEN(){
  digitalWrite(curtainOpenPIN, HIGH);    
  delay(500);
  digitalWrite(curtainOpenPIN, LOW);
}            
void curtainCLOSE(){
  digitalWrite(curtainClosePIN, HIGH);    
  delay(500);
  digitalWrite(curtainClosePIN, LOW);
}   
void curtainSTOP(){
  digitalWrite(curtainOpenPIN, HIGH);
  digitalWrite(curtainClosePIN, HIGH);                 
  delay(500);
  digitalWrite(curtainOpenPIN, LOW);
  digitalWrite(curtainClosePIN, LOW);  
}

///////roll functions
void leftRollUP(){
  digitalWrite(leftRollUpPIN, HIGH);    
  delay(500);
  digitalWrite(leftRollUpPIN, LOW);
}
void leftRollDOWN(){
  digitalWrite(leftRollDownPIN, HIGH);    
  delay(500);
  digitalWrite(leftRollDownPIN, LOW);   
}
void leftRollSTOP(){
  digitalWrite(leftRollUpPIN, HIGH);
  digitalWrite(leftRollDownPIN, HIGH);              
  delay(500);
  digitalWrite(leftRollUpPIN, LOW);
  digitalWrite(leftRollDownPIN, LOW);    
}
void rightRollUP(){
  digitalWrite(rightRollUpPIN, HIGH);    
  delay(500);
  digitalWrite(rightRollUpPIN, LOW);
}
void rightRollDOWN(){
  digitalWrite(rightRollDownPIN, HIGH);    
  delay(500);
  digitalWrite(rightRollDownPIN, LOW); 
}
void rightRollSTOP(){
  digitalWrite(rightRollUpPIN, HIGH);
  digitalWrite(rightRollDownPIN, HIGH);             
  delay(500);
  digitalWrite(rightRollUpPIN, LOW);
  digitalWrite(rightRollDownPIN, LOW); 
}  
  
void loop(){

  currentRightBT = debounce(lastRightBT);
  if (lastRightBT == LOW && currentRightBT == HIGH)
  {
    lightON = !lightON;
  }
  lastRightBT = currentRightBT;
  
  digitalWrite(lightPin, lightON);

  
    
  // Create a client connection
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read(); 
        //read char by char HTTP request
        if (readString.length() < 100) { 
          //store characters to string
          readString += c;
          //Serial.print(c);
        } 
        //if HTTP request has ended
        if (c == '\n') {

/////// curtain control
          if(readString.indexOf("?curtainOPEN") >0){
           curtainOPEN();
          }
          else if(readString.indexOf("?curtainCLOSE") >0){
           curtainCLOSE();        
          }         
          else if(readString.indexOf("?curtainSTOP") >0){
           curtainSTOP();        
          }  
   
////// left roll control   
          else if(readString.indexOf("?leftRollUP") >0){
            leftRollUP();
          }
          else if(readString.indexOf("?leftRollDOWN") >0){
            leftRollDOWN();           
          }          
          else if(readString.indexOf("?leftRollSTOP") >0){
            leftRollSTOP();         
          } 
          
/////// right roll control   
          else if(readString.indexOf("?rightRollUP") >0){
            rightRollUP();
          }
          else if(readString.indexOf("?rightRollDOWN") >0){
            rightRollDOWN();           
          }          
          else if(readString.indexOf("?rightRollSTOP") >0){
            rightRollSTOP();           
          }        
          
//////// light on off          
          else if(readString.indexOf("?lightON") >0){   
            lightON = HIGH;
          }
          else if(readString.indexOf("?lightOFF") >0){           
            lightON = LOW;
          }          
//////// light on off
//////// scenes
          else if(readString.indexOf("?sceneNIGHT") >0){
            curtainCLOSE();          
            leftRollDOWN();   
            rightRollDOWN(); 
          }
          
          delay(1);
          //stopping client
          client.stop();          
          
          //clearing string for next read
          readString="";
 
        }
      }
    }
  }
}

 

alexey_and
Offline
Зарегистрирован: 03.03.2013

изменил тип кнопки - ничего не поменялось.

        <input id="curtain_open" type="button" data-icon="arrow-l" data-iconpos="left"
        value="Open">
        <input id="curtain_close" type="button" data-icon="arrow-r" data-iconpos="left"
        value="Close">
        <input id="curtain_stop" type="button" data-icon="delete" data-iconpos="left"
        value="Stop">

добавил посылку ок - тоже никакого эффекта

https://dl.dropboxusercontent.com/u/28876156/Screen%20Shot%202013-07-15%20at%2010.19.34%20PM.png

/////// curtain control
          if(readString.indexOf("?curtainOPEN") >0){
                      client.println("HTTP/1.1 200 OK"); 
           curtainOPEN();
          }
          else if(readString.indexOf("?curtainCLOSE") >0){
                      client.println("HTTP/1.1 200 OK"); 
           curtainCLOSE();        
          }         
          else if(readString.indexOf("?curtainSTOP") >0){
                      client.println("HTTP/1.1 200 OK"); 
           curtainSTOP();        
          }  

дергал руками - вот что кажет:

https://dl.dropboxusercontent.com/u/28876156/Screen%20Shot%202013-07-15%20at%2010.11.03%20PM.png

НО при этом ардуина воспринимает команду и делает что от нее требуется

вот еще кое-что новое заметил:

https://dl.dropboxusercontent.com/u/28876156/Screen%20Shot%202013-07-16%...

leshak
Offline
Зарегистрирован: 29.09.2011

alexey_and пишет:

вот еще кое-что новое заметил:

https://dl.dropboxusercontent.com/u/28876156/Screen%20Shot%202013-07-16%...

Вот последнее - уже больше похоже на правду. По крайней мере видно, что ваш javascript пытается дергать ардуину, а вот ее ответ - обрезается из секьюрных соображений.

Это как раз случай: "А еще - стоит на вкладочку Console заглянуть. Убедится что там никаких ошибок не светится. Вдруг браузер срубил запрос по соображениям секьюрности"

Вообщем это означает что мы пытаемся сделать "кросс-доменный запрос". Когда html/javascript у нас загружены с одного домена (192.168.1.1), а запрос мы пытаемся сделать к другому домену (192.168.1.177). Упоминал и про это в сообщении #4 :)  К javascript-ту это ограничение  -тоже относится.

Вообщем тут у вас есть два пути: 

1. Ответом дуины должен быть не html, а JSONP  (JSON - тоже не пропустит, нужно именно JSONP). Впрочем если мы не анализуем что ответила дуина, возможно "ответ и не важен", главное "попросить у нее именно JSONP.  Скажем с помощью jQuery.getJSON() | jQuery API Documentation и не забыть добавить в запрашиваемый URL "callback=?" - что-бы поняло что мы ждем не JSON, а JSONP

Можно еще попробовать jQuery.ajax() | jQuery API Documentation, у него в опциях есть "crossDomain (default: false for same-domain requests, true for cross-domain requests)" - но, если честно не пробовал никогда.

2. Вторым вариантом - это что-бы в ответе дуины, кроме HTTP200  был еще тот самый заголовок:

"Access-Control-Allow-Origin: *" - разрешить кросс доменный запросы с любых доменов

Или

"Access-Control-Allow-Origin: http://192.168.1.1" - разрешить с конкретного домена (так безопасней)

Возможно еще потребуется что-то типа

"Access-Control-Allow-Methods: GET,OPTIONS"

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

 

alexey_and
Offline
Зарегистрирован: 03.03.2013

ура! спасибо leshak огромное!

помог вариант "Access-Control-Allow-Origin: *"

теперь никаких ошибок. но вот еще один блудняк: у меня сделано 2 таба с помощью navbar. по дефолту у меня таб "Control". открываю index.html. все работает. перехожу на другой таб, и кнопки там не работают. как только обновляю страницу - начинают работать. до перехода на другой таб. в чем может быть загвоздка? сделал видео чтоб было понятней что я имею ввиду. там видно реакцию на нажатие кнопок - появляются строки внизу экрана, и при переходе на другой таб - не появляются. потом обновляю страницу и все начинает работать в пределах текущего таба

http://www.youtube.com/watch?v=UmXx18QtnM8&feature=youtu.be

вот коды обеих страниц

index.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black">
  <title></title>
  <link rel="stylesheet" href="https://d10ajoocuyu32n.cloudfront.net/mobile/1.3.1/jquery.mobile-1.3.1.min.css">
  
  <!-- Extra Codiqa features -->
  <link rel="stylesheet" href="codiqa.ext.css">
  
  <!-- jQuery and jQuery Mobile -->
  <script src="https://d10ajoocuyu32n.cloudfront.net/jquery-1.9.1.min.js"></script>
  <script src="https://d10ajoocuyu32n.cloudfront.net/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script>

  <!-- Extra Codiqa features -->
  <script src="https://d10ajoocuyu32n.cloudfront.net/codiqa.ext.js"></script>
   
   <script>
$(document).ready(function(){

      $("#curtain_open").click(function(){
         $.get("http://192.168.1.177/?curtainOPEN",function(){
            console.log("MK updated!!!");
         });
      });
  
      $("#curtain_close").click(function(){
         $.get("http://192.168.1.177/?curtainCLOSE",function(){
            console.log("MK updated!!!");
         });
      });
  
      $("#curtain_stop").click(function(){
         $.get("http://192.168.1.177/?curtainSTOP",function(){
            console.log("MK updated!!!");
         });
      });
 
 
      $("#leftRollUP").click(function(){
         $.get("http://192.168.1.177/?leftRollUP",function(){
           console.log("MK updated!!!");
         });
      });
  
      $("#leftRollDOWN").click(function(){
         $.get("http://192.168.1.177/?leftRollDOWN",function(){
            console.log("MK updated!!!");
         });
      });
  
      $("#leftRollSTOP").click(function(){
         $.get("http://192.168.1.177/?leftRollSTOP",function(){
           console.log("MK updated!!!");
         });
      });
  
      $("#rightRollUP").click(function(){
         $.get("http://192.168.1.177/?rightRollUP",function(){
            console.log("MK updated!!!");
         });
      });
  
      $("#rightRollDOWN").click(function(){
         $.get("http://192.168.1.177/?rightRollDOWN",function(){
            console.log("MK updated!!!");
         });
      });
  
      $("#rightRollSTOP").click(function(){
         $.get("http://192.168.1.177/?rightRollSTOP",function(){
            console.log("MK updated!!!");
         });
      });
    
      $("#id-light").change(function() {
         if($(this).val()=='on') {
           $.get("http://192.168.1.177/?lightON")
         }
	  });
	  $("#id-light").change(function() {
         if($(this).val()=='off') {
           $.get("http://192.168.1.177/?lightOFF")
         }
	  });

});   
   </script>
</head>
<body>
<!-- Home -->
<div data-role="page" id="page1">
    <div data-role="content">
        <div data-role="navbar" data-iconpos="top">
            <ul>
                <li>
                    <a href="scenario.html" data-transition="slidedown" data-prefetch="true" data-theme="" data-icon="">
                        Scenario
                    </a>
                </li>
                <li>
                    <a href="index.html" data-transition="slidedown" data-prefetch="true" data-theme="" data-icon="" class="ui-btn-active ui-state-persist">
                        Control
                    </a>
                </li>
            </ul>
        </div>
        <div data-role="collapsible-set">
            <div data-role="collapsible" data-collapsed="false">
                <h3>
                    Curtain Control
                </h3>
        <input id="curtain_open" type="submit" data-icon="arrow-l" data-iconpos="left"
        value="Open">
        <input id="curtain_close" type="submit" data-icon="arrow-r" data-iconpos="left"
        value="Close">
        <input id="curtain_stop" type="submit" data-icon="delete" data-iconpos="left"
        value="Stop">
            </div>
        </div>
        <div data-role="collapsible-set">
            <div data-role="collapsible" data-collapsed="false">
                <h3>
                    Roll Control
                </h3>
                <div class="ui-grid-a">
                    <div class="ui-block-a">
                        <a id="leftRollUP" data-role="button" href="#page1" data-icon="arrow-u"
                        data-iconpos="top">
                        </a>
                    </div>
                    <div class="ui-block-b">
                        <a id="rightRollUP" data-role="button" href="#page1" data-icon="arrow-u"
                        data-iconpos="top">
                        </a>
                    </div>
                    <div class="ui-block-a">
                        <a id="leftRollSTOP" data-role="button" href="#page1" data-icon="delete"
                        data-iconpos="top">
                        </a>
                    </div>
                    <div class="ui-block-b">
                        <a id="rightRollSTOP" data-role="button" href="#page1" data-icon="delete"
                        data-iconpos="top">
                        </a>
                    </div>
                    <div class="ui-block-a">
                        <a id="leftRollDOWN" data-role="button" href="#page1" data-icon="arrow-d"
                        data-iconpos="bottom">
                        </a>
                    </div>
                    <div class="ui-block-b">
                        <a id="rightRollDOWN" data-role="button" href="#page1" data-icon="arrow-d"
                        data-iconpos="bottom">
                        </a>
                    </div>
                </div>
            </div>
        </div>
        <div data-role="collapsible-set">
            <div data-role="collapsible" data-collapsed="false">
                <h3>
                    Light Control
                </h3>
                <div class="ui-grid-a">
                    <div class="ui-block-a">
                        <div data-role="fieldcontain">
                            <select name="toggleswitch10" id="id-light" data-theme="" data-role="slider"
                            data-mini="true">
                                <option value="off">
                                    Off
                                </option>
                                <option value="on">
                                    On
                                </option>
                            </select>
                        </div>
                    </div>
                    <div class="ui-block-b">
                        <div data-role="fieldcontain">
                            <input id="slider9" type="range" name="slider" value="50" min="0" max="255"
                            data-highlight="false" data-mini="true">
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
</html>

 

 

scenario.html


<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black">
  <title></title>
  <link rel="stylesheet" href="https://d10ajoocuyu32n.cloudfront.net/mobile/1.3.1/jquery.mobile-1.3.1.min.css">
  
  <!-- Extra Codiqa features -->
  <link rel="stylesheet" href="codiqa.ext.css">
  
  <!-- jQuery and jQuery Mobile -->
  <script src="https://d10ajoocuyu32n.cloudfront.net/jquery-1.9.1.min.js"></script>
  <script src="https://d10ajoocuyu32n.cloudfront.net/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script>

  <!-- Extra Codiqa features -->
  <script src="https://d10ajoocuyu32n.cloudfront.net/codiqa.ext.js"></script>
   
   <script>
$(document).ready(function(){
  $("#sceneNIGHT").click(function(){
         $.get("http://192.168.1.177/?sceneNIGHT",function(){
           console.log("MK updated!!!");
    });
  });
 
   $("#sceneDAY").click(function(){
         $.get("http://192.168.1.177/?sceneDAY",function(){
           console.log("MK updated!!!");
    });
  }); 
  
	$("#sceneMOVIE").click(function(){
         $.get("http://192.168.1.177/?curtainCLOSE",function(){
           console.log("MK updated!!!");
    });
  }); 

  	$("#sceneRELAX").click(function(){
         $.get("http://192.168.1.177/?curtainOPEN",function(){
           console.log("MK updated!!!");
    });
  }); 
  
    	$("#stopALL").click(function(){
         $.get("http://192.168.1.177/?stopALL",function(){
           console.log("MK updated!!!");
    });
  }); 
  
  });   
   </script>
</head>
<body>
<!-- Home -->
<div data-role="page" id="page1">
    <div data-role="content">
        <div data-role="navbar" data-iconpos="top">
            <ul>
                <li>
                    <a href="scenario.html" data-transition="slidedown" data-prefetch="true" data-theme="" data-icon=""
                                        class="ui-btn-active ui-state-persist">
                        Scenario
                    </a>
                </li>
                <li>
                    <a href="index.html" data-transition="slidedown" data-prefetch="true" data-theme="" data-icon="">
                        Control
                    </a>
                </li>
            </ul>
        </div>
        <div class="ui-grid-a">
            <div class="ui-block-a">
                <a id="sceneDAY" data-role="button" href="scenario.html">
                    Day
                </a>
            </div>
            <div class="ui-block-b">
                <a id="sceneMOVIE" data-role="button" href="scenario.html">
                    Movie
                </a>
            </div>
            <div class="ui-block-a">
                <a id="sceneNIGHT" data-role="button" href="scenario.html">
                    Night
                </a>
            </div>
            <div class="ui-block-b">
                <a id="sceneRELAX" data-role="button" href="scenario.html">
                    Relax
                </a>
            </div>
        </div>
        <a id="stopALL" data-role="button" href="#page1">
            Cancel Scene Exec
        </a>
    </div>
</div>
</body>
</html>

 

и еще вопросик. можно ведь каким-то способом передавать значения с ардуины в jquery? например, для светильника у меня сделаны и физические кнопки (простые тактовые на цифровой вход + реле на вкл светильника), и toggle switch на странице. можно сделать так, чтоб ардуина при включении-выключении света с физ. кнопки двигала и переключатель на странице. заодно таким способом была бы обеспечена синхронизация состояния на всех клиентских планшетах/телефонах/компах

 

leshak
Offline
Зарегистрирован: 29.09.2011

alexey_and пишет:

ура! спасибо leshak огромное!

помог вариант "Access-Control-Allow-Origin: *"

Ага. А  загуглили эту ошибку - то и сами бы нашли ответ :)

alexey_and пишет:
у меня сделано 2 таба с помощью navbar. по дефолту у меня таб "Control". открываю index.html. все работает. перехожу на другой таб, и кнопки там не работают. как только обновляю страницу -

Простите. Но это уже "работа над проектом" :)  Отлов багов и поиск "почему не работает" это, зачастую, 80% всей работы. А когда "поймал", то исправить уже дело одной строчки (как прошлая проблема).

Тем более что вам - это намного проще сделать. Не буду же я у себя все это поднимать. А вам - открываете консольку, смотрите есть ли какие-то ошибки в ней, смотрите нет ли где 404 ошибок, натыкиваете console.log в свои скрипты, смотрите "куда доходит выполнение, куда нет". не срабатывает обработчик кнопки или уже ajax код, пошагово дебагером проходите и смотрите соотвествуетли реальныей процесс тому что ожидалось.... вообщем место-то "много". Описать все возможные причины в режиме "проверте то, провертье это..." - это очень долго.

Да и, в конце концов - это уже все довольно далеко от тематики форума :)

alexey_and пишет:

и еще вопросик. можно ведь каким-то способом передавать значения с ардуины в jquery?

Вот прямо так "взять и передать" -нет. jQuery умеет только отсылать запросы.

Конечно обходные пути возможны (и все они будут, в какой-то степени компромисами, имеют свои недостатки. особенно учитывая ограниченность дуины): long polling, web-sokets, тупо часто опрашивать дуину, завести промежуточный сервер, на которые дуина будет слать отчеты...

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

leshak
Offline
Зарегистрирован: 29.09.2011

А по вашему коду. Вы программист или где? Где же здоровая лень?  Это для бухгалтера нераздумчивая усидчивость - благо. А девиз програмера "компьютер должен работать, а человек - думать".

Ну вот не лень вам было набивать столько однотипных 

 $("#id-light").change(function() {
         if($(this).val()=='on') {
           $.get("<a href="http://192.168.1.177/?lightON" rel="nofollow">http://192.168.1.177/?lightON</a>")

         }
      });

Ну хоте-бы "192.168.1.177" - можно было вынести в отдельную переменную что-бы если дуина сменит адресс - менять его в одом месте, а не 50-ти.

....
var arduinoUrl="htt_p://192.168.177"

...
// где-то в обработчике
$.get(arduinoUrl+"/?sceneBLABLA",....)

А потом увидить, что отличие всех обработчиков, вообщем-то уже толкко в имени параметра передаваемого. Ну значит вместо 10-тка обработчиков можно один использовать.

Присвоить всем своим кнопкам какой-то класс, скажем   <a class="arduinoButton"

Самой же кнопке, сразу прописать "что там нужно дуине передевать. Получится



<a class="arduinoButton" data-command="stopALL"

Ну и обработчик вешать уже по селектору класса. Один - сразу на все.

  $(".arduinoButton").click(function(){
        $.get(arduinoUrl+"/?"+$(this).data("command"))

 

Вообщем "меньше кода" - меньше шансов на ошибку. Меньше хадкодинга - больше шансов на повторное использование кода.

И еще - опять у вас <input type="submit" видно. Зачем вам submit-ы? Вы отправляете формочку на сервер и что-то там с ней делаете?

alexey_and
Offline
Зарегистрирован: 03.03.2013

Цитата:

Простите. Но это уже "работа над проектом" :)  Отлов багов и поиск "почему не работает" это, зачастую, 80% всей работы. А когда "поймал", то исправить уже дело одной строчки (как прошлая проблема).

ясненько, значит буду тыкаться. попробую заново сгенерить эти страницы, может поможет...

Цитата:

А по вашему коду. Вы программист или где? Где же здоровая лень?

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

за ценные замечания огромное спасибо, обязательно буду применять :) 

Цитата:

И еще - опять у вас <input type="submit" видно. Зачем вам submit-ы? Вы отправляете формочку на сервер и что-то там с ней делаете?

это так конструктор сгенерил. как бы оно работало - и внимания не обращал...

alexey_and
Offline
Зарегистрирован: 03.03.2013

проблему с навбаром решил путем объединения двух страниц в одну