Nano pas assez puisant ?

bonjour à tous !

Je suis en train de faire un "ordinateur de bord" pour ma voiture avec un arduino nano, celui-ci mesure la vitesse de rotation du moteur et la vitesse de la voiture.
J'ai deux capteur hall: Un qui capte la rotation d'une roue.
Un qui capte le signal d'allumage du moteur.

J'ai un écran oled 128x64 que je compte intégrer dans mon tableau de bord pour y afficher 3 menus:
1: Vitesse moteur et vitesse véhicule.
2: Vitesse moyenne n°1 et n°2
3: Compteur kilométrique n°1 et n°2

Et un bouton qui me permet de passer d'afficher le menu suivant par un appui court, et de remettre à zéro la vitesse moyenne n°2 et le compteur kilométrique n°2 selon le menu affiché à l'écran.

Les vitesse moteur et véhicule sont envoyées en Bluetooth par un module HC-05.

J'ai mis le code en pièce joint, avec les balise le message était trop long pour être envoyé.

Premier problème:
L’Arduino détecte tout le temps un appui long sur le bouton.
Dans le code au dessus j'utilise une librairie pour gérer le bouton, mais j'ai essayer de faire sans et de chronométrer le temps entre l'appui sur le bouton et le relâchement avec la fonction millis() et une variable, mais ça ne marche pas bien non plus.

Autre problème, le calcul de vitesse moyenne sont faux.

Je m'en suis rendu compte en simulant la rotation de la roue en envoyant un impulsion de 2ms à chaque exécution du void loop sur le pin du capteur de vitesse, au début la vitesse moyenne est bonne mais elle descend rapidement à une valeur plus basse plus arrête de descendre.
Je ne comprend pas pourquoi la formule est pourtant bonne...

Autre chose, en simulant la rotation de roue comme expliqué plus haut, j'ai une vitesse afficher de 73 km/h
Le void loop s'exectuterais en ~91ms

Ce qui me semble long et me laisse à penser que soit mon programme est mal fait et est trop long à s'exécuter, soit l'arduino nano manque de puissance, (69% de l'espace de stockage de programmes et 38% de mémoire dynamique), plusieurs bibliothèques donc adafruit_ssd1306 qui est lourde.
Surtout que une foi le projet de base fini je voudrait surement améliorer le projet et alourdir le code en rajoutant une sonde de température et un débitmètre pour calculer la consomation d'escence par exemple...

Pensez vous qu'un arduino nano soit capable de faire tourner ce programme de manière fluide?
Qu'es que vous pensez de mon code? Qu'es qui pourrait résoudre ces problèmes d’appuis long sur le bouton, et de rapidité d’exécution ?

Merci de m'avoir lu.

Ordinateur_de_bord_309.ino (15.3 KB)

Je pense que signv() est très chronophage.
Beaucoup de calculs en flottant qui doivent charger le processeur.
L'usage de millis() sous interruption n'est pas judicieux car les interruptions sont masquées et millis() ne tourne pas.
Est-il vraiment nécessaire de calculer la vitesse moyenne à chaque tour de roue?

Salut fdunews !

J'ai modifié le code, signv ne fait plus de calcul calcul à chaque tour de roue.
Le calcul de vitesse moteur est fait tout les 5 impulsions reçus, la vitesse tout les 5 et les compteurs kilométrique tout les 20.

  void signv() {
  comptv ++;                      // Incrémentation du compteurv pour calcul vitesse voiture 
  comptkm ++;                     // Incrémentation du compteurm pour calcul compteur kilométrique 
  prisemoyenne = 1;               // Prise en compte dans les moyennes de vitesse
}
                               //Mise à jour vitesse voiture
  if (comptv >= nbpulsev){
    vitesse = (36000 / (millis() - tprec2) * droue * 3.14159 / 1000) * comptv;  // Calcul de la vitesse en km/h
    tprec2 = millis();
    comptv = 0;    
  }
                             
                             // Mise à jour compteur kilomètrique
  if (comptkm >= nbpulsecompt) {        
    cpkm1 = cpkm1 + ( comptkm * droue * 3.14159 / 100000); // Mise à  jour du compteur kilométrique n°1
    cpkm2 = cpkm1 + ( comptkm * droue * 3.14159 / 100000); // Mise à  jour du compteur kilométrique n°2
    comptkm = 0;
  }

Toujours en simulant le fonctionnement j'ai maintenant une vitesse affiché de de 68 km/h
La vitesse moyenne n°1 part de 0, puis augmente jusqu'à 62
La vitesse moyenne n°2 part de 0, puis augmente jusqu'à 63, mais beaucoup plus rapidement que la première...

Les compteurs kilométrique eux ne marchent plus... :disappointed_relieved:

Et l'appui long sur le bouton ne semble toujours pas marcher ... :confused:

Ordinateur_de_bord_309_modifi_.ino (16.6 KB)