Et sans librairies , ça donne quoi ?

Bonjour à tous,

on bosse sur un projet pour mon école. Le principe est assez simple, acquérir des informations de "distance" via des capteurs Sharp basique, puis piloter des pwm pour controler des moteurs DC via des cartes de puissance. Le tout affiché sur un interface ou l'on peut par exemple régler les distances limites des capteurs... Vu comme ça c'est relativement simple, là où ça se complique, c'est qu'il faut le faire sans utiliser de librairies Arduino ou bien écrire les notres.

Est ce que vous savez s'il existe des logiciels avec générateur de codes de base comme e2 studio mais pour Arduino ?
Est ce que vous avez des conseils pour réaliser ce projet, notamment pour écrire une librairie rien que pour les timers, pwm etc ?

... pourquoi voulez vous tricher plutôt que de faire ce qui est attendu/demandé? Comment allez vous apprendre quoi que ce soit avec cette approche?

Je ne pense pas qu'on peut parler de triche.
Le but de cet exercice n'est probablement pas de délivrer un diplome de codeur en C mais de vérifier les capacités d'adaptation et de réflexion.
Générateur de code automatique ou pas le plus important sera la qualité des informations qui auront été extraites.

En plus ce qui attend la programmation de demain ce ne sera plus la qualité du code mais bien l'assemblage de boîtes noires
Exactement comme en électronique il ne viendrait plus à personne l'idée de faire son propre ampli opérationnel avec une vingtaine de boîtiers de transistors.
Regardez comment ardublock est de plus en plus utilisé en collège et lycée : priorité au raisonnement.

notamment pour écrire une librairie rien que pour les timers, pwm etc ?

Remarque préalable : sujet scolaire donc il faut que tu nous dise quel niveau : bac, BTS/DUT, prépa, école d'ingénieur?

