Bonjour, bonsoir j'aimerai configurer une alarme activable à l'aide d'un mot de passe sur un pad numérique. Le but est que quand le capteur ultrason calcule une distance inférieure à 15 cm, une led rouge s'allume et un email est envoyé à l'utilisateur. Pour l'instant, le pad active bel et bien le capteur ultrason, mais ce-dernier capte toujours une distance de 0 cm, en ce qui concerne le Shield Ethernet, il envoie bien un email.
Cependant, j'ai retesté en enlevant le code du Shield Ethernet, et là le capteur ultrason se remet à fonctionner correctement.
Voici mon code ci-dessous (je suis débutant, soyez indulgents ) !
Merci de votre attention et pour les futurs réponses !
#include <Ethernet.h>
#include <SPI.h>
#define ALARM 15 // A partir de 15 cm et moins, l'alarme se déclenchera
#include <Keypad.h> // On insère la bibliothèque utilisée.
String code=""; // Chaque nombre tapé sera compris la dedans et constituera notre code.
String motdepasse="123"; // Le mot de passe nécessaire pour activer la bonne LED.
const byte ROWS = 4; //Nous indiquons que le keypad a 4 lignes
const byte COLS = 3; // Nous indiquons que le keypad a 4 colonnes
const int led_verte = 12; // Commande optionnel, la bibliothèque le fait d'office.
const int led_rouge = 13;
const int trig = 10;
const int echo = 11;
long lecture;
long cm;
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x59, 0x67 };
char server[] = "smtp.orange.fr";
EthernetClient client;
char hexaKeys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'#','0','*'}
// On insère tous les chiffres et symboles disponible sur le pavé numérique.
};
byte rowPins[ROWS] = {5, 4, 3, 2};
byte colPins[COLS] = {8, 7, 6};
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
// Création du pad numérique en tant que clavier.
void setup(){
pinMode(led_verte, OUTPUT); // On déclare la led verte comme un sortie
Serial.begin(9600); // Nécessaire pour communiquer avec le "moniteur série"
pinMode(trig, OUTPUT); // "Trig" est en sortie pour envoyer le signal au capteur
digitalWrite(trig, LOW);
pinMode(echo, INPUT); // "echo" correspond au retour du capteur
pinMode(led_rouge, OUTPUT);
pinMode(4,OUTPUT);
digitalWrite(4,HIGH);
Ethernet.begin(mac);
delay(2000);
}
void loop(){
byte inChar;
char customKey = customKeypad.getKey();
if (customKey){
if(customKey=='#'){
Serial.print("Le code saisi est:");
Serial.println(code); ;
}
else if (customKey=='*'){
if (code == motdepasse){
Serial.println("Alarme activee");
digitalWrite(12,HIGH);
digitalWrite(13,LOW);
delay(5000);
digitalWrite(12,LOW);
do {
digitalWrite(trig, HIGH);
delay (0.01);
digitalWrite(trig, LOW);
lecture = pulseIn(echo, HIGH); // Mesure le temps que la pin echo est à l'état HAUT
cm = lecture / 58; // Calcul de la distance : distance = (durée de l’impulsion (en µs) / 58
Serial.print("Distance en cm : ");
Serial.println(cm);
} while (cm >= ALARM);
if (cm <= ALARM);
{
digitalWrite(led_rouge, HIGH);
delay (5000);
digitalWrite(led_rouge, LOW);
if(sendEmail()) Serial.println(F("Email envoyé"));
else Serial.println(F("echec de l'envoie"));
}
delay(1000);
}else{
Serial.println("Mauvais code");
digitalWrite(13,HIGH);
delay (5000);
digitalWrite(13,LOW);
}
code="";}
else{
code=code+customKey; //Le code devra contenir en plus des chiffres une de ses lettres
}
}
}
byte sendEmail()
{
byte thisByte = 0;
byte respCode;
if(client.connect(server,25)) {
Serial.println(F("connecté"));
} else {
Serial.println(F("connection echouee"));
return 0;
}
if(!eRcv()) return 0;
Serial.println(F("Sending helo"));
// Renseignez votre ip publique
client.println(F("helo ................."));
if(!eRcv()) return 0;
Serial.println(F("Sending From"));
// Renseignez l'adresse email expéditrice
client.println(F("MAIL From: <...................>"));
if(!eRcv()) return 0;
// Renseignez l'adresse email receveur
Serial.println(F("Sending To"));
client.println(F("RCPT To: <................>"));
if(!eRcv()) return 0;
Serial.println(F("Sending DATA"));
client.println(F("DATA"));
if(!eRcv()) return 0;
Serial.println(F("Mail envoyé avec succes !"));
// Renseignez l'adresse email receveur
client.println(F("To: <...................>"));
// Mettez l'adresse e-mail expéditrice
client.println(F("From: <.................>"));
client.println(F("Subject: Intrusion !\r\n"));
client.println(F("Presence dectectee ! millis= "));
client.println(millis());
client.println(F("."));
if(!eRcv()) return 0;
Serial.println(F("Sending QUIT"));
client.println(F("QUIT"));
if(!eRcv()) return 0;
client.stop();
Serial.println(F("disconnected"));
return 1;
}
byte eRcv()
{
byte respCode;
byte thisByte;
int loopCount = 0;
while(!client.available()) {
delay(1);
loopCount++;
// Si rien reçu pendant 10 secondes, l'envoie d'email est coupé
if(loopCount > 10000) {
client.stop();
Serial.println(F("\r\nTimeout"));
return 0;
}
}
respCode = client.peek();
while(client.available())
{
thisByte = client.read();
Serial.write(thisByte);
}
if(respCode >= '4')
{
efail();
return 0;
}
return 1;
}
void efail()
{
byte thisByte = 0;
int loopCount = 0;
client.println(F("QUIT"));
while(!client.available()) {
delay(1);
loopCount++;
// Si rien reçu pendant 10 secondes, l'envoie d'email est coupé
if(loopCount > 10000) {
client.stop();
Serial.println(F("\r\nTimeout"));
return;
}
}
while(client.available())
{
thisByte = client.read();
Serial.write(thisByte);
}
client.stop();
Serial.println(F("Déconnecté"));
}