C'est encore moi
Bon, grâce à toutes vos remarques j'ai fais quelques modifs :
- Arduino Mega
- Shield Ethernet officiel
- clavier matriciel : 2,3,4,5,6,7,8,9
- écran LCD : 22,24,26,28,30,32
- 7 relais : 36,38,40,42,44,46,48
- 2 servos : 34,36
- LM35 : A15
Et mon problème est toujours le même ... je laisse un bout de mon code au cas ou quelqu'un aurait une petite idée.
// --- Inclusion des librairies ---
#include <SPI.h>
#include <Servo.h>
#include <math.h>
// --- librairies utilisées pour le module Ethernet ---
#include <Server.h>
#include <Client.h>
#include <Ethernet.h>
#include <EthernetDHCP.h>
// --- librairie pour le LCD ---
#include <LiquidCrystal.h>
// --- librairie pour stockage en mémoire flash programme ---
#include <Flash.h>
// --- librairies utilisées pour clavier matriciel ---
#include <Keypad.h> // inclusion de la librairie
// --- constantes des broches ---
const int L4=9; //declaration constante de broche
const int L3=8; //declaration constante de broche
const int L2=7; //declaration constante de broche
const int L1=6; //declaration constante de broche
const int C4=5; //declaration constante de broche
const int C3=4; //declaration constante de broche
const int C2=3; //declaration constante de broche
const int C1=2; //declaration constante de broche
const int var=1;
int compt=0;
//--- Constantes utilisées avec le clavier 4x4 ---
const byte LIGNES = 4; // 4 lignes
const byte COLONNES = 4; //4 colonnes
char touches[LIGNES][COLONNES] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}};
//--- tableaux de lignes et colonnes ---
byte BrochesLignes[LIGNES] = {L1, L2, L3, L4}; //connexions utilisées pour les broches de lignes du clavier
byte BrochesColonnes[COLONNES] = {C1, C2, C3, C4}; //connexions utilisées pour les broches de colonnes du clavier
char touche; // variable de stockage valeur touche appuyée
Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
char attempt[6]={0,0,0,0,0,0}; // used for comparison
int z=0;
// --- Déclaration des constantes des broches E/S numériques ---
const int RETRO=34;
const int SERVO=35;
const char* ip_to_str(const uint8_t*);
const int INTER[7]={36,38,40,42,44,46,48}; // Constante pour les broches
//--- Adresse mac de la shield Ethernet ----
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x4D, 0x7F };
//--- création de l'objet serveur ----
Server serveurHTTP(80); //port 80 = port HTTP
//--- Const pour Afficheur LCD 16x2 ----
const int RS=32;
const int E=30;
const int D4=28;
const int D5=26;
const int D6=24;
const int D7=22;
//--- Initialisation LCD en mode 4 bits ----
LiquidCrystal lcd(RS, E, D4, D5, D6, D7);
//--- crée un objet servo pour contrôler le servomoteur ----
Servo mon_servo;
//*******************************************\\
//*******************************************\\
//----- Definition du log/pass -------
String LOG = "******";
String PASS = "*****";
char PIN[6]={'1','2','3','4','5','6'};
//*******************************************
//*******************************************
//----- variables globales utiles -------
int placeEgal=0;
int placeBlanc=0;
int placeConcat=0;
int comptChar=0; // variable de comptage des caractères reçus
int angle_servo=0;
int servoPosition_int=0;
int tempPin =15;
int page=0;
float temperature; // floatant pour affichage a virgule de la temp
String maChaine="";
String chaine1="";
String chaine2="";
String maChaineConcat="";
String maChaine1Corrige ="";
String maChaine2Corrige ="";
String chaineRecue=""; // déclare un string vide global
String login="";
String password="";
String servoPosition="90";
String ip_str; // utilisé pour afficher l'adresse ip dans l'url
//------ tableau de String ----
// variables globales de mémorisation de l'état d'une case à cocher "" ou "checked"
String etatCase[7]={ "","","","","","",""};
//**************** FONCTION SETUP = Code d'initialisation *************************
// ********************************************************************************
// ********************************************************************************
void setup() { // debut de la fonction setup()
//---- initialise connexion série à 115200 bauds -----------------
Serial.begin(115200);
//---- initialise la connexion avec l'adresse MAC, l'adresse IP et le masque -----------------
EthernetDHCP.begin(mac);
const byte* ipAddr = EthernetDHCP.ipAddress();
const byte* gatewayAddr = EthernetDHCP.gatewayIpAddress();
const byte* dnsAddr = EthernetDHCP.dnsIpAddress();
//byte gatewayAddr[] = { 192,168,1,254 }; // utilisé quand ip fixe
//byte dnsAddr[] = { 255, 255, 255, 0 }; // utilisé quand ip fixe
ip_str = ip_to_str(ipAddr); // conversion en string pour l'injecter dans l'url
// ------------------ initialise le serveur HTTP -----------------
serveurHTTP.begin();
// ------------------ Broches en sorties numériques -----------------
for (int i=0; i<=6; i++) {
pinMode (INTER[i],OUTPUT); // Broche INTER configurée en sortie
}
mon_servo.attach(SERVO);
pinMode(SERVO, OUTPUT); //met la broche en sortie
pinMode(RETRO, OUTPUT); //met la broche en sortie
// --------------------- Initialise afficheur LCD --------------------
lcd.begin(16,2); // Initialise le LCD avec 16 colonnes x 2 lignes
delay(10); // pause rapide pour laisser temps initialisation
lcd.print("LCD OK") ; // affiche la chaîne texte - message de test
delay(2000); // pause de 2 secondes
lcd.clear(); // // efface écran et met le curseur en haut à gauche
delay(10); // pour laisser temps effacer écran
// ---------------- fonction de recuperation de l'ip ------------------
EthernetDHCP.maintain();
digitalWrite(RETRO, HIGH);
delay(10);
lcd.print("Adresse IP : "); // affcihe chaine txt
lcd.setCursor(0, 1); // deplace le curseur en ligne 2
lcd.print(ip_to_str(ipAddr)); // affiche l'ip
delay(2000); // pause de 2sec pour la lecture
lcd.clear(); // on efface l'écran pour afficher la suite
lcd.print("Passerelle : "); // idem pour la passerelle
lcd.setCursor(0, 1);
lcd.print(ip_to_str(gatewayAddr));
delay(2000);
lcd.clear();
lcd.print("Adresse DNS : "); // idem pour le dns
lcd.setCursor(0, 1);
lcd.print(ip_to_str(dnsAddr));
delay(2000);
lcd.clear();
digitalWrite(RETRO, LOW); // arret du retro eclairage
} // fin de la fonction setup()
// ********************************************************************************
// ********************************************************************************
// ********************************************************************************
//*************** FONCTION de l'adressage IP *************
const char* ip_to_str(const uint8_t* ipAddr)
{
static char buf[16];
sprintf(buf, "%d.%d.%d.%d\0", ipAddr[0], ipAddr[1], ipAddr[2], ipAddr[3]);
return buf;
}
// ********************************************************************************
// ********************************************************************************
void correctPIN() // faire si le pin est ok
{
lcd.print("* Correct PIN *");
delay(1000);
lcd.clear();
lcd.print(" Entrer PIN...");
delay(100);
}
void incorrectPIN() // faire si le code est incorrect
{
lcd.print(" * Try again *");
delay(1000);
lcd.clear();
lcd.print(" Entrer PIN...");
delay(100);
}
void checkPIN()
{
int correct=0;
for (int q=0; q<6; q++)
{
if (attempt[q]==PIN[q]) // on compare la saisie avec le code
{
correct++;
}
}
if (correct==6) // si les 6 sont correctes
{
correctPIN();
} else
{
incorrectPIN();
}
for (int zz=0; zz<6; zz++) // on vide
{
attempt[zz]=0;
}
delay(100);
}
void readKeypad()
{
char touche = clavier.getKey();
if (touche != NO_KEY)
{
switch(touche)
{
case '*':
z=0;
break;
case '#':
delay(100); // for extra debounce
lcd.clear();
checkPIN();
break;
default:
attempt[z]=touche;
z++;
}
}
}
Encore merci pour vos réponses
Amicalement,
Trigger