Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Aide]Programmation arduino uno + ethernet shield

    3 avril 2012 à 17:02:04

    Bonjour, je suis actuellement en terminal S SI et ait donc un PPE a faire, moi et mes camarade avons choisie de faire un store pilotable depuis une application mobile.
    Nous avons choisie d'utilisée une carte Arduino, celle ci doit:

    - Récupéré un flux RSS dans lequel sera inscrit "ouvert" ou "fermé".

    - Si l'information est "ouvert" on ouvre le store dans le cas contraire on le ferme

    le store possède des capteurs pour connaitre sa position "ouvert" "fermé" ou "intermédiaire", les capteur renvoi cette information a l'Arduino.

    - L'Arduino reçoit les info des capteurs et envoie dans la base de donné du site l’état du volet "ouvert" "fermé" ou "intermédiaire"

    Aucun de nous ne connait la programmation C/C++ malheureusement, si l'un de vous pouvez m'aider a réalisé ce programme ça me permettrai de faire un démonstration pendant la soutenance (on possède la carte.

    J'ai trouver déjà ce programme sur internet pour récupéré le flux RSS mais le compilateur Arduino trouve plusieurs erreurs :

    le programme


    // déclarer l'objet qui contiendra les données RSS
    Channel channel;
    
    void setup() {
    
      // lors de la création de la chaine, on passe l'adresse du flux RSS
      channel = new Channel(this, "http://www.assemblee-nationale.fr/rss/rss_presse.xml");
      channel.on_screen();
    }
    
    
    class Channel {
    
      String title, description;
      Cri[] cris = new Cri[0]; // créer une liste de Cri vide (chacun avec titre,date,descriptif)
    
      Channel(PApplet app, String s) {
    
        XMLElement document;
    
    
        try {
          document = new XMLElement(app, s);
        }
        catch (Exception e) {
          println(" erreur ):" + e);  
          return;
        }
    
        if (!document.getStringAttribute("version").equals("2.0")) return;
        if (0 == document.getChildCount() && !document.getChild(0).getName().equals("channel")) return;
    
        XMLElement channel = document.getChild(0);
    
        int nombre_items = channel.getChildCount();
    
        for (int i = 0; i < nombre_items; i++) {
    
          XMLElement enfant = channel.getChild(i);
    
          if (enfant.getName().equals("title")) {
            // chercher le titre (son contenu)
            title = enfant.getContent();
          }
    
          if (enfant.getName().equals("description")) {
            // chercher le descriptif
            title = enfant.getContent();
          }
    
          // on a trouvé un <item> (ce qui nous intéresse)
          if (enfant.getName().equals("item")) {
    
            String titre;
            String date;
            String descriptif;
    
            // créer des variables temporaires pour les données qui nous intéressent
            try {
              titre = enfant.getChild("title").getContent();
            }
            catch (Exception e) {
              titre = "";
              println(e);
            }
    
            try {
              date = enfant.getChild("pubDate").getContent();
            }
            catch (Exception e) {
              date = "";
              println(e);
            }
    
            try {
              descriptif = enfant.getChild("description").getContent();
            }
            catch (Exception e) {
              descriptif = "";
              println(e);
            }
    
            cris = (Cri[])append( cris, new Cri(titre, date, descriptif) );
          }
    
        }
    
      }
    
      void on_screen() {
    
        // le debugger
    
    
        // s'il n'y a pas eu de données
        if (0 == cris.length) {
    
          println("Je n'ai pas pu me connecter au flux rss");
          return;
        }  
    
        // sinon demander à chaque donner de s'afficher
        for(int i=0; i < cris.length; i++) {
          cris[i].read();
        }
    
      }
    
      class Cri {
    
        String titre, date, descriptif;
    
        // le constructeur de chaque CRI
        Cri(String _titre, String _date, String _descriptif) {
          titre = _titre;
          date = _date;
          if (null == _descriptif) descriptif = "";
          else descriptif = _descriptif;
    
        }
    
        // dessiner cette dépêche
        void read() {
    
          println(titre);
    
          println(date);
    
          println(descriptif);
          println("------------------------------------------------------");
    
        }
    
      }
    
    }
    


    les erreurs :

    sketch_apr03a:1: error: 'Channel' does not name a type
    sketch_apr03a.cpp: In function 'void setup()':
    sketch_apr03a:6: error: 'channel' was not declared in this scope
    sketch_apr03a:6: error: expected type-specifier before 'Channel'
    sketch_apr03a:6: error: expected `;' before 'Channel'
    sketch_apr03a.cpp: At global scope:
    sketch_apr03a:14: error: ISO C++ forbids declaration of 'Cri' with no type
    sketch_apr03a:14: error: expected ';' before 'cris'
    sketch_apr03a:16: error: expected `)' before 'app'
    sketch_apr03a:135: error: expected `}' at end of input
    sketch_apr03a:135: error: expected unqualified-id at end of input



    Si quelqu'un pouvait m'aider a debuger ce programme et faire le second pour récupérer les informations des capteurs.

    En tout cas Merci :)
    • Partager sur Facebook
    • Partager sur Twitter
      3 avril 2012 à 17:24:27

      en C++, il faut mettre un point-virgule après l'accolade fermante d'une classe:

      class Truc {
      
      };
      


      (Après, arduino n'utilisant pas du C++ exactement, c'est peut être pas ça le problème, mais ça en a tout l'air quand même)
      • Partager sur Facebook
      • Partager sur Twitter
        3 avril 2012 à 18:13:15

        Comme dit epso, après la déclaration d'une classe on met normalement un ';'.

        Tu peux aussi déplacer tes classes avant le "setup()" (penser à virer la ligne 2 du coup) et voir si le compilateur les reconnait...
        • Partager sur Facebook
        • Partager sur Twitter

        Retrouvez moi sur mon blog et ma chaine Youtube !

          27 avril 2012 à 14:57:45

          Mais , en fait c'est un code processing et pas un code arduino !
          • Partager sur Facebook
          • Partager sur Twitter
            28 avril 2012 à 18:04:34

            Tiens c'est pas toi là : lien

            Bon je te remais la réponse d'un membre :
            #include <SPI.h> // Librairie SPI pour la communication hardware
            #include <Ethernet.h> // Librairie Ethernet
            
            byte mac[] = { // Adresse MAC (n'importe quelle adresse fait l'affaire)
              0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; 
            
            IPAddress server(10, 0, 0, 19); // Adresse IP du serveur distant (ici mon serveur web local)
            
            EthernetClient client; // Objet EthernetClient 
            
            // setup()
            void setup() {
              Serial.begin(9600); // Initialisation du port série
            
              if (!Ethernet.begin(mac)) { // Opbtention d'une adresse IP par DHCP
                Serial.println("Erreur DHCP");
                for(;;); // En cas d'erreur on bloque le programme dans une boucle infini
              }
              Serial.println("DHCP OK");
            }
            
            // loop()
            void loop()
            {
              String str; // Chaine de char contenant une ligne de la réponse HTTP
              char c;
            
              delay(10000); // Delai entre deux requétes
            
              if (client.connect(server, 80)) { // Connexion au serveur web
                client.println("GET /flux.xml HTTP/1.0"); // Demande de flux.xml en HTTP 1.0
                client.println();
              } 
              else {
                Serial.println("Erreur TCP"); // Si erreur lors de la connexion
                return; // quitte loop()
              }
            
              for(;;) { // Boucle infini
                if(client.available()) { // Si des données son disponible sur l'objet EthernetClient
                  c = client.read(); // Lecture d'un octet
                  if(c == '\n') { // Si fin de ligne atteinte
                  // (Pensez à mettre une ligne vide à la fin de flux.xml)
                    if(str.startsWith("<action>")) { // Si la ligne commence par <action>
                      str.replace("<action>", ""); // Enléve les balises XML
                      str.replace("</action>", "");
                      Serial.println(str); // Affiche la valeur du noeud XML
                      // ... TODO
                      break; // Sort de la boucle infini
                    } 
            
                    str = ""; // Vidage de la ligne
                  } 
                  else
                    str += c; // Concaténation de l'octet recu dans la chaine de char
                }
            
                if(!client.connected()) // Si la connexion a été perdu
                  break; // Sorti de la boucle infini
              }
            
              client.stop(); // Fermeture de la connexion avec le serveur
            }
            



            Cordialemant , flexus
            • Partager sur Facebook
            • Partager sur Twitter
              25 avril 2013 à 16:19:00

              salut je suis entrain de faire un projet sur la surveillance de l'activite cardiaque via liaison ethernet base sur l'arduino est ce que il y'a la possibilite de me aider pour le code source
              • Partager sur Facebook
              • Partager sur Twitter


                25 avril 2013 à 16:27:14

                On l'a dit et répété si tu veux de l'aide sur un sujet qui n'est pas le même que celui de l'OP alors fais ton propre sujet et on viendra t'y aider avec plaisir !
                (surtout que là bonjour le déterrage de topic ! (mais au moins ca aurait tendance à montrer que tu as fais des recherches, donc un bon point ! :) )
                • Partager sur Facebook
                • Partager sur Twitter

                Retrouvez moi sur mon blog et ma chaine Youtube !

                [Aide]Programmation arduino uno + ethernet shield

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown