Bonsoir les arduigeeks,
je suis débutant dans la programmation en Arduino, j'ai suivi quelques tuto sur le net et me voila bloqué sur un projet personnel.
Pour interfacer un compteur d'eau à sortie impulsionnel à ma domotique je passe part un arduino pour le comptage d'impulsion. J'ai réalisé un programme pour un serveur web qui envoi un fichier XML et un autre pour sauvegarder sur carte SD l'index du compteur.
Mon problème et que je n'arrive pas à faire fonctionner en même temps ma carte SD en SPI et mon shield Ethernet(ENC28J60) en SPI. La carte SD fonctionne mais pas le shield ethernet.
Si je débranche l'un ou l'autre ça fonctionne bien mais pas les 2 en même temps. J'ai du mal comprendre un truc avec les esclaves en SPI je pense.
Voici mon code:
//////// Bibliothèque ////////
#include <SPI.h>
#include <SD.h>
#include <UIPEthernet.h>
#include <UIPServer.h>
#include <UIPClient.h>
File monFichier;
const int pinSD = 7; // pin du SPI pour le carte SD
const int pinEth = 53; // pin du SPI pour la carte Ethernet
int index = 0;
//////////////////////////////
///////// Ethernet /////////
//////////////////////////////
///////// définition variable ethernet /////////
#define MACADDRESS 0x00,0x01,0x02,0x03,0x04,0x05
#define MYIPADDR 192,168,0,6
#define MYIPMASK 255,255,255,0
#define MYDNS 192,168,0,211
#define MYGW 192,168,0,211
#define LISTENPORT 80
#define UARTBAUD 115200
///////// Configuration Ethernet /////////
uint8_t mac[6] = {MACADDRESS};
uint8_t myIP[4] = {MYIPADDR};
uint8_t myMASK[4] = {MYIPMASK};
uint8_t myDNS[4] = {MYDNS};
uint8_t myGW[4] = {MYGW};
EthernetServer server = EthernetServer(LISTENPORT);
void setup() {
///// Initialisation des entrées et sorties /////
Serial.begin(115200); // init com série
pinMode(pinEth, OUTPUT); // init mode sortie pour la led d'impulsion
pinMode(pinSD, OUTPUT); // init mode sortie pour la led d'impulsion
digitalWrite(pinSD, HIGH); // Mise à 0 de la sélection de l'esclave shield SD
digitalWrite(pinEth, HIGH); // Mise à 0 de la sélection de l'esclave shield Ethernet
initSD(); // FONCTION d'init de la carte SD (voir onglet SD)
initEthernet(); // FONCTION d'init ethernet (voir onglet ethernet)
}
void loop() {
serveurEth();
}
void initSD() {
//// Sélection de l'esclave shield Ethernet
digitalWrite(pinSD, LOW);
if (!SD.begin(pinSD)) { // on test la com SD
Serial.println("Erreur init SD");
return; // stoppe le programme
}
Serial.println("SD initialisée !");
//// Désélection de l'esclave shield Ethernet
digitalWrite(pinSD, HIGH);
}
void initEthernet() {
//// Sélection de l'esclave shield Ethernet
digitalWrite(pinEth, LOW);
//// Initialisation du module ethernet //////
Ethernet.begin(mac,myIP,myDNS,myGW,myMASK);
//// Démarre serveur + information mode debug ////
server.begin();
Serial.print(F("Le serveur est disponible ici : "));
Serial.println(Ethernet.localIP());
Serial.println(F("*** Fin de la configuration ***"));
//// Désélection de l'esclave shield Ethernet
digitalWrite(pinEth, HIGH);
}
void serveurEth() {
//// Sélection de l'esclave shield Ethernet
digitalWrite(pinEth, LOW);
if (EthernetClient client = server.available()) //on écoute le port
{
if (client) { //si client connecté
Serial.println("Client en ligne\n"); //on le dit...
if (client.connected()){ //si client connecté
while (client.available()) { //tant qu'il y a des infos à transmettre
char c=client.read(); //on lit le caractère
Serial.write(c); //on écrit le caractère sur le moniteur série
delay(1); //délai d'écriture
}
//Réponse au client
client.println("HTTP/1.1 200 OK"); // type du HTML
client.println("Content-Type: text/xml"); //type de fichier et encodage des caractères
client.println("Connection: close"); // fermeture de la connexion quand toute la réponse sera envoyée
client.println(); //saut de ligne obligatoire avant la suite
client.println("<root>");
client.println("<indexEau>");
client.println("</indexEau>");
client.println("</root>");
client.stop(); //on déconnecte le client
Serial.println("Fin de communication avec le client");
}
}
}
//// Désélection de l'esclave shield Ethernet
digitalWrite(pinEth, HIGH);
}
Merci d'avance pour votre aide