Voila je suis nouveau sur ce forum, et j'ai commencé un projet semi-domotique dans ma chambre. Ce projet consiste à commander des prises, des lampes, un volet roulant ... Pour cela j'avais commencé à installer un automate programmable industriel. Cela fonctionne mais n'est pas très ludique, en effet pour allumer ou éteindre les différents composants je doit faire un certain nombre d'impulsions sur un bouton poussoir. Donc pour résoudre ce problème j'ai pensé relié ce système au web, avoir une page html pour contrôler le tout et donc je me suis tourné vers l'arduino Uno Rev 3 + ethernet shield qui va avec. Après quelque test, j'ai réussi à pondre un commencement de code pour contrôler deux leds à partir d'un page html créé par l'arduino. Seulement des que j'essaye d'en contrôler 3 le code ne fonctionne plus, je ne peu plus rien contrôler.
c'est pourquoi aujourd'hui je fais appelle à vous, cela fait plus d'un mois que je cherche des morceau de code, des solutions,.... partout sur le web dans des livres ... seulement rien ne résout mon problèmes.
Il y a effectivement conflit entre le port SPI et les broches des leds dans le second code.
Utilise des broches autre que 0/1 (port série) et 10/11/12/13 (port SPI) et ton programme devrait marcher.
J'ai essayé d'appliqué vos conseils mais cela ne fonctionne pas plus. Et d'ailleurs je suis bien embêté car je comptais utilisé tout les pins que j'ai déclaré car je dois communiqué avec un automate et pour se faire je contait mettre en oeuvre un système de langage sur 4 pins (4 pin de sortie, 4 pins d'entrée). Auriez-vous aussi un conseil la dessus qui ne soit pas trop coûteux?
En effet, j'ai bien besoin de 8 broches et je n'avais pas pensé au broches analogiques autant pour moi. je refait mon code re-teste et vous ferais part de l'avancement de tout ceci. Et encore merci de m'aider la dessus.
Cordialement,
Thibault BOULLIER
RE-POST:
J'ai changé mes déclarations, j'ai pris les sortie au pin 2,3,5,6 et mes entrées sur A0,A1,A2,A3. mais sa ne fonctionne toujours pas mieux je ne sait plus quoi faire. Auriez-vous une idée ?
Cordialement,
Thibault BOULLIER
RE-POST:
Il n'y aurais pas moyen de faire cela a l'aide de matrice ? Si oui, Pouvez-vous m'en dire plus sur les matrices ?
Et après des tests j'ai remarqué que si il y avait plus de 4 conditions sa ne fonctionnait plus. Bizarre
Le câblage fonctionne car je n'ais pas mis d'interrupteurs mais que des leds pour le moment, et les leds fonctionnent j'ai réussit à les faire clignoter. Pour le programme le voici: Arduino code chambre - Pastebin.com
mon problème exact c'est que je charge mon programme dans l'arduino sauf que quand je clique sur l'un de mes boutons sur ma page rien de se passe peut importe le bouton hors quand je refait le code pour seulement 2 leds tout fonctionne à merveille et je ne comprend pas pourquoi.
et je n'ai pas compris mes variable pin2, pin3, ... servent bien a quelque chose et je m'en sert dans tout mon code.
et pour les chaîne de caractères je n'ais pas compris se que tu a voulu me dire.
colben:
mon problème exact c'est que je charge mon programme dans l'arduino sauf que quand je clique sur l'un de mes boutons sur ma page rien de se passe peut importe le bouton hors quand je refait le code pour seulement 2 leds tout fonctionne à merveille et je ne comprend pas pourquoi.
Ok, sinon change de technique : utilise une librairie de webserver toute prête :
Au moins comme ça tu éviteras tout problème de protocole.
Tu as un exemples de led + bouton ici :
colben:
et je n'ai pas compris mes variable pin2, pin3, ... servent bien a quelque chose et je m'en sert dans tout mon code.
Déjà tes variables ne sont pas constantes (mot clef "const"), ensuite tu as des pinMode() avec juste des chiffres et des pinMode() avec tes variables.
Du coup regarde pour la pin 4, tu te retrouve avec deux pinMode(4, OUTPUT) c'est pas génial.
colben:
et pour les chaîne de caractères je n'ais pas compris se que tu a voulu me dire.
"blabla" -> F("blabla")
En faisant ça tu évites que ces chaines de caractères soit en mémoire RAM et viennent tout faire planter.
Apres maintes tentatives pour comprendre la bibliothèque webduino, je revient demander de l'aide. Car je ne comprend pas comment m'en servir malgré les exemples fourni avec. Surtout je ne comprend pas comment récupérer l'information d'un GET (ou d'un POST) venant de la page et plus particulièrement de bouton. Pourriez-vous m'indiquer des explications en français car l'anglais n'est pas du tout mon fort malheureusement =(.
Après quelque semaine d'épreuves je me suis remis à mon code, seulement je suis un peu perdu car j'ai essayé de comprendre se que tu m'as envoyer par le lien et voici un morceau de code très incomplet que j'ai "pondu" :
Aie aie aie ... tu n'as strictement rien compris au topic que je t'ai linké.
Bon, vu que tu n'arriveras manifestement pas à faire un formulaire commence petit avec un simple lien.
De plus ton code HTML est bourré (mais alors bourré de chez bourré) d'erreurs : balises fermantes oubliés, truc pas nette, ...
On reprend donc tout de zéro, voici un exemple simple à comprendre :
// Includes
#include "SPI.h"
#include "Ethernet.h"
#include "WebServer.h"
// Param réseau
static uint8_t mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
static uint8_t ip[] = {
192, 168, 1, 30 };
// Déclaration du serveur web (port 80 sans préfix)
WebServer webserver("", 80);
// Fonction affichant la page d'acceuil
void defaultCmd(WebServer &server, WebServer::ConnectionType type, char *, bool)
{
// Envoi le code HTTP 200
server.httpSuccess();
// Si la méthode est GET
if (type == WebServer::GET)
{
P(message)=
"<html>"
" <head>"
" <title>Page leds</title>"
" </head>"
" <body>"
" <table border='1'>"
" <tr>"
" <td>led 1</td>"
" <td><a href=\"action?action=1&led=1\">allumer</a></td>"
" <td><a href=\"action?action=0&led=1\">eteindre</a></td>"
" <td>ON</td>"
" </tr>"
" <tr>"
" <td>led 2</td>"
" <td><a href=\"action?action=1&led=2\">allumer</a></td>"
" <td><a href=\"action?action=0&led=2\">eteindre</a></td>"
" <td>ON</td>"
" </tr>"
" <tr>"
" <td></td>"
" <td><a href=\"action?action=1&led=0\">Tout allumer</a></td>"
" <td><a href=\"action?action=0&led=0\">Tout eteindre</a></td>"
" <td></td>"
" </tr>"
" </table>"
" </body>"
"</html>";
// Envoi le texte de la page d'acceuil
server.printP(message);
}
}
// Fonction traitant une commande
void formCmd(WebServer &server, WebServer::ConnectionType type, char * urlTail, bool tailComplete)
{
// Buffer pour les arguments
char nameBuf[16], valueBuf[16];
int nameLen = 16, valueLen = 16;
// Action à réaliser
byte action = 0; // 0 = eteindre, 1 = allumer
// Traite tout les arguments dans l'ordre d'apparition
while (server.nextURLparam(&urlTail, nameBuf, nameLen, valueBuf, valueLen)) {
// Si c'est "action=xxx"
if (strcmp(nameBuf, "action") == 0) {
// Traite la valeur
switch(valueBuf[0]) {
case '0':
action = 0;
break;
case '1':
action = 1;
break;
default:
return;
}
// Si c'est "led=xxx"
}
else if (strcmp(nameBuf, "led") == 0) {
// Traite la valeur
switch(valueBuf[0]) {
case '0':
// Allume ou éteint toute les leds
break;
case '1':
// Allume ou éteint la led 1
break;
case '2':
// Allume ou éteint la led 2
break;
default:
return;
}
// Si c'est autre chose
}
else {
return;
}
// Reset des tailles de buffer pour la boucle suivante
nameLen = 16, valueLen = 16;
}
}
void setup()
{
Ethernet.begin(mac, ip);
webserver.setDefaultCommand(&defaultCmd);
webserver.addCommand("action", &formCmd);
webserver.begin();
}
void loop()
{
char buff[64];
int len = 64;
webserver.processConnection(buff, &len);
}
Quand tu auras compris le principe tu pourras changer le code pour utiliser un formulaire.
Mais pour le moment fait marcher la version simple