[Programmation] Module Arduino Shield
Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

Module Arduino Shield



  1. #1
    jeannos

    Module Arduino Shield


    ------

    Bonjour,
    J'utilise le programme donné par la bibliothèque GSM d'Arduino pour envoyer un sms, cependant j'aimerai l'envoyer automatiquement, sans devoir appuyer sur entrée et taper manuellement le numéros et le message, j'ai essayer plusieurs variable en mettant le numéros dedans mais rien.

    Voici le code :

    Code:
     
    // Inclure la bibliothèque GSM
    #include <GSM.h>
    
    #define PINNUMBER "0000"
    
    // initialiser l'instance de bibliothèque
    GSM gsmAccess;
    GSM_SMS sms;
    
    // Fonction d'initialisation de la carte (se fait qu'une seule fois) 
    void setup() {
      // initialiser les communications série et attendre l'ouverture du port:
      Serial.begin(9600); // Vitesse de donnée : 9600 bits/s
      while (!Serial) {
        ; // Attendre que le port série se connecte.
      }
    
      Serial.println("Préparation à l'envoie du message ");
    
      // Etat de la connexion
      boolean notConnected = true; 
    
      // Démarrer le bouclier GSM
      while (notConnected) {
        if (gsmAccess.begin(PINNUMBER) == GSM_READY) {
           notConnected = false;
        } else {
          Serial.println("GSM non connecter");
          delay(1000);
        }
      }
    
      Serial.println("GSM initialisé");
      delay(1000);
    }
    
    // Fonction principale, elle se répète à l'infini (boucle infini) 
    void loop() {
    
      Serial.print("Entrer le numéros de téléphone: ");
      char remoteNum[20];  // telephone number to send sms
      readSerial(remoteNum);
      Serial.println(remoteNum);
    
      // sms text
      Serial.print("Maintenant entrer le Message à envoyer: ");
      char txtMsg[200];
      readSerial(txtMsg);
      Serial.println("Patientez");
      Serial.println();
      Serial.println("Message:");
      Serial.println(txtMsg);
    
      // Envoyer le Message
      sms.beginSMS(remoteNum);
      sms.print(txtMsg);
      sms.endSMS();
      Serial.println("\nCOMPLETE!\n");
    }
    
    
    int readSerial(char result[])
    {
      //Compteur qui indique combien de caractères ont déjà été ajoutés
      // à la chaîne, sert aussi d'indice pour écrire le caractère courant avec []
      int i = 0;
      
    
      // boucle infinie (qui peut être interrompue par break, ou ici, par return)
      while (1) {
        while (Serial.available() > 0) {
          // Lit un caractère sur le port série
          char inChar = Serial.read();
          // si c'est un saut de ligne, on termine la chaîne avec un '\0'
          // (le caractère '\0' est un indicateur de fin de chaîne C)
          // puis on quitte la fonction avec return
          if (inChar == '\n') {
            result[i] = '\0';
            Serial.flush();// Ne sert à rien depuis Arduino 1.0 pour la lecture.
                            // flush() sert à attendre que les données dans le
                            // buffer d'écriture soient envoyées sur le port série
            return 0;
          }
            // Tous les autres caractères sont ajoutés à la chaîne
          // en incrémantant le compteur.
          // Sauf le caractère retour chariot qui est juste ignoré.
          // ('\r' fait généralement partie de la séquence "\r\n" qui indique la
          // fin d'une ligne)
          if (inChar != '\r') {
            result[i] = inChar;
            i++;
          }
        }
      }
    }

    -----

  2. #2
    freepicbasic

    Re : Module Arduino Shield

    Si ça fonctionne en mode saisie manuel, ça devrait fonctionner comme ça :
    Il faudrait un événement déclencheur , à défaut j'ai mis une attente de 20 secondes avant de reboucler...

    Code:
    // Fonction principale, elle se répète à l'infini (boucle infini) 
    void loop() {
      char remoteNum[20];  // telephone number to send sms
      char txtMsg[200];      // sms text
     
      strcpy(remoteNum,"0600000000");
      strcpy(txtMsg,"Mon message");
    
      // Envoyer le Message
      sms.beginSMS(remoteNum);
      sms.print(txtMsg);
      sms.endSMS();
      Serial.println("\nCOMPLETE!\n");
    
     delay(20000); // attend 20 secondes avant de recommencer
    }
    A+, pat

  3. #3
    jeannos

    Re : Module Arduino Shield

    Bonjour, merci beaucoup cela à fonctionner !
    Peux tu m'expliquer à quoi sert la fonction strcpy ? J'avais pourtant essayer beaucoup de variable en vain ! Merci

    J'aimerais juste envoyer ce message une seul fois, je dois mettre quoi pour stoper ?

  4. #4
    freepicbasic

    Re : Module Arduino Shield

    strcpy = string copy
    copie d'une chaine de caractères

    si la variable est une chaine de caractères
    c'est à dire un tableau du genre;
    char Msg[20];

    on met des caractères ASCII et pour terminer la chaine un 0 ou '\0'
    on peut écrire
    Msg[0]='A';
    Msg[1]='B';
    Msg[2]='C';
    Msg[3]='\0';

    ou bien
    strcpy(Msg,"ABC");

    c'est pareil...

    pour bloquer le programme
    while(1);
    Mais le programme sera figé et ne fera plus rien, il faudra rebooter.


    Généralement on préfère déclencher avec un événement , par exemple ; un bouton ou un capteur ,une heure , une alarme, etc....
    A+, pat

  5. A voir en vidéo sur Futura
  6. #5
    jeannos

    Re : Module Arduino Shield

    Ah d'accord donc [200] c'est pas les caractères, c'est le code ASCII ?

    J'ai un élément déclencheur mais sa c'est dans le projet final, dans l'assemblage, avec tout les autres programme, là j'aurait voulu mettre celui la seul, donc je vais mettre une boucle oui.

  7. #6
    jeannos

    Re : Module Arduino Shield

    Si j'ai bien compris char remoteNum[20]; char txtMsg[200]; permettent de crée des tables asci ?
    Et strcpy permet de copier ce que l'on veut dans le tableau qui va convertir en table ascii notre message et notre numéros pour le PC ?

  8. #7
    freepicbasic

    Re : Module Arduino Shield

    remoteNum[20]; char txtMsg[200];
    20 et 200 c'est la longueur des tableaux
    La mémoire réservée pour chaque chaine.

    La chaine de 20 octets aura au max 19 caractères ASCII + 1 0 à la fin.

    strcpy permet de copier une chaine dans une autre
    ainsi
    strcpy (txtMsg,remoteNum );
    copie le contenu de remoteNum dans txtMsg

    ATTENTION à la longueur de la chaine , si on fait l'inverse il ne faudra pas dépasser la longueur de la plus petite.
    le 0 donnant toujours la fin de chaine , ainsi remoteNum peut avoir un message de seulement 10 caractères si on veut.

    strcpy se fini avec le 0, si on fait une copie d'une chaine plus longue que la mémoire réservé on écrase la mémoire,
    plantage assuré !

    char buf[4];
    strcpy(buf,"123");
    c est OK !


    char buf[4];
    int count;
    strcpy(buf,"1235567");
    c est planter !
    On a écrasé la variable count
    A+, pat

  9. #8
    jeannos

    Re : Module Arduino Shield

    D'accord d'accord j'ai compris, merci.

    donc si j'écris par ex char txtMsg=[20] et que j'écris " Bonjour je viens de passer......" plus de 20 caractère sa plante ?
    Et le numéros que j'ajoute est traduit en ASCII par l'ordi ? Par exemple 06 en binaire ça donnera à l'ordi : 00000110 ?
    Et " bonjour " donnera à l'ordi : 001011111110 etc ...

  10. #9
    freepicbasic

    Re : Module Arduino Shield

    Citation Envoyé par jeannos Voir le message
    donc si j'écris par ex char txtMsg=[20] et que j'écris " Bonjour je viens de passer......" plus de 20 caractère sa plante ?
    oui

    Citation Envoyé par jeannos Voir le message
    Et le numéros que j'ajoute est traduit en ASCII par l'ordi ? Par exemple 06 en binaire ça donnera à l'ordi : 00000110 ?
    Et " bonjour " donnera à l'ordi : 001011111110 etc ...
    non voir le codage ASCII
    '0' = 0x30
    '1' = 0x31
    etc

    'A' = 0x41
    etc..

    'a' = 0X61


    TABLE ASCII
    A+, pat

  11. #10
    jeannos

    Re : Module Arduino Shield

    J'ai toujours utilisé cette table moi en cours : https://www.bing.com/images/search?v...ict&ajaxhist=0

    Ce que tu m'as dis je connais pas.

  12. #11
    jeannos

    Re : Module Arduino Shield

    Vous m'avez dit ça aussi : " strcpy permet de copier une chaine dans une autre "
    Mais le numéros de téléphone que j'utilise ce n'est pas considéré comme une chaine ?

    Code:
     strcpy(remoteNum,"0600000");
    Là ça veut dire " Copie " 060000" dans remoteNUm " mais est ce que 060000 est considéré comme une chaine ?

  13. #12
    jeannos

    Re : Module Arduino Shield

    Je t'avoue aussi que j'ai pas compris cette définition du sms.print(TxtMsg)
    sms.print(TxtMsg) permet d’écrire un tableau char en tant que message SMS.

    Mais pourquoi écrire un tableau char si on en à déjà un ? Cette fonction sms.print(TxtMsg) sert plutôt à écrire le message dans le module non ?
    Merci

  14. #13
    freepicbasic

    Re : Module Arduino Shield

    La table c'est la même ...

    oui c'est une chaine de caractères ASCII.

    La fonction print envoie la chaine, il faut bien qu'elle soit dans un tableau de char (une chaine quoi).
    Il est possible que le programme la transforme en binaire ou en impulsion ou autre ... ça dépend de ce qu'il y a dans ce print.
    A+, pat

  15. #14
    jeannos

    Re : Module Arduino Shield

    D'accord merci, pour les dernieres variables et fonction, les commentaires à côté sont juste ?

    Code:
     // boucle infinie (qui peut être interrompue par break, ou ici, par return)
      while (1) {
        while (Serial.available() > 0) {
          // Lit un caractère sur le port série
          char inChar = Serial.read();
          // si c'est un saut de ligne, on termine la chaîne avec un '\0'
          // (le caractère '\0' est un indicateur de fin de chaîne C)
          // puis on quitte la fonction avec return
          if (inChar == '\n') {
            result[i] = '\0';
            Serial.flush();// Ne sert à rien depuis Arduino 1.0 pour la lecture.
                            // flush() sert à attendre que les données dans le
                            // buffer d'écriture soient envoyées sur le port série
            return 0;
          }
            // Tous les autres caractères sont ajoutés à la chaîne
          // en incrémantant le compteur.
          // Sauf le caractère retour chariot qui est juste ignoré.
          // ('\r' fait généralement partie de la séquence "\r\n" qui indique la
          // fin d'une ligne)
          if (inChar != '\r') { 
            result[i] = inChar;
            i++;
          }
        }
      }
    }

  16. #15
    freepicbasic

    Re : Module Arduino Shield

    Il faut mettre i=0; avant le while !
    Sinon on a n'importe quoi dans i .
    A+, pat

  17. #16
    jeannos

    Re : Module Arduino Shield

    Pourtant ça fonctionne.
    Mais je comprend pas c'est quoi " i++"

  18. #17
    jeannos

    Re : Module Arduino Shield

    Ah oui mais il y est, j'ai oublié de mettre tout :

    Code:
    int readSerial(char result[])
    {
      //Compteur qui indique combien de caractères ont déjà été ajoutés
      // à la chaîne, sert aussi d'indice pour écrire le caractère courant avec []
      int i = 0;
      
    
      // boucle infinie (qui peut être interrompue par break, ou ici, par return)
      while (1) {
        while (Serial.available() > 0) {
          // Lit un caractère sur le port série
          char inChar = Serial.read();
          // si c'est un saut de ligne, on termine la chaîne avec un '\0'
          // (le caractère '\0' est un indicateur de fin de chaîne C)
          // puis on quitte la fonction avec return
          if (inChar == '\n') {
            result[i] = '\0';
    
            return 0;
          }
            // Tous les autres caractères sont ajoutés à la chaîne
          // en incrémantant le compteur.
          // Sauf le caractère retour chariot qui est juste ignoré.
          // ('\r' fait généralement partie de la séquence "\r\n" qui indique la
          // fin d'une ligne)
          if (inChar != '\r') { 
            result[i] = inChar;
            i++;
          }
        }
      }
    }

Discussions similaires

  1. Géolocalisation par Arduino : module Sim900 et shield GPS
    Par matmats dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 09/04/2018, 15h25
  2. [Programmation] carte motor shield v1.2/arduino
    Par jack79 dans le forum Électronique
    Réponses: 7
    Dernier message: 12/02/2017, 10h58
  3. [Programmation] ARDUINO Ethernet shield (client)
    Par electron44 dans le forum Électronique
    Réponses: 8
    Dernier message: 14/06/2016, 14h26
  4. [Programmation] Arduino....LOL Shield.
    Par balisto56 dans le forum Électronique
    Réponses: 9
    Dernier message: 06/05/2016, 17h40
  5. Ethernet Shield arduino
    Par lm321 dans le forum Électronique
    Réponses: 1
    Dernier message: 24/11/2014, 08h20
Découvrez nos comparatifs produits sur l'informatique et les technologies.