Je pense qu'il faudrait faire préciser à ton prof ce qu'il veut vous faire faire exactement.
Il y a deux niveaux :

  1. les fonctions de base pour interfacer avec le microcontroleur.
  2. les bibliothèques (ici c'est un forum francophone, library c'est de l'anglais) pour gérer les composants externes comme les capteurs.

Réinventer la roue pour satisfaire au petit "1" n'est pas infaisable mais il faut une bonne lecture des 600 pages de la datasheet du micro et deux bonnes années devant soi.
Donc je pense que vous pourrez utiliser la fonction analogWrite pour la PWM sans la réécrire (quoique j'y suis arrivé (une fois) donc c'est simple), mais c'est à faire préciser.

Pour les composants externes comme les capteurs c'est largement plus faisable.

Il y a deux choses à faire.

  1. Commencer par lire la datasheet du capteur et comprendre son fonctionnement et comment le commander.

  2. Trouver des bibliothèques existantes et comprendre ce qui a déjà été fait.

Je pense que ton prof ne veut pas que vous utilisiez du pré-maché mais il ne s'agit pas non plus de réinventer la roue . En même temps on apprend beaucoup en décortiquant les bibliothèques

Ensuite il faudra bien identifier ce dont vous avez réellement besoin et écrire à votre façon le code qui va bien. Fais bien attention à ne pas ajouter des fonctions qui ne vous servent pas --> ce sera la preuve que vous avez copié sans réfléchir.

Pour écrire "une bibliothèque" qui n'est en fait que du code qui peut être réutilisé dans plusieurs projets il faut écrire un fichier code (.cpp) et un fichier d'entête (.h)

Plutôt qu'une mauvaise explication de ma part je te conseille de trouver des tutos de C/C++ qui expliquent :

  • comment est constitué un fichier C/C++ , le préprocesseur, etc.
  • comment gérer un développement avec plusieurs fichiers (cpp,.h) --> c'est très général ce n'est pas réservé aux bibliothèques, cela évite d'avoir à gérer des fichiers de plusieurs centaines ou milliers de lignes.

Arduino c'est du C/C++ très classique et rien d'autre.
L'Interface de Developement Intégrée Arduino (IDE) elle est particulière : elle dispense d'écrire la fonction main() et fait elle même les déclarations de fonctions, tu n'as juste qu'a écrire au minimum une fonction setup et une fonction loop.
Mais l'IDE ajoute tout en tache de fond et transmet au compilateur un VRAI fichier C/C++
C'est pour cela que les fichiers *.h et *.cpp qui ne sont pas "traités par le robot de l'IDE" doivent satisfaire aux règles du C/C++

Je n'ai pas dit que j'approuvais mais :

  1. un logiciel comme ardublock libère des contraintes de la syntaxe mais son utilisation est certainement aussi difficile que la programmation que nous trouvons classique.

  2. Nous ne sommes plus des perdreaux de l'année depuis belle lurette, la vie évolue il faut faire avec.
    Don Quichotte c'est sympathique mais il est des évolutions contre lesquelles nous les anciens ne pouvons rien faire.

Nous c'était pousser le matériel pour avoir les meilleurs résultats dans des délais "raisonnables".
Maintenant il faut un résultat pour le lendemain peut importe la qualité. S'il faut 10, que le matériel peut atteindre naturellement 25 mais que l'on obtient 12 on s'en balance et on met immédiatement en production.
Comme tout se paye un jour il peut arriver des retours de bâton avec un réveil douloureux mais les directions s'en fiche ce qui compte c'est le fric immédiatement.
Les jeunes évoluent dans ces conditions de travail.

Le domaine des micro-contrôleurs suivra le même chemin que celui des PC où nous avons du subir le couple infernal Microsoft/Intel.
Même si c'est anti-optimisation je prend les paris que dans 10 ans (si je suis encore là) le micro-contrôleur de base tournera à 200 ou 400 MHz et aura 1 Mega de flash.

Il suffit de voir sur ce forum : il y est répété en permanence qu'arduino c'est du C++.
Sauf que dans le "core" de l'IDE il y a encore autant de fichier C que de fichier C++ donc c'est faux de dire qu'il faut obligatoirement du c++.
Surtout que dans bien des cas une simple fonction fait le travail en occupant moins de place mémoire.
DigitalRead/Write sont des fonctions pas des classes a ce que je sache.

Arduino participe lui aussi à l'inflation en taille mémoire, en vitesse horloge et en absence de réflexion.

Non seulement la méthode pousse le développeur moderne à utiliser des « boîtes noires » potentiellement inadaptées, mais au-delà des obstacles matériels qui pourraient l'empêcher de modifier ces dernières, elle finit par le rendre intellectuellement inapte à refaire sa propre « boîte grise » ou à choisir un autre agencement de « boîtes noires » qui apporterait une solution correcte. Elle nourrit à la fois son incompétence et sa dépendance vis-à-vis d'acteurs extérieurs qui, en prétendant répondre à ses besoins, lui imposent finalement ses choix.

Qu'elles sont ces fameuses "boites noires"

Par exemple toutes ces bibliothèques que l'on trouve pour gérer tout et n'importe quoi.
Alors qu'avec un peu de réflexion il suffirait de ne gérer que ce qui est réellement nécessaire.

Exemple : pour voir j'ai compilé le programme blink sur un nodeMcu (esp8266 + 1Mega de flash): le fichier fait plus de 200 kilo octets.
Plus de 200 k pour 4 lignes de programme !
Parce qu'Espressif ne veux pas créer ses propres "fonctions" et veux réutiliser les boites Processing/Wiring/Arduino.
C'est le prix à payer pour utiliser du code sur une architecture qui n'est pas celle sur laquelle le code à été conçu.

C'est l'avenir qui t'attend.
Il n'y a pas a s'alarmer il y aura du mauvais (mis de suite en avant) et aussi du bon (le bon en général on n'en parle pas).

Pour donner un exemple, ces derniers mois, à plusieurs reprises j'ai pu observer un groupe d'étudiants d'une grande école parisienne (post-bac) tenter de résoudre des exercices techniques. Ils travaillaient en groupe, communiquant entre eux avec leur smartphone et cherchant des solutions sur Internet avec leur ordinateur portable. Au bout de deux ou trois heures de recherche, d'échanges et de cogitations, ils parvenaient difficilement à trouver des réponses, pas toujours exactes d'ailleurs. Or, à leur âge et au même niveau d'étude qu'eux (voire un peu avant), on exigeait de moi de terminer ces mêmes problèmes (ni plus ni moins) en moins de cinq minutes, seul et sans recourir à aucun document ni calculatrice. Et j'y parvenais haut la main.

sans doute des futurs commerciaux et managers, pas des ingénieurs :grin: ;D :smiling_imp:

Pour ne parler que du petit monde Arduino, il apparaît que de nombreux visiteurs du forum montent leur projet et achètent leur matériel en se reposant sur leur compréhension du problème et sur les indications données par les vendeurs.

C'est justement sur cette vague que surfe Arduino et les revendeurs, faire des choses techniques de façon plug & play. On retrouve souvent ici des projets sur-dimensionner ou trop ambitieux.

Mais cette décision de vouloir se creuser un peut la tête reviens à l'utilisateur, lorsque j'ai commencé Arduino j'ai très vite éviter l'utilisation des bibliothèques que je trouver anti-pédagogique à mon gout, c'est un peut mon coté curieux qui me pousse à savoir comment les choses fonctionnent et non comment les utilisés.