Contrôler une LED par le web (IDE 1.0)

nadirovick:
*digitalPinMap[data[3]].port |= 1 << digitalPinMap[data[3]].bit; --------------------|
*digitalPinMap[data[3]].port &= ~(1 << digitalPinMap[data[3]].bit); ----------------|-------> Elles accomplissent quoi exactement
data[4] = *digitalPinMap[data[3]].port & (1 << digitalPinMap[data[3]].bit); --------|

Là d'après ce que je vois (parce que je ne me souviens plus de tout ce que j'avais fais :grin: ), il s'agissait de manipuler les registres directement et non de passer pas la fonction digitalWrite() du core arduino.
La première ligne était pour mettre le bit du port correspondant à la pin arduino n°x à 1 (HIGH) en utilisant un tableau de correspondance, la deuxième pour mettre à 0 (LOW) et la troisième c'était pour connaître son état après action et ainsi l'intégré dans les infos de retour de la commande (si demandé).
Bon ici c'était mes débuts sur la plate forme arduino et les µc donc pour certaine choses je ne le ferais peut être pas de la même façon aujourd'hui ...
http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.PortManipulation
Pour mieux comprendre le pourquoi.
Sinon tu vas refaire la partie serveur, comme elle n'est sans doute plus valable avec la normalisation actuel ?

Brisebee:
Je vous poserai certainement des questions, soit en cas de blocage ou pour valider ma progression !

Yop BriBri,
Concernant la discussion actuel sur le projet websocket à mon avis tu ne sera pas trop concerné comme c'est un projet assé globale mais datant et que j'ai plus ou moin abandonné.
Sinon pas de problème, tes questions sont toujours les bienvenues. :wink:

Bonjour,

J'ai repris tous les programmes et éléments fournis plus haut dans ce post par Osaka , et qui fonctionnent sans problème.

Mon but est de comprendre comment cela fonctionne, pour pouvoir l'adapter ensuite à mon projet de domotique.

J'en profite également pour expliciter la mise en œuvre, ce qui devrait permettre à des débutants comme moi de rentrer plus facilement dans le sujet.

  1. Mise en œuvre des programmes fournis par Osaka :

Avec un serveur local sous EasyPHP-5.3.9
(ne pas oublier d’autoriser l’utilisation des sockets)

Mettre dans le répertoire www les programmes suivants :

  • FormRequestAjax.html
  • jquery.min.js
  • socket.php
  • webAjax.js

Charger dans l’Arduino + Ethernet Shield le programme.ino

Ouvrir la fenêtre du Serial Monitor (9600)

Lancer le programme FormRequestAjax.html

Les données remplies dans le formulaire sont transmises à l’Arduino ors de l’appui sur la touche « On », qui les affiche sur le Serial Monitor.

  1. Voici ce que j’ai compris du fonctionnement global de ce système :

Le programme FormRequestAjax.html sert d’interface web :
Il fait appel à deux programmes javascript :

  • jquery.min.js : je ne sais pas à quoi cela correspond, j’ai rapidement jeté un œil sur le lien jQuery.post() | jQuery API Documentation fourni par Osaka, pour l’instant je n’ai pas compris grand chose, mais il va falloir que je m’y intéresse plus en détail.
  • webAjax.js : qui si j’ai bien compris sert à envoyer les données fournies dans le formulaire lors de l’appui sur la touche « On ».

Le programme socket.php est utilisé dans webAjax.js : je n’ai pas encore compris comment fonctionne les sockets, mais, là aussi, je ne désespère pas.

Le programme .ino qui tourne sur l’Arduino en mode client, reçoit les caractères envoyés par le serveur, les affiche sur le Serial Monitor, et compte le nombre de réquêtes du serveur (d’appuis sur la touche « On »).

N'hésitez pas à corriger mes erreurs et/ou à apporter des informations complémentaires.

@+

Salut tt le monde :slight_smile:
je suis arrivé à faire fonctionner le serveur avec un nouveau sketch et une trés grande partie du travail d'Osaka :* ci joint tous les fichers.
tout fonctionne avec WampServer Version 2.2 et IDE 1.0
me reste que la partie état E/S lors du premiere ouverture de la page "onload", je travail dessus
une fois terminée je vais poster le travail

