Étape 4: Le Code
Vous êtes soit deux types de personnes :
1. les programmeurs qui veulent réellement comprendre le code.
2. les gens qui ne connaissent pas un coup de langue de codage et juste voulez que le fichier source brute.
Bonnes nouvelles pour vous, cette page couvre les deux !
Veuillez noter que ce code est sous licence GPL v3.
Pour ceux d'entre vous qui veulent juste le fichier source brute, il est donc sur Github :
** Mais avant de cliquer sur ce lien, s’il vous plaît faites défiler et lire le code settings.* *
Pour ceux d'entre vous qui veulent comprendre le code, Merci pour l’appréciation du temps que j’ai passé l’écrire ! Nous allons passer directement au :
Tout d’abord, nous avons besoin d’inclure ces trois bibliothèques. Confus de ce que sont les deux derniers ? C’est bien. Ils sont apparus dans le précédent tutoriel de couture que j’ai lié. Si vous savez déjà comment ajouter Arduino bibliothèques à l’IDE, cependant, voici le lien direct vers les référentiels Github :
Bibliothèque de Adafruit capteur
Ensuite, je vais aller sur les fonctions que j’utilise dans le code :
Flash clignote ensemble les deux LED.
autre fait alterner les deux LED.
cligner des yeux clignote deux LED une fois que.
toDegrees convertit une paire de x et y de lectures magnétiques dans un cap en degrés.
pour cent prend deux nombres et crée un pour cent avec le premier 100 % et la seconde comme la fraction.
LES PARAMÈTRES DE CODE ***
turnTime est le laps de temps qui vous permettent d’estimer qu’il faudrait à l’utilisateur de tourner en millisecondes. Par exemple, vous pourriez diminuer le turnTime pour faciliter l’apprentissage des tours liés vs allonger le temps de tourner pour laisser la place pour des explications sur la forme de ski entre les tours.
ralentissement est essentiellement combien vous voulez que l’utilisateur de ralentir à la fin de chaque tour. Par exemple, définir la valeur sur 2 suppose que l’utilisateur va réduire de moitié leur vitesse avant de tourner. Si vous enseignez l’utilisateur d’entrer dans une pizza progressive, vous pouvez diminuer la valeur de nous allons dire 1.3 afin que l’utilisateur ait à réduire leur vitesse de 1/4 avant de tourner.
maxLearnCount est un nombre de tours que le périphérique utilise pour apprendre le cours avant de commencer à dire à l’utilisateur où faire du ski avec les LED. Ceci est utile si une colline a bords avec des longueurs différentes et vous souhaitez obtenir le temps moyen que nécessaire pour traverser ces différentes longueurs.
skiPercent est le pourcentage de fois que vous voulez le dispositif d’attendre avant de dire à l’utilisateur de ralentir. Par exemple, baisser le pourcentage permet des virages plus progressive, alors que le contraire généralement plus brutal se transforme.
readyTime est la quantité générale de temps vous pensez qu’il faut pour monter et descendre l’ascenseur en millisecondes.
Maintenant nous allons initialiser l’accéléromètre :
Ensuite, nous passerons par le code d’installation. Il y a deux parties.
1. initialiser la LED sur la veste.
2. charger l’accéléromètre. Si elle échoue, juste alterner les LED pour montrer l’échec.
Maintenant pour les différentes variables.
learnCount est utilisée pour garder une trace de combien tourne l’appareil a passé d’apprentissage, s’arrêtant une fois atteint le montant maximal de l’apprentissage des tours énoncées ci-haut.
lastTurn est utilisé pour rappeler la dernière fois un virage s’est produit, permettant de mesurer le temps d’un tour.
lastDir est utilisé pour garder la direction générale et globale de l’utilisateur.
lastAcc est utilisé pour maintenir l’accélération générale globale de l’utilisateur.
dir est un tableau qui contient les deux sens suggérés de chaque tour.
dirTime est le temps moyen nécessaire pour l’utilisateur de la Croix le sentier.
repCourant est utilisée pour garder trace de la direction dans laquelle l’utilisateur doit aller dans.
liftMode est utilisé pour économiser la batterie lorsque vous montez un ascenseur ou un "tapis volant".
Enfin, le code de loop() . Il y a plusieurs parties :
1. lecture/moyenne des données de l’accéléromètre.
Le code prend cinq lectures et leur moyenne pour une meilleure précision.
Il y a 3 variables importantes ici :
magAvg est la direction que l’utilisateur connaît en degrés. Ceci est utilisé pour guider l’utilisateur.
accAvg est l’accélération globale de x et y de l’utilisateur. Cela sert à détecter le moment où l’utilisateur se ralentit.
liftAvg est l’accélération de z globale de l’utilisateur. Cela sert à détecter « lift » mouvement (vers le haut)
2. vérifier si l’utilisateur est le ski vers le bas de la montagne, a dépassé le montant d’apprentissage maximal de tours (maxLearnCount) définie ci-dessus et est le ski alpin.
3. savoir ce que nous savons ci-dessus, vérifiez d’abord si l’utilisateur a terminé un tour basé sur combien de temps il leur a fallu traverser la montagne dans le processus d’apprentissage, donc la variable dirTime . Transférer vers l’autre tour et retard basé sur combien de temps nous pensons que le temps entre les tours est, par conséquent, la variable turnTime .
4. si nous n’avons pas atteint la phase de tournage encore, vérifiez si nous devrions dire à l’utilisateur de ralentir après qu’un certain temps après lorsque l’utilisateur devrait commencer à s’arrêter, d'où la variable skiPercent la valeur ci-dessus. Si pas, alors nous avons besoin guider l’utilisateur dans quelle direction ils devraient aller. Puisque personne n’est parfait, nous leur donnerons 10 degrés de mou de chaque côté.
5. la seule option à gauche quant à ce qui se passe est que nous avons atteint le temps d’indiquer à l’utilisateur de ralentir. Nous ferons cela en alternant les lumières en arrière jusqu'à ce que l’utilisateur a atteint la phase de tournage.
6. la présente instruction else est quant à que si l’utilisateur va descente, signifie que l’utilisateur doit être ascensions à ce stade, donc nous allons mettre l’utilisateur en mode ascenseur afin que nous pouvons économiser de la batterie et puis retarder afin que l’utilisateur a le temps d’arriver sur la moquette de l’ascenseur/magic.
7. la présente instruction else est, quant à, si l’utilisateur est passé de mode, d’apprentissage, ce qui signifie que l’utilisateur doit être en mode d’apprentissage à ce stade. Ceci est important parce que si l’utilisateur prend leur premier apprentissage tourne, nous ne voulons pas gâcher la variable dirTime , parce qu’évidemment leur premier périple à travers le sentier prendra plus de temps car ils ont à gagner de la vitesse. Avec cela, nous allons vérifier d’abord pour s’assurer qu’il s’agit n’est pas le 1er enregistrement de données, car cela signifierait que nous n’aurions données précédentes pour construire. Ensuite nous moyenne sur la direction de l’utilisateur avec leur direction depuis donc nous pouvons obtenir une lecture exacte quant à où nous voulons que l’utilisateur d’aller après le mode d’apprentissage pour cette tournure particulière.
8. afin de détecter les virages, nous attendons jusqu'à ce que l’utilisateur commence à effusion off vitesse jusqu'à ce que nous voulons, c’est pourquoi la ralentissement variable définie ci-dessus. Puis nous allons assigner la direction de l’utilisateur qui s’est passé 1 des 2 directions suggérées nous voulons que l’utilisateur d’aller po (nous avons une direction suggérée pour aller à gauche à travers la montagne et l’autre pour aller à droite à travers). Il faut aussi noter la quantité de temps qu’il a fallu traverser la montagne et qu’écrire dans la variable dirTime .
9. la présente instruction else est quant à si c’est le premier enregistrement de données, ce qui signifie qu’il est, donc nous attribue seulement les données actuelles à leurs variables respectives ainsi que sur l’arceau suivant, nous pouvons commencer en moyenne les données.
10. la présente instruction else est quant à si l’utilisateur est en mode de levée, ce qui signifie qu’ils sont. Pour économiser la batterie, nous avons juste contrôler mouvement vers le bas seulement une fois par seconde et la LED s pour indiquer à l’utilisateur de flash, nous sommes toujours en mode ascenseur.
11. en retardant 50 millisecondes, nous ne pas surcharger le code et économiser la batterie, parce que même en vérifiant lectures toutes les 50 millisecondes, cela équivaut à la lecture de données 20 fois par seconde.