"objet" et fonction

Bonjour tout le monde !!!
je suis en train d’ecrire un programme pour que mon arduino nano recupere des temperature et humidités et contrôle un ventilateur.

donc pour faire cela j’utilise des dht11 et une arduino nano.

je déclare tout d’abord ce qu’il me semble être des “objet”. (oui je l’avoue je n’ai jamais réellement fait du c/c++ que du python je vais changer je vous le promet :smiley: :smiley: )

#include <dht.h>

dht dht_cpu;
dht dht_in;
dht dht_out;

et pour tout lire plus facilement je veut faire une fonction qui lit les température et une pour l’humidité.

donc les fonction doivent prendre pour simplifier les chose le pin ou est branché le dht11 est “l’objet
dht”

je déclare donc mes fonction pour le pin c’est un entier donc int mes pour “l’objet” que dois-je mettre ?

int get_temp(int pin) {
  dht_.read11(pin);
  return dht_.temperature;
}


int get_humidity(int pin) {
  
  .read11(int pin);
  return dht_.humidity;
}

aller vers de la programmation objet sans connaitre les classes c'est dangereux et compliqué.

c'est tout une pratique avant de se lancer dedans.

ici par exemple tu as un exemple de classe objet pour le capteur dht.

https://github.com/adafruit/DHT-sensor-library/blob/master/DHT.cpp

car il y a un constructeur, methode ( ou fonction), attributs, heritage, instance de classes ect...

a connaitre et c'est completement different de la programmation classique

Un tutoriel pour démarrer dans la programmation orientée objet :

http://paulmurraycbr.github.io/ArduinoTheOOWay.html#TheProblem

Bonjour,

La programmation objet, c'est toute une philosophie différente, surtout utile pour améliorer la robustesse et la réutilisation du code ..... mais avec un niveau d'abstraction quand même supérieur.

Un très bon tuto ( à mon avis) ici :

http://www.locoduino.org/spip.php?article85

Chapitres 1, 2, 3, 4. Les choses sérieuses commencent au chapitre 2

Serge .D

Bonjour,