fichier client :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="jquery.min.js"></script>
<script src="init.js"></script>
<!--<script type="text/javascript">
jQuery(function()
    {
        jQuery( "#pwm" ).slider({ max: 255 },{ value: 0 },{step : 5});
    
        jQuery( "#pwm" ).delay(100).bind( "slide", function()
        {
            var value = jQuery( "#pwm" ).slider( "option", "value" );
            analogWrite(0x09, value, 0x00);             
        });
        
        jQuery( "#pwm" ).delay(500).bind( "slidestop", function()
        {
            var value = jQuery( "#pwm" ).slider( "option", "value" );
            analogWrite(0x09, value, 0x01);
        });
    
    });

   </script> -->
   
<style type="text/css">
<!--
.Style1 {font-size: 24px}
.Style2 {font-size: 18px; }
body {
	background-color: #FFFFFF;
}
-->
</style>
</head>

<!--<body id="DOMOTIQUE" onload="init()"> -->
<body id="DOMOTIQUE">
 <div id="retour"></div>
 <div id="retour1"></div>
 <div id="retour2"></div>
 <div id="retour3"></div>
<div id="log">
  <table width="550" border="0">
    <tr>
      <td width="237" bordercolor="#339999"><div class="Style2">
        <div align="left">LED Sur Pin N°7 :
          <button id="dw7" onclick="digitalWrite(7, 1, 1)">on</button>
        </div>
      </div>
        <div class="Style1">
          <div align="left"><span class="Style2">LED Sur Pin N°8 :</span>
              <button id="dw8" onclick="digitalWrite(8, 1, 1)">on</button>
          </div>
        </div>
        <div></div>      </td>
      <td width="303"><div></div>
        <div></div>      </td>
    </tr>
  </table>
</div>

 <div id="pwm"></div>
 </body>
</html>

fichier init :

function digitalWrite(pin, value, ack)
{
  var textejson = {"str":0x02,"len":0x04, "cmd":0x02, "dt1":pin, "dt2":value, "dt3":ack, "end":0x03 };
  envoie(textejson);
}

function analogRead(pin)
{
  var textejson = {"start":0x02,"length":0x02, "cmd":0x06, "data1":pin, "end":0x03 }; 
  envoie(textejson);
}

function digitalRead(pin)
{
  var textejson = {"start":0x02,"length":0x02, "cmd":0x03, "data1":pin, "end":0x03 };
  envoie(textejson);
}

function analogWrite(pin, value, ack)
{
  var textejson = {"start":0x02,"length":0x04, "cmd":0x05, "data1":pin, "data2":value, "data3":ack, "end":0x03 }; 
  envoie(textejson);
}

function envoie(textejson)
{
  jQuery.post("socket.php", textejson,
 function(data)
 {
 parseJSon(JSON.stringify(data));
 }, "json");


}
function parseJSon(dJson)
{
  log(dJson);

  var duino = eval('(' + dJson + ')');
  switch(duino.cmd)
  {
    case 0x02:
      digitalWriteResp(duino.data1, duino.data2, duino.data3);
    break;
    case '2':
      digitalWriteResp(duino.data1, duino.data2, duino.data3);
    break;
    case 2:
      digitalWriteResp(duino.data1, duino.data2, duino.data3);
    break;
  }
  
}


function $(id)
{
  return document.getElementById(id);
}

function log(msg)
{
  $("log").innerHTML+="
"+msg;
}


function digitalWriteResp(pin, value, ack)
{
    id="dw"+pin;
  
    if(value == 1)
    {
      $(id).innerHTML="off";
      $(id).setAttribute('onclick', "digitalWrite("+pin+", 0, "+ack+")");
    }
    else
    {
      $(id).innerHTML="on";
      $(id).setAttribute('onclick', "digitalWrite("+pin+", 1, "+ack+")");
    }
}

fichier socket :

<?php
$msg = "";
$buffer = null;
$msg = file_get_contents("php://input"); // on ne reprend que les données utiles et non l'intégralité de la requête 
$host="192.168.1.100";
$port=1080;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //création du socket
socket_connect($socket, $host, $port); //connection du socket
socket_write($socket,$msg,strlen($msg)); //envoie des données POST
do
{
  if(isset($buffer)) // si buffer contien des donnees
echo $buffer; // reponse à la requête javascript
//echo json_encode ( $buffer );
}
while(@socket_recv($socket,$buffer,1024,0) != 0); // on attend la reponse (=! 0) sur le socket
socket_close($socket); //fermeture du socket
?>

Sketch

#include <SPI.h>
#include <Ethernet.h>
int i = 0;
char c;
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x14, 0x6D };
byte ip[] = { 192,168,1,100 };
EthernetServer server(1080);
void setup() 
{
  for(i = 0; i<=7; i++) 
  {
  pinMode(i, OUTPUT);
  }
  Serial.begin(9600);
  Ethernet.begin(mac, ip);
  server.begin(); 
}
void loop() 
{
EthernetClient client = server.available();
if (client) 
  { 
    if (client.connected()) 
       {   
         uint8_t lengthData = client.available();
        char data[lengthData];
           int j = 0;
           String affi="";
           while(client.available())
           {
                  c = client.read();
                  affi+=c;
                  j=j+1;
                  
                      switch (j) 
                             {
                                case 5:
                                data[0]=c;                 
                                break;
                                case 11:
                                data[1]=c;                 
                                break;
                                case 17:
                                data[2]=c;                 
                                break;
                                case 23:
                                data[3]=c;                 
                                break;
                                case 29:
                                data[4]=c;                 
                                break;
                                case 35:
                                data[5]=c;                 
                                break;
                                case 41:
                                data[6]=c;                 
                                break;                            
                              }}
//Serial.println(affi);
              if(!client.available())
              {   
                if(data[0]== '2' && data[6]=='3')
	     { 
                 switch (data[2]) {
                                     case '2':
                                     if (data[4]=='1')
                                     {
                                     digitalWrite(data[3], HIGH);
	                             }
                                     else
                                     {
                                     digitalWrite(data[3], LOW);
                                     }
	                                if(data[0] != '0')
	                                   {
	                	              String json = "{\"start\":";
	              	                      json+=char(data[0]);
              		                      json+=",\"length\":";
              		                      json+=char(data[1]);
                		              json+=",\"cmd\":";
                            		      json+=char(data[2]);
                          		         for(int x=0;x < 3; x++)
                      		                    {
                       		                        json+=",\"data";
                     		                        json+=x+1;
                          	                 	json+="\":";
                      		                        json+=char(data[x+3]);
		                                     }                  		
	                                       json+=",\"end\":";
	                                       json+=3;
	                                       json+="}";
		                               Serial.println(json);//Pour Débogage
                                               client.println(json); // Envoi des données Serveur Web
	                                       }
                                        break;
                                   }
	     }    
             client.stop();
              }   
 }
  }
}

je reste à votre dispositions pour les détails
@+

Arduino.rar (34.8 KB)

Yop Yop,

Brisebee:
Le programme FormRequestAjax.html sert d’interface web :
Il fait appel à deux programmes javascript :

  • jquery.min.js : je ne sais pas à quoi cela correspond, j’ai rapidement jeté un œil sur le lien jQuery.post() | jQuery API Documentation fourni par Osaka, pour l’instant je n’ai pas compris grand chose, mais il va falloir que je m’y intéresse plus en détail.
  • webAjax.js : qui si j’ai bien compris sert à envoyer les données fournies dans le formulaire lors de l’appui sur la touche « On ».

En fait "jquery.mins.js" c'est une librairie javascript "JQuery", c'est pareil que d'ajouter (#include) la librairie ethernet ou autre dans ton code arduino.
Le fichier "webAjax.js" lui utilise une des fonctions de cette librairie "jQuery.post(...)" qui fabrique (avec les données du formulaire) la requête et l'envoie à destination de "socket.php" qui lui même se chargera de transmettre ses informations à l'arduino via socket.

Brisebee:
Le programme socket.php est utilisé dans webAjax.js : je n’ai pas encore compris comment fonctionne les sockets, mais, là aussi, je ne désespère pas.

les sockets tu peux les comparer au port serie de l'arduino, tu as en premier la création du socket (avec le choix des divers protocoles tcp/ip, udp, ... utilisé dans une communication réseau), ensuite la connections avec les paramètres (ip, port) du destinataire , après ce n'est plus que du read-write sur les données échangées.

Brisebee:
Le programme .ino qui tourne sur l’Arduino en mode client, reçoit les caractères envoyés par le serveur, les affiche sur le Serial Monitor, et compte le nombre de réquêtes du serveur (d’appuis sur la touche « On »).

