Besoin de conseil optimisation code et repérage d'erreur en C: Projet Arduino

a marqué ce sujet comme résolu.

Bonjour ,

Je suis sur mon projet de motoriser mes stores depuis quelques temps déjà et quand je le compile sur arduino quelques exception sorte ( que je ne comprend pas ) mais rien qui empêche la compilation complète ( d’ailleurs si je compile une deuxième fois aucune exception était affiché). J’ai changer d’ide je suis sur visualStudio ( bonne ou mauvaise idée l’avenir me le diras ) je n’est pas d’exception de levé

Ce que j’aimerais c’est que quelqu’un de plus expérimenté jette un œil sur le code du projet avant que je procède au test nature X/

ce qui me préoccupe le plus c’est la gestion des moteurs ( suspense vont il s’arretés quand je le souhaite ou tout arracher dans les éclair et la fumée) :diable:

  • Attention je n’ai pas un grand niveau de code et j’ai des lacunes en vocabulaire de programmation mais je fait de mon mieux pour être lisible.
  • A savoir quelques mise à jour sont a venir au niveau du capteur de vent ( je changerais complètement le capteur donc le code devras suivre)

Une fois terminé je le laisserai public pour d’autre personne puisse l’utilisé si elle le souhaite je pourrais éventuellement apporter mon aide en retour pour les paramètres à modifier dans les headers. J’ai donc mis sur le github tout ce qui touche à ce projet afin de le reproduire.

https://github.com/marycha64800/Motorisation_store.git Le projet est la : Motorisation_store/firmware/Store_firmware/

Merci

+0 -0

Hello !

J’ai regardé très brièvement le code, il est long et complexe, pas facile de donner un avis dessus. Tu dis ne pas avoir un grand niveau de code, mais on retrouve pas mal de fonctions, des passages par adresses, plein de fichiers de code etc, bref, ca semple pas être un code de débutant :D

Dure de donner un avis du coup, tu aurais des questions plus précises ? Pour tes avertissements, à la compilation, sans nous donner les messages on ne peut pas vraiment t’aider…

+0 -0

Sympa comme projet ! Ça fait beaucoup de code bien intéressant mais en parcourant quelques petites choses, j’ai remarquer que sur ton schéma tes L293 contrôlent des moteurs 12V 2A sauf qu’il me semble que les L293 ne peuvent pas contrôler des moteurs aussi puissants. De plus, ce sont des L293 (sans le D), ce qui veut dire qu’il n’y a pas de diode de roue libre pour tes moteurs… Ce que ton L293 n’appréciera pas. Je te conseille d’aller voir la datasheet du L293 pour vérifier ses caractéristiques maximales au niveau de la tension et du courant. Sinon tu peux toujours trouver l’équivalent du L293 mais en plus puissant si jamais ils ne le feront pas. :ange:

Voili voilou :D

+0 -0

Bonjour

Hello !

J’ai regardé très brièvement le code, il est long et complexe, pas facile de donner un avis dessus. Tu dis ne pas avoir un grand niveau de code, mais on retrouve pas mal de fonctions, des passages par adresses, plein de fichiers de code etc, bref, ca semple pas être un code de débutant :D

Dure de donner un avis du coup, tu aurais des questions plus précises ? Pour tes avertissements, à la compilation, sans nous donner les messages on ne peut pas vraiment t’aider…

Eskimon

Pour ce qui est des exceptions j’ai recompiler avec Arduino pour revoir ce qu’il me dit:

sketch\sensor_wind.cpp: In function 'void event_sensor_wind(int*)':

sketch\sensor_wind.cpp:19:43: warning: default argument given for parameter 1 of 'void event_sensor_wind(int*)' [-fpermissive]

 void event_sensor_wind(int *nbrsRotation=0)

                                           ^

In file included from sketch\sensor_wind.cpp:17:0:

sketch\sensor_wind.h:31:6: note: previous specification in 'void event_sensor_wind(int*)' here

 void event_sensor_wind(int *nbrsRotation=0);

      ^~~~~~~~~~~~~~~~~

sketch\engine_control.cpp: In function 'void engine_move(Engine*, Engine*, Engine*, Engine*)':

sketch\engine_control.cpp:136:49: warning: integer overflow in expression [-Woverflow]

   unsigned int time_already_done = TIME_IN_LOOP * NB_ENGINES;

Le croquis utilise 12412 octets (38%) de l'espace de stockage de programmes. Le maximum est de 32256 octets.
Les variables globales utilisent 809 octets (39%) de mémoire dynamique, ce qui laisse 1239 octets pour les variables locales. Le maximum est de 2048 octets.

Pour ce qui est du sensor_wind comme je disais je vais changer de capteur et plutôt utiliser un ventilateur d’ordinateur il seras mieux que ce que j’ai actuellement et je pourrais me débarrasser des interruptions ( elle m’inquiète un peu j’ai peur que sa hachure trop le code surtout à l’approche des capteurs d’arrêt moteur )

En revanche je ne vois pas ce qu’il veux dire ensuite a priori je dépasse les limites d’un int!!.

Sympa comme projet ! Ça fait beaucoup de code bien intéressant mais en parcourant quelques petites choses, j’ai remarquer que sur ton schéma tes L293 contrôlent des moteurs 12V 2A sauf qu’il me semble que les L293 ne peuvent pas contrôler des moteurs aussi puissants. De plus, ce sont des L293 (sans le D), ce qui veut dire qu’il n’y a pas de diode de roue libre pour tes moteurs… Ce que ton L293 n’appréciera pas. Je te conseille d’aller voir la datasheet du L293 pour vérifier ses caractéristiques maximales au niveau de la tension et du courant. Sinon tu peux toujours trouver l’équivalent du L293 mais en plus puissant si jamais ils ne le feront pas. :ange:

Voili voilou :D

Vanadiae

OOHH que tu a raison j’en est déjà fait les frais ( un moteur c’est balader dans la pièces et un l293 a pris feu o_O ) le schéma n’a pas était corrigé je les aient remplacé par celui ci:

https://www.motorcontrollershop.com/dc-motor-driver-drok-l298-dual-h-bridge-motor-speed-controller-dc-6–5v-27v-7a-pwm-motor-regulator-board-12v-24v-electric-motor-control-module-industrial-160w-with-optocoupler-isolation/

si tu as vu d’autre chose dans le genre je suis toute ouie !! :)

Dans les choses qui me préoccupe c’est la gestion des moteurs l’accélération et les arrêts sur les capteurs

+0 -0

Salut, tu viens de tomber sur un classique…

 unsigned int time_already_done = TIME_IN_LOOP * NB_ENGINES;

Un int ne fait pas forcément 32 bits. À l’origine, le type int fait la taille de l’accumulateur. Sur arduino, le int peut avoir une taille de 16 bits et donc un maximum de 65535 (en unsigned). Voir .

Le plus simple pour en être sûr, c’est de faire un sizeof(int) et l’envoyer sur le port série.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte