Go Down

Topic: Comment rajouter des conditions (IF) dans un programme (Read 289 times) previous topic - next topic

Yanis19

Bonsoir à vous, j'ai un programme qui regroupe trois programmes et je voudrais rajouter des conditions comme: Si la distance est < ou = à 15cm, envoyer message au numéro suivant"**********"

J'ai un capteur ultrason, un capteur d'humidité et une GSM SHIELD

Voici mon programme avec les trois programmes reunis (capteur humidité, ultrason et GSM SHIELD)au passage pouvez-vous me dire si vous trouvez mon code cohérent ?

Merci bien !!!


Code: [Select]


const int USTrig = 8; // Déclancheur sur la broche 8
const int USEcho = 9; // Réception sur la broche 9

#define vitesse 340 //vitesse du son 340 m/s
#include <GSM.h>

#define PINNUMBER "1612"

// initialize the library instance
GSM gsmAccess; // include a 'true' parameter for debug enabled
GSM_SMS sms;

// char array of the telephone number to send SMS
// change the number 1-212-555-1212 to a number
// you have access to
char remoteNumber[20]= "";
#include <DHT.h>
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
//define DHTPIN D2     // what pin we're connected to

DHT dht(A0, DHT22);

void setup()
{
  Serial.begin(9600);
    Serial.println("DHTxx test!");

    dht.begin();
  pinMode(USTrig, OUTPUT);
  pinMode(USEcho, INPUT);

  digitalWrite(USTrig, LOW);

  Serial.begin(9600);

#define vitesse 340 //vitesse du son 340 m/s

//setup()

  // initialize serial communications
  Serial.begin(9600);

  Serial.println("SMS Messages Sender");

  // connection state
  boolean notConnected = true;

  // Start GSM shield
  // If your SIM has PIN, pass it as a parameter of begin() in quotes
  while(notConnected)
  {
    if(gsmAccess.begin("1612") == GSM_READY)
      notConnected = false;
    else
    {
      Serial.println("Not connected");
      delay(1000);
    }
  }
  Serial.println("GSM initialized");
  sendSMS("Manque de croquette,veuillez remplir le réservoir !");
}


void sendSMS(String text){

  Serial.print("Message to mobile number: ");
  Serial.println(remoteNumber);

  // sms text
  Serial.println("SENDING");
 
  Serial.println();
  Serial.println("Message:");
  Serial.println(text);

  // send the message
  sms.beginSMS(remoteNumber);
  sms.print(text.c_str());
  sms.endSMS();
  Serial.println("\nCOMPLETE!\n"); 
}



void loop()
{
 
    // Reading temperature or humidity takes about 250 milliseconds!
    // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
    float h = dht.readHumidity();
    float t = dht.readTemperature();

    // check if returns are valid, if they are NaN (not a number) then something went wrong!
    if (isnan(t) || isnan(h))
    {
        Serial.println("Failed to read from DHT");
    }
    else
    {
        Serial.print("Humidity: ");
        Serial.print(h);
        Serial.print(" %\t");
        Serial.print("Temperature: ");
        Serial.print(t);
        Serial.println(" *C");
    }
  //1. Un état haut de 10 microsecondes est mis sur la broche "Trig"
  digitalWrite(USTrig, HIGH);
  delayMicroseconds(10); //on attend 10 µs
  //2. On remet à l'état bas la broche Trig
  digitalWrite(USTrig, LOW);

  //3. On lit la durée d'état haut sur la broche "Echo"
  unsigned long duree = pulseIn(USEcho, HIGH);

  if (duree > 30000)
  {
    //si la durée est supérieure à 30ms, l'onde est perdue
    Serial.println("Onde perdue, mesure échoué !");
  }
  else
  {

    //4. On divise cette durée par deux pour n'avoir qu'un trajet
    duree = duree / 2;

    //5. On calcule la distance avec la formule d=v*t
    float temps = duree / 1000.0; //on met en secondes
    float distance = temps * vitesse; //On multiplie par la vitesse, d=t*v

    //6. On affiche la distance
    Serial.print("Duree = ");
    Serial.println(temps); //Affiche le temps de vol d'un trajet en secondes
    Serial.print("Distance = ");
    Serial.println(distance); //affiche la distance mesurée (en mètres)
  }

  // petite pause
  delay(250);
}



lesept

Code: [Select]
if (distance > seuil) {
  sensSMS (message)
  ...autres instructions...
}
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Yanis19

Code: [Select]
if (distance > seuil) {
  sensSMS (message)
  ...autres instructions...
}


Cette condition je dois la placer dans le Void setup, loop ou c'est à part ?

lesept

A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

biggil

Quote
Code: [Select]
#define vitesse 340 //vitesse du son 340 m/s
La vitesse étant un nombre réel, tu devrais la déclarer avec 340. (ajouter un  point après la valeur). Encore mieux:
const float vitesse_du_son = 340.; remarque le nom plus explicite.
Par ailleurs cette ligne figure 2 fois dans le code.

Quote
char remoteNumber[20]= "";
Ca c'est moche, je ne sais pas si c'est correct. Ecris plutôt
char remoteNumber[20]= { '\ 0' };
'\0' est le symbole pour le caractère "fin de chaîne".

Plus grave, tu utilises cette chaîne sans jamais y avoir mis quelque chose de significatif !

Quote
Code: [Select]
//define DHTPIN D2     // what pin we're connected to
...
//setup()
Supprime les commentaires inutiles

Quote
Code: [Select]
  digitalWrite(USTrig, HIGH);
  delayMicroseconds(10); //on attend 10 µs
  //2. On remet à l'état bas la broche Trig
  digitalWrite(USTrig, LOW);

  //3. On lit la durée d'état haut sur la broche "Echo"
  unsigned long duree = pulseIn(USEcho, HIGH);
Pour être précis, il faudrait ajouter 10 microsecondes à la durée mesurée.

Quote
Code: [Select]
float temps = duree / 1000.0; //on met en secondes
duree est en microsecondes, donc il faut diviser par 1000000. et non par 1000. pour avoir des secondes.

Quote
Code: [Select]
// petite pause
  delay(250);
Pourquoi faire ?

Au final, indente ton code correctement ! Utilise Control-T dans l'IDE.

Go Up