La librairie DHT que tu utilises (celle de l'arduino playground) n'est pas du tout faite dans l'esprit de la programmation orientée objet. En principe avec cette librairie tu instancies un seul objet et tu précises le capteur et son type au moment de l'accès. En fait c'est comme si tu regroupais simplement des fonctions.

Celle citée par hazerty565 est beaucoup plus dans l'esprit de programmation orientée objet. Tu déclares des objets DHT en précisant leur type et leur pin. Ensuite tu accèdes aux fonctions de l'objet sans plus te soucier de sa pin ou de son type.

En conclusion si tu veux t'initier à la programmation orientée objet, n'utilises pas la librairie du playground, mais la librairie citée par hazerty565 (ou une autre équivalente).

merci beaucoup tout le monde je vais lire tout ce que vous m'avez donné. Je sais que la programmation orientée objet et beaucoup plus abstrait que la programmation "classique" mais bon a un moment faut bien se jeter dans le bain si l'on veut apprendre a nager ^^

Je vais avoir une réponse "non conventionnelle"

Sur ce forum il y a des vrais amateurs, débutants ou pas, et des professionnels ou anciens professionnels. Parmi les professionnels (ou retraités) il y a : - des spécialistes de la programmation - des spécialistes de l'électronique - des spécialistes mixtes.

Chacun voit évidement les choses a sa façon.

Perso je suis un retraité purement électronicien, la programmation je l'ai réellement abordée à 65 ans. J'ai donc un avis de pur électronicien et qui plus est d'électronicien habitué à la fiabilité donc formé à utiliser le moins de composants possible.

Je suis donc très à l'aise avec l'obligation d'économiser de la flash avec nos petit microcontroleurs.

Tout cela pour dire qu'une classe occupe plus de place en mémoire que la même réalisation avec des fonctions.

Pour autant faut-il bannir les classes ? Bien sûr non mais à mon avis il faut les utiliser quand cela apporte un plus.

Affirmation 1 : Les classes apporte l'héritage qui permet de réutiliser le code aisément. Oui c'est vrai mais j'ai beau cherché dans l'univers arduino, à part dans l'API de l'IDE, je n'ai pas encore trouvé quelqu'un qui utilise l'héritage dans les bibliothèques. Et pourtant avec tous les composants I2C il y a du grain à moudre.

Non tout le monde utilise un objet (Wire). Ce qui au passage crée de la confusion 95% des utilisateurs parlent de la bibliothèque wire alors que wire n'est qu'un objet instancié sur la bibliothèque Two-Wire ! Qui utilise l'héritage dans les contributeurs arduino ?

Affirmation 2 On peut créer autant d'objet que l'on veut ce qui simplifie la programation. Ok, sauf que j'ai créé une classe pour gérer les I/O en temps qu'objet, bon c'est une évidence que je ne pas une référence en programmation mais cette solution utilise plus de SRAM que la solution avec les fonctions Wiring/arduino digitalWrite et digitalRead. Donc compte tenu du nombre d'IO utilisées ce n'est pas un hasard que les IO soient gérées par des fonctions et non pas par des objets avec des petits microcontroleur.

Un point que je n'arrive pas à comprendre : une classe pour gérer des DHTXX ok puisqu'on peut en connecter autant que l'on veux, mais une classe pour gérer une horloge RTC cela sert à quoi ? Comme les adresse I2C sont rares et qu'en pratique il n'y a qu'une seule RTC de connectée elles ont toutes la même adresse donc impossible de créer plusieurs objets. Cela sert à quoi une classe dans ce cas présent ?

Mon intime conviction est que les classes doivent bien être bien adaptées aux programmes tournants sur microprocesseur là où on dispose de plusieurs giga octets de mémoire vive.

Les utiliser sur petit microcontroleur "par principe" parce qu'on dit que maintenant c'est comme cela qu'il faut faire me laisse dubitatif, mais je ne suis conscient que je ne suis qu'un programmeur du dimanche.

Point qui me conforte : sur le forum "avrfreaks" qui existe depuis plus longtemps que la solution "Wiring/Arduino" les fonctions sont encore très largement utilisées.

En résumé, et pour éviter les mauvaises interprétations, je n'ai rien contre les classes mais mon intime conviction est que tant que nous n'aurons pas des microcontroleurs avec 1 giga de sram il ne faut pas foncer bille en tête ni sur une classe ni sur une fonction, mais bien analyser le cas avant de faire son choix.

OK 68tjs,

Perso je suis un peu issu de la même veine .... sauf que :

  • Je suis venu (en amateur) aux objets et tuti quanti par les (magnifiques) compilateurs Borland en Pascal objet ..... donc sur des PC avec beaucoup de ressources processeur. Les classes fournies avec l'IDE étaient excellentes et très bien documentées. (au passage l'IDE d'arduino me parait nettement moins bon)

  • Pour les µC, j'ai longtemps utilisé des Pics avec l'IDE fourni par microchip (MPLAB). Pour les Pics 8 bits de l'époque, compte-tenu de la taille ridicule de la pile du processeur, impensable de "dégringoler" une hiérarchie d'objets.

  • Quand j'ai commencé Arduino ( il n'y a pas si longtemps) après les bricoles de début pour m'habituer, j'ai voulu "tâter de l'objet" .... juste un exercice de style pour voir.

En résumé, je suis assez d'accord avec toi, la nécessité d'utiliser pour Arduino intensivement la programmation objet ne me saute pas immédiatement aux yeux. Pour certains "trucs un peu répétitifs" j'ai même bricolé avec les pointeurs de fonctions, ce qui fonctionnait assez bien.

Il y a quand même un module que j'utilise très souvent et que je vais "passer en objet"; c'est un ensemble de menus déroulants à plusieurs niveaux pour tous les protos ou j'utilise systématiquement un afficheur LCD.

Bonne soirée.

Serge .D

il y a rien de dangereux... Comme le j'ai ecrit, on ne peux pas en mourir....

c'est juste un abus de language, comme dit plus haut c'est une philosophie.

La programmation objet en C/C++ n'est pas obligatoire, on peut tres bien faire sans, car avant ca n'existais pas, c'est apparut bien plus tard.

Par contre en JAVA je m'éclates, c'est génial ou en python, voir en php aussi...

Tout s'apprends et rien n'est daugeureux.

Et pour pouvoir, dans le cadre des microcontroleurs, avoir acquis la capacité à analyser si une classe est mieux adaptée que des fonctions pour un projet précis il faut bien apprendre à utiliser les classes. Sinon on ne fait que suivre les moutons.

Et tant pis si des fois un débutant se trompe : on apprend plus des erreurs que des réussites surtout quand les dîtes réussites n'ont fait que tomber en marche par le plus grand des hasards.

68tjs: ..........; Et pour pouvoir, dans le cadre des microcontroleurs, avoir acquis la capacité à analyser si une classe est mieux adaptée que des fonctions pour un projet précis il faut bien apprendre à utiliser les classes. Sinon on ne fait que suivre les moutons. ...........

je suis bien d'accord, il m'est bien arrivé de voir des objets ou tout était déclaré public, en vrac avec aucune structuration et aucune protection de l'accès aux méthodes ou aux données.

Dans ce cas je dirais : "a quoi bon?"

Serge .D