Problème WebServer avec PIRSENSOR

Bonjour,

J’ai créé un lourd programme avec 1 capteur de température, 1 capteur de luminosité et 1 détecteur de mouvement de type PIR.
Le problème est que quand tous ces capteurs sont utilisés l’Ethernet ne fonctionne mais les capteurs depuis le moniteur série fonctionne même l’afficheur LCD fonctionne.
Quand je met hors service juste le PIR sensor, tout remarche avec le WebServer.

#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h>
#include <Adafruit_MCP23017.h>
#include <Adafruit_RGBLCDShield.h>

Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();

int photocellPin = 0;
int photocellReading;
int LED=2;
float mesure=0;
float tension=0;
float temperature=0;
float tempmin=100;
float tempmax=0;
int portana0 = 1;
int i = 0;
int ledPin = 7; //Numéro du port numérique ou est branché la LED
int PIRsensor = 13; //Numéro du port analogique sur lequel le mouvement est détecté

int val = 0; //Variable qui stocke l’état du mouvement
const int buttonPin = 8; // Numéro de port numérique sur lequel est branché le bouton
int buttonState = LOW;
boolean pirState=LOW; //Variable qui stocke l’état du bouton
int Lettre = 0;

// Initialisation avec de l’adresse MAC avec celle de mon Arduino Ethernet
byte mac = { 0x90, 0xA2, 0xDA, 0x00, 0xD5, 0x52 };
// Initialisation de l’adresse IP locale de mon serveur WEB Arduino que j’ai choisie
byte ip = { 10,139,56,108 };

// Création de l’objet server de type EthernetServer disponible sur le port 80
EthernetServer server(80);

void setup()
{
// Initialisation de la connexion Ethernet
Ethernet.begin(mac, ip);
// Démarrage du serveur WEB server
server.begin();
// Initialisation de la liaison série
Serial.begin(9600);
pinMode(LED, OUTPUT);
lcd.begin(16, 2);
pinMode(ledPin, OUTPUT); //La LED est en sortie numérique
// pinMode(PIRsensor, INPUT); //Le capteur est en entrée analogique
pinMode(buttonPin, INPUT); //Le bouton est en entrée numérique
Serial.begin(9600); //Initialisation de liaison série à 9600 bauds
}

void loop()
{
analogReference(DEFAULT);
i =0;
while (i < 10)
{

photocellReading = analogRead(photocellPin);
i = i+1;
delay(100);

}
photocellReading = analogRead(photocellPin);

Serial.print(“Valeur en lux captee = “);
Serial.print(photocellReading);
if (photocellReading < 799) {
digitalWrite(LED,HIGH);
Serial.println(” - Nuit”);
} else if (photocellReading > 800) {
digitalWrite(LED,LOW);
Serial.println(" - Jour");

}
{
analogReference(INTERNAL);
i =0;
while (i < 10)
{

mesure = analogRead(portana0);
i = i+1;
delay(100);

}
mesure = analogRead(portana0);
tension = mesure * 1.1 / 1024;

temperature = tension * 100;
if (temperature < tempmin) {tempmin = temperature;}
if (temperature > tempmax) {tempmax = temperature;}

Serial.print("Tension : “); Serial.print (tension); Serial.print(” Volts - “);
Serial.print(“Temperatures :”);
Serial.print(” >Actuelle : “); Serial.print (temperature);
Serial.print(” >Mini : “); Serial.print (tempmin);
Serial.print (” >Max : "); Serial.println (tempmax);
}

lcd.setCursor(0, 0);
lcd.print(“La temperature”);
lcd.setCursor(0, 1);
lcd.print("est de ");
lcd.print(temperature);
lcd.print(“C”);

delay(100);

buttonState = digitalRead(buttonPin);
val = digitalRead(PIRsensor); //Lecture du capteur de mouvement
if (val == HIGH) { //Vérification s’il y a du mouvement
digitalWrite(ledPin, HIGH); //Si il y a du mouvement, mettre la LED à l’état HAUT.
Serial.println(“Lettre introduite”);
pirState = HIGH;

}

if ( buttonState== LOW){
//Si on appuie sur le bouton on réinitialise tout
digitalWrite(ledPin, LOW); // La LED est éteinte
Serial.println(“Boite aux lettres remis a zero”);
pirState = LOW;

}

if (pirState==HIGH){
Lettre=1;
Serial.println(Lettre);
}else{
if (pirState==LOW)
{
pirState=LOW;
Lettre=0;
Serial.println(Lettre);
}
}

//Ecoute des requetes client (browser WEB)
EthernetClient client = server.available();
//Une requete est à traiter
if (client) {
//Envoi de la réponse HTTP au browser qui a envoyé une requete
while (client.connected()) {
if (client.available()) {
//Envoi du header standard HTTP au browser
client.println(“HTTP/1.1 200 OK”);
client.println(“Content-Type: text/html”);
client.println();
//Envoi des données
client.println("Temperature = ");
client.print(temperature);
client.println();
client.println("Luminosite = ");
client.print(photocellReading);
client.println();
client.println("Y’a t’il une lettre ? = ");
client.print(Lettre);

client.stop();} //Cloture connexion

lcd.setCursor(0, 0);
lcd.print(“La temperature”);
lcd.setCursor(0, 1);
lcd.print("est de ");
lcd.print(temperature);
lcd.print(“C”);
}}

}

Je // pinMode(PIRsensor, INPUT); et tout remarche, de quoi pourrait venir ce problème ?
J’ai absolument besoin d’envoyer sur le WebServer l’état du capteur de mouvement.

Cordialement,
Tom.

bonjour,
change simplement de pin
mets le en A0-1-2-3-4-5

Il est en numérique là, et j'ai déjà essayé rien y change.

Normal : pin 13 => SCK du SPI

Donc je le met en port numérique 1 sa passerais ?

Il suffit de suivre ce que suggérait infobarquee :wink: les pins analogiques sont digitaux aussi

Il faut éviter les pin 13 à 10 qui servent à la communication SPI avec le shield

au pire (pas fait expres pour le jeu de mot), tu mets

int PIRsensor = A0;              //Numéro du port analogique sur lequel le mouvement est détecté
//boolean pirState=LOW;    //Variable qui stocke l'état du bouton, tu vire ca

setup
pinMode(PIRsensor, INPUT);    //Le capteur est en entrée analogique
......
  val = analogRead(PIRsensor);  //Lecture du capteur de mouvement
if (val > 1000) {      
.......

Je l’ai installé sur le port numérique 1 et tout semble rentrée dans l’ordre, j’avais déjà rencontré ce problème avec l’utilisation d’un servo moteur.