Les différences entre le C standard et le C Arduino

Batpillet -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonsoir,
Je suis en première et je dois préparer un projet qui soulève les différences entre les langages C standard et C Arduino. J'ai beau chercher je ne trouve pas grand chose... J'en appel à ceux qui connaissent un peu cette plateforme. Pour l'instant tout ce que je sais c'est que le C Arduino est une simplification du C standard avec certaines limitations.
En espérant pouvoir m'aider,
cordialement Baptiste

2 réponses

  1. Seichiroku Messages postés 179 Statut Membre 7
     
    Salut

    je suis aussi actuellement amené a utiliser ce logiciel..... veux-tu que je demande a mon prof ?
    0
    1. Batpillet
       
      Bonsoir
      merci de votre réponse rapide :)
      Oui ce serais super si vous pouviez avoir quelques informations sur ces différences car je bloque pas mal sur le sujet :/... En fait je débute en programmation et je ne connais pas très bien les deux langages...
      0
    2. Seichiroku Messages postés 179 Statut Membre 7
       
      Oki
      Perso je le vois demain donc j'essayerai d'y penser
      0
    3. Seichiroku Messages postés 179 Statut Membre 7
       
      il me dit que tu dois contacter Mr.Canné de l'académie de Nantes
      0
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,

    Je ne connais pas arduino, mais un peu le C standard.
    Déjà de quel norme C parles-tu ? ISO C89/90 ou C99 ?

    Tu peux commencer par poster un exemple de programme arduino et on peut te dire ce qui n'est pas standard. Qu'en penses-tu ?

    Note : pour poster ton code, utilise bien la balise <code c>.
    Exemple :
    <code c>ici tu mets ton code</code>
    0
    1. Batpillet
       
      Bonsoir,

      Merci de vos réponses :)
      Alors pour la norme, je ne la connais malheureusement pas :/
      En fait les programmes arduino sont composés de 2 parties: le setup et le loop. (initialisation et boucle comme vous l'aurez compris) c'est pour l'instant la seule différence que j'ai pu constater en comparant avec le langage C.

      Voici un exemple de programme qui permet de mesurer en continu tres simplement la température a l'intérieur d'une pièce:

       //Déclaration et initialisation des variables
        float mesure=0;        //Variable pour le stockage mesure retournée par le capteur
        float tension=0;       //Variable pour le stockage de la tension 
        float temperature=0;   //Variable pour le stockage de la température 
        float tempmin=100;     //Temperature min
        float tempmax=0;       //Temperature max
        int portana0 = 0;      //Numéro du port analogique sur lequel la température est mesurée
      
      //Traitements initialisation
        void setup()
        {
          analogReference(INTERNAL); //Permet de fixer la temperature de refernce à 1,1 volt
          Serial.begin(9600);        //initialisation de la liaison série à 9 600 bauds
        }
      
      //Traitements itératifs
        void loop()
        {
          mesure = analogRead(portana0);  //Lecture de la valeur fournie par le capteur de température
          tension = mesure * 1.1 / 1024;  //Conversion en tension (en volt)
          
          temperature = tension * 100;    //Conversion en température (en degré Celsius)
          if (temperature < tempmin) {tempmin = temperature;} //Calcul temperature mini
          if (temperature > tempmax) {tempmax = temperature;} //Calcul temperature maxi
          
          //Envoi de la tension et des températures au PC par la liaison série pour affichage dans la console
          Serial.print("Tension : "); Serial.print (tension); Serial.print(" Volts - ");         
          Serial.print("Temperatures :"); 
          Serial.print(" >Actuelle : "); Serial.print (temperature); 
          Serial.print(" >Mini : "); Serial.print (tempmin); 
          Serial.print (" >Max : "); Serial.println (tempmax);
          //Attente de 5 secondes avant de faire une nouvelle mesure
          delay(5000);                    
        }
      


      Voici la liste des mots clés chez Arduino : http://arduino.cc/en/Reference/HomePage

      Merci de votre aide ! :)
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Alors déjà :
      //Déclaration et initialisation des variables
      Pas bon en ISO C89/90. On utilise /*...*/. Mais ok en C99.

      Les variables globales sont déconseillées.

      void setup()
      Prototype partiellement défini. Il vaut mieux mettre : voir setup(void)
      Idem pour les autres prototypes.

      tension = mesure * 1.1 / 1024;
      Les variables sont de type float, mais tu multiplies avec un double. Du coup, conversion en double puis reconversion en float. Il vaudrait mieux n'utiliser que des float (1.1f) ou mettre les variables en double (conseillé sauf raison particulière).

      delay(5000);
      Ce n'est pas standard.

      Voilou pour commencer.

      Cdlt,
      0
    3. Batpillet
       
      Super merci pour ces informations :)
      quelques questions : quelle sont les différences entre les 2 normes ? Et en C comment est-ce que l'on pose un délai du type "delay(5000);" ?
      0
    4. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      La différence entre les 2 normes pourrait faire un article complet (d'ailleurs, il y a des blogs qui en parlent). Mais ce qu'on peut dire, c'est que certaines fonctionnalités du C++ ont été portées en C.
      Le C ne prévoit pas de manière standard la pause. Les fonctions du type delay(...) s'appuient sur des fonctions systèmes (API windows par exemple).

      Cdlt,
      0