Le code est à injecter dans l'arduino. Le code est écrit pour fonctionner avec un arduino nano, c'est vraiment, vraiment pas cher. L'IDE Arduino est bien pourri mais la nouvelle version, la version 2 est moins pourrie que la version précédente qui n'avait pas vraiment changée depuis 2009.
Difficile à comprendre que la fondation n'ait pas codée un plugin pour Visual Studio Code qui est vraiment formidable, mais je crois que de nombreux choix de la fondation m'échappent.
Le code est disponible sur github à cette adresse :
14/08/2021 : il y a un bout de code qui marche un peu, demain il fera jour je vais aller tester
Le code à disposition sur le repo Github fonctionne. Je suis loin d'être un spécialiste c++ ni Arduino, mais pour ce que le code réalise, je suit content :
jusqu'à 25 kilomètres / heure la véritable information de vitesse est envoyée au calculateur
après 25 km/h la vitesse est divisée par deux, et donc vous pouvez allègrement vous diriger vers les 45km/h prévus pour ce vélo aux USA
Je pense que de préserver la vraie vitesse pour le vélo jusqu'à 25 permet à l'algorithme de Giant de fonctionner normalement : comme il est bien écrit, la gestion de l'assistance est "parfaite". Au delà, on veut juste de la patate.
J'ai testé le vélo sur un anneau de vitesse, en dehors de la circulation publique. Je n'ai pas pu le tester très longtemps mais je reprendrai ultérieurement dès que je pourrai me rendre à nouveau sur l'anneau.
L'arduino lit un tour de roue avec son capteur reed sur la PIN Digital 2
Si la vitesse est inférieure à 25km/h alors à chaque lecture du capteur reed correspond une impulsion sur l'électroaimant sur D3. On lit d'un côté et on renvoie l'information lue de l'autre
Si la vitesse est supérieure à 25 km/h ou plutôt quand la lecture précédente était à moins de 300ms de la lecture actuelle alors on ne renvoie pas l'information lue à l'électroaimant, en gros, on "passe" un tour.
const int reedSwitch = 2; // Declaring pin for reed switch to be used. Pin 2 or 3 must be used for the reed switch on the Uno
const int electroMagnet = 3; // ElectroMagnet
Sur l'Arduino Nano, on ne peut utiliser que deux PINs digitaux pour les interruptions : D2 et D3. C'est pour cela que le capteur reed est positionné sur D2. Pas requis, mais pour simplifier l'électroaimant est positionné sur D3.
attachInterrupt(digitalPinToInterrupt(2), isr, RISING);
On souhaite utiliser une interruption déclenchée par le capteur reed positionné sur D2, on souhaite exécuter la fonction isr et surtout on veut l'exécuter quand le potentiel de la broche est montant "RISING". Cela signifie que l'interruption est exécutée seulement à la montée, de 0 vers 5V. On pourrait la déclencher quand ça passe de 5V à 0v avec FALLING ou la déclencher quand ça change avec CHANGE, mais dans ce cas on aura deux interruptions à chaque tour, quand la tension monte puis descend sur D2.