Le programme arduino est plutôt en mode serveur il attend une ou plusieurs connexions socket, les données reçues sont affichés dans le monitor de l'ide ensuite une réponse à la requête est retournée avec le nombre de requête traité par l'arduino. (tu peux fermer ta page formulaire et la relancer, voir même dans un autre navigateur le nb de requête traitée sera définie par l'arduino).
:wink:

@nadirovick : je te laisse découvrir comme tu as l'air de bien t'en sortir et puis c'est comme ça qu'on apprend. :grin:

Merci Osaka pour ces précisions.

De mon coté, j'avance tout doucement.

@+

Bonjour :*,
@ Osaka, oui je sais tu as une longeur d'avance sur moi :grin:, je cherche à comprendre le problème du Handshake car jusqu'a présent, tout semble fonctionner "je croise les doigts XD"
je suis un peux occupé cette semaine, beaucoup de boulot
n'empêche que je jeterai un coup d'oeil de temp à autre
@+

Bonjour a tous,

Nadirovick pourrai tu s'il te plait m'expliquer le fonctionnement de jQuery(function(),je n'arrive pas a décrypter le code,merci.

jQuery(function()
    {
        jQuery( "#pwm" ).slider({ max: 255 },{ value: 0 },{step : 5});
    
        jQuery( "#pwm" ).delay(100).bind( "slide", function()
        {
            var value = jQuery( "#pwm" ).slider( "option", "value" );
            analogWrite(0x09, value, 0x00);             
        });
        
        jQuery( "#pwm" ).delay(500).bind( "slidestop", function()
        {
            var value = jQuery( "#pwm" ).slider( "option", "value" );
            analogWrite(0x09, value, 0x01);
        });
    
    });

nadirovick:
je cherche à comprendre le problème du Handshake car jusqu'a présent, tout semble fonctionner "je croise les doigts XD"

Tu as testé la version websocket ou juste les simple requêtes http comme tu l'as mis plus haut ? :grin:

archibal11:

jQuery(function()

{
       jQuery( "#pwm" ).slider({ max: 255 },{ value: 0 },{step : 5}); //création du slider sur la balise id="pwm"
                                                                      //sa valeur maximum sera de 255
                                                                      //la valeur 0 par défaut au lancement de la page
                                                                      //pas minimum de valeur 5 entre deux déplacements du slider
   
       jQuery( "#pwm" ).delay(100).bind( "slide", function() //la fonction sera appelé à chaque déplacement du slider(delay de 100ms mini entre deux appels)
       {
           var value = jQuery( "#pwm" ).slider( "option", "value" ); //on récupère la valeur actuel du slider
           analogWrite(0x09, value, 0x00); //appel de la fonction analogWrite avec en param. la valeur (value) actuel du slider (0x00 pas de ack demandé pour une question de perf entre deux requêtes)        
       });
       
       jQuery( "#pwm" ).delay(500).bind( "slidestop", function() //au relâchement (souris) du slider (delay mini de 500 entre deux appel de la fonction)
       {
           var value = jQuery( "#pwm" ).slider( "option", "value" ); //on récupère la valeur actuel du slider
            analogWrite(0x09, value, 0x01); //appel de la fonction analogWrite avec en param. la valeur (value) actuel du slider  (0x01 ack demandé)
       });
   
   });

Toute les options.
http://docs.jquery.com/UI/Slider

Edit: avait oublier de mettre le lien :sweat_smile:

Merci Osaka pour les commentaires de cette fonction, j'y vois plus clair..

Grâce a ton travail j'ai réussi a monter un serveur web et commander des lampes par l’intermédiaire d'un module 433 mhz , reste a l'améliorer graphiquement..
Par la suite je rajouterai des affichages des températures et taux d'humidité; je ne sais pas encore comment m'y prendre pour afficher les infos en temps réel , peut etre utilisé une BDD sql ou autre; si tu as un conseil a me donner je suit preneur.
Mais pour l'instant je vais recodé mes programmes pour reprendre ton principe de trame que je trouve très intéressante ..
{"str":0x02,"len":0x04, "cmd":0x02, "dt1":pin, "dt2":value, "dt3":ack, "end":0x03 };

Merci et bonne continuation ...

archibal11:
Par la suite je rajouterai des affichages des températures et taux d'humidité; je ne sais pas encore comment m'y prendre pour afficher les infos en temps réel

Pour les relevés de temps ou autres, j'envoyais une commande à intervalle régulier et je retournais via l'arduino les données en retour à la commande (requête).
Pour l'inscription en base de données le mieux c'est de parser au niveau socket php après récupération des données de retour "$buffer".
Niveau temps réel la vrai solution c'est les websocket je pense, parce qu'ici il y a une certaine latence à cause des différents traitements. (enfin pour tout ce qui est relevé genre temp toute les minutes mini via ajax devrait être suffisamment raisonnable).
J'en reparle ici Aidez nous ! Projet - Gestion domotique - #299 by system - Français - Arduino Forum.

function init()
{
	setInterval("getStatut()", 60000);
}

function getStatut()
{
  var dataJSon = {"0":0x02,"1":0x12,"2":0x12 };
  send(dataJSon);
}

Je vais étudier cela.
Par contre j'ai oublié de dire que j'aimerai aussi réaliser des courbes de température, donc dans ce cas j'ai pas le choix je dois passer par une BDD Sql ,l'arduino devra envoyé toute les 30 mn les infos dans la BDD en plus d'écouter d'éventuelle commande provenant de ma gestion des lampes.Comment gérer cela ? par TIMER peut etre?

Par contre il serait bien que ces données soit réalisé a heure fixe ex 13h 13h30 ... c'est plus joli.
Suis je obligé de rajouter sur l'arduino un module RTC ou bien récupérer l'heure par d'autre moyen? et comment m'y prendre?

Désolé de toutes ces questions , ce n'est pas facile de mélanger tout ces différents langages , j'avance par petit pas en réalisant de petit code pour comprendre leur fonctionnement et essayé d'adapter a mes besoins.

archibal11:
Je vais étudier cela.
Par contre j'ai oublié de dire que j'aimerai aussi réaliser des courbes de température, donc dans ce cas j'ai pas le choix je dois passer par une BDD Sql ,l'arduino devra envoyé toute les 30 mn les infos dans la BDD en plus d'écouter d'éventuelle commande provenant de ma gestion des lampes.Comment gérer cela ? par TIMER peut etre?

Ici ce que tu peux faire c'est un peux l'inverse de la partie cmd, la requête se fera côté arduino vers une page php et non plus du navigateur à la page php.

Un post récent traitait des requête a partir d'un arduino, sauf que c'était pour gérer des mails ici toi ce sera une bdd.
http://arduino.cc/forum/index.php/topic,111896.0.html

archibal11:
Par contre il serait bien que ces données soit réalisé a heure fixe ex 13h 13h30 ... c'est plus joli.
Suis je obligé de rajouter sur l'arduino un module RTC ou bien récupérer l'heure par d'autre moyen? et comment m'y prendre?

Pour l'heure etc, le module rtc reste quand même ce qu'il y a de plus fiable, maintenant si c'est juste pour inscription de l'heure de relevé de temp tu peux te servir du timestamp php au moment de l'inscription en bdd.

Grâce a setInterval je reçois bien toute les x secondes de l'arduino mon info de température par l’intermédiaire de la fonction suivante.

function log(msg)
{
  msg=msg+" &#176;"+" C";
  $("log").innerHTML=msg;
}

Mais voila je voudrais transmettre aussi 2 données supplémentaire qui seront transmis a 2 autres id("") différents.
Donc de l'arduino mon message en partance est par exemple : client.println("22.5:20.2:65");
et dans la fonction Log rajouté une explode pour retrouvé les 3 données séparément, genre :

function log($msg)
{
$msf=explode(":",$msg);
  $msg=$msg+" &#176;"+" C";
  $("log").innerHTML=$msg;
}

Avant d'ajouter la ligne explode le code ci avec $msg fonctionne mais lorsque explode et rajouté cela ne marche plus?
Quel est mon erreur? Y a t'il d'autres moyens pour arriver a mon but?
Merci.

http://php.net/manual/fr/function.explode.php
Je connais pas cette fonction explode mais apparemment elle retourne un tableau de chaines, donc si tu tentes $msg=$msg+$msf vu que ce ne sont pas les même type de variables ça ne fonctionnera pas.

il faudrait faire quelque chose comme

function log($msg)
{
$msf=explode(":",$msg);
  $msg=$msg+" &#176;"+" C";
  $msg=$msg+"\n"+$msf[0]+"\n"+$msf[1]+"\n"+$msf[2];
  $("log").innerHTML=$msg;
}

Quelque chose dans le genre (suis pas pro php :grin:).

Cela ne marche pas, msg est vide lorsque j'envoie client.print("2:"+Tempa"); soit par ex 2:18.5
mais lorsque j'envoie sans les : ca marche (j'ai 218.5 )

J'ai réessayé par ta méthode soit

 String json = "{\"start\":";
    json+=2;                                      
    json+=",\"Tempa\":";
    json+=Tempa;
    json+="}";

La ca marche j'ai {"start":2,"Tempa":18.5}
or je ne voudrais que 2:18.5 puis par traitement de la chaine récupérer 2 et 18.5 pour les affecter à des variables a et b par ex..

Ca y est j'ai trouvé...

de l'arduino j'envoie : "{"var1":x,"var2":y}" x=2 y = 5
dans la fonction log(msg) je rajoute
var objet = JSON.parse(msg);
var Data1 =objet.var1; // Data = 2
var Data2 =objet.var2; // Data = 5

Bonjour,

J’ai pas mal avancé à partir des éléments qu’a fournis Osaka. Encore mille fois merci à lui.

Je les ai petit à petit transformés pour que cela puisse correspondre à mon projet, et faire quelque chose de fonctionnel.
Ce que j’ai fait correspond à un bricolage, que beaucoup d’entre vous vont juger infâme, mais ça me permets d’apprendre, et de faire avancer mon projet.

Je sais que tôt ou tard il va falloir que je passe en PHP avec une petite base de données MySql, mais pour le moment ce n’est pas à ma portée (je verrai probablement cela durant les longues soirées d’hiver).

Pour l’instant je « gère » deux sorties en fonction de plages horaires (3 pour chaque sortie), avec une possibilité de « marche forcée ».
Je vais avoir à gérer une quinzaine de sorties (pour commencer), je compte faire 3 pages avec 5 sorties par page, je pense que plus de 5 sortie par page, ce sera illisible (déjà là, il faudra s’accrocher !) Mais pour les aspects visuels, je verrai encore après, avant tout je veux que cela fonctionne, je joins une copie d’écran avec les 2 sorties.

J’ai deux questions qui vont très probablement vous paraître triviales :

  1. Comment faire savoir à l’arduino quelle est la page (des 3) qui est concernée ? Ce qui reviendrait à transmettre un identifiant de la page active. J’ai essayé en vain, mais mes compétences en html sont très limitées.

  2. Comment écrire à un endroit précis dans le tableau ? Dans la dernière colonne, à coté de « Electrovanne », j’aimerai écrire « activée » ou « désactivée » en fonction de l’état de l’électrovanne. Actuellement je n’arrive à l’écrire qu’en dessous du tableau « EV1 activée ou désactivée » et « EV2 activée ou désactivée ».

Je ne sais pas si je suis bien clair dans mes questions.

Je joins l'ensemble des fichiers.

Bien à vous

Domoweb.zip (40.1 KB)

Domo_RTC_LCD_PCF8574lib_UIA_PH_DS18B20_LED_SD_NTP.ino (35.7 KB)

Brisebee:
Je les ai petit à petit transformés pour que cela puisse correspondre à mon projet, et faire quelque chose de fonctionnel.
Ce que j’ai fait correspond à un bricolage, que beaucoup d’entre vous vont juger infâme, mais ça me permets d’apprendre, et de faire avancer mon projet.

C'est comme ça qu'on apprend et qu'on retiens. :wink:

Brisebee:
Je sais que tôt ou tard il va falloir que je passe en PHP avec une petite base de données MySql, mais pour le moment ce n’est pas à ma portée (je verrai probablement cela durant les longues soirées d’hiver).

Pour les petites quantités de données et ce que tu désires faire tu verras les bdd c'est très simple.

Brisebee:

  1. Comment faire savoir à l’arduino quelle est la page (des 3) qui est concernée ? Ce qui reviendrait à transmettre un identifiant de la page active. J’ai essayé en vain, mais mes compétences en html sont très limitées.

Ici tu peux faire une fonction par formulaire ou si identique ajouter un ou des paramètres pour les différencier et ainsi séparer la fonction send() qui pourra alors envoyer différentes données, même autre que formulaires.

function sendForm(form)  //fonction qui sera appelé depuis la page html, form = numero du formulaire
{
  //appel de la fonction send(msg) chargé d'envoyé les différente valeurs trouvee grace a la fonction $(id)
  send(
	{
	  fnum: form,
	  hda1: $('hda1').value, mda1: $('mda1').value, hfa1: $('hfa1').value, mfa1: $('mfa1').value,
	  hda2: $('hda2').value, mda2: $('mda2').value, hfa2: $('hfa2').value, mfa2: $('mfa2').value,
	  hda3: $('hda3').value, mda3: $('mda3').value, hfa3: $('hfa3').value, mfa3: $('mfa3').value,
	  hdb1: $('hdb1').value, mdb1: $('mdb1').value, hfb1: $('hfb1').value, mfb1: $('mfb1').value,
	  hdb2: $('hdb2').value, mdb2: $('mdb2').value, hfb2: $('hfb2').value, mfb2: $('mfb2').value,
	  hdb3: $('hdb3').value, mdb3: $('mdb3').value, hfb3: $('hfb3').value, mfb3: $('mfb3').value,
	  EV1: $('EV1').checked, EV2: $('EV2').checked
	}
  );
}

function send(msg)
{
  // requête post vers socket.php avec les différentes valeurs du formulaire (msg) 
  jQuery.post("socket.php", msg, 
	function(data) //data contiendra la ou les données en retour de la requête
	{
	  $("retour").innerHTML = data; // on integre dans la balise portant l'id "retour" les data de retour
	});
}

function $(id)
{
  return document.getElementById(id); // fonction '

Dans la page html, appel de la fonction adapté à ton formulaire spécifique ou différent (différencier ici par un paramètre (1) que tu changeras sur chaque pages ou chaque formulaires de page).

<div><button id="bouton" onclick="sendForm(1)">Valider</button></div>

Entre (), c'est ici que php te serait utile comme les pages et formulaires sont assé similaire et répétitives, mais bon une chose à la fois :D.

Brisebee:
2) Comment écrire à un endroit précis dans le tableau ? Dans la dernière colonne, à coté de « Electrovanne », j’aimerai écrire « activée » ou « désactivée » en fonction de l’état de l’électrovanne. Actuellement je n’arrive à l’écrire qu’en dessous du tableau « EV1 activée ou désactivée » et « EV2 activée ou désactivée ».

Ça c'est le truc le plus ch... avec le html, savoir placer ses données ou autres au bon endroit c'est tout une sinécure, c'est pour celà que je n'ai jamais chercher de ce côté là niveau emplois :sleeping:.
En séparent la case en deux colonne ça ne marche pas ? recherche l'element html par son 'id'
}


Dans la page html, appel de la fonction adapté à ton formulaire spécifique ou différent (différencier ici par un paramètre (1) que tu changeras sur chaque pages ou chaque formulaires de page).

§DISCOURSE_HOISTED_CODE_1§


Entre (), c'est ici que php te serait utile comme les pages et formulaires sont assé similaire et répétitives, mais bon une chose à la fois :D.

> Brisebee:
> 2) Comment écrire à un endroit précis dans le tableau ? Dans la dernière colonne, à coté de « Electrovanne », j’aimerai écrire « activée » ou « désactivée » en fonction de l’état de l’électrovanne. Actuellement je n’arrive à l’écrire qu’en dessous du tableau « EV1 activée ou désactivée » et « EV2 activée ou désactivée ».

Ça c'est le truc le plus ch... avec le html, savoir placer ses données ou autres au bon endroit c'est tout une sinécure, c'est pour celà que je n'ai jamais chercher de ce côté là niveau emplois :sleeping:.
En séparent la case en deux colonne ça ne marche pas ?

Merci Osaka,
Je vais essayer ce que tu proposes pour identifier la page.

Pour ce qui concerne la position de "activée" ou "désactivé" dans une colonne, je n'ai pas essayé, comme tu le laisses entendre.
De toute manière, je ne sais pas comment indiquer où placer un bout de texte.

@+

Brisebee:
Pour ce qui concerne la position de "activée" ou "désactivé" dans une colonne, je n'ai pas essayé, comme tu le laisses entendre.
De toute manière, je ne sais pas comment indiquer où placer un bout de texte.

Pour placer des éléments à un endroit spécifique :
http://www.siteduzero.com/tutoriel-3-13566-le-positionnement-en-css.html#ss_part_4
http://www.siteduzero.com/tutoriel-3-13522-l-alignement.html