Étape 3: Le Code
Je ne suis pas gros sur le partage de mon code, simplement parce qu’il est personnalisé pour ma configuration et n’a probablement aucune utilité pour vous et votre programme d’installation unique. Si vous voulez mon code, écrivez-moi à cgmalantonio et je vous enverrai volontiers un exemplaire. Cependant, je vais décrire mon travail en pseudo-code afin que vous obteniez l’idée.Permet d’obtenir pour elle !
Tout d’abord, j’ai voulu une fonction qui utiliserait le capteur à ultrasons pour obtenir des lectures tout en le servomoteur que se tourna vers 5 points différents :
(0 = gauche / / 45 = avant gauche / / 90 = avant / / 135 = avant droit / / 180 = droite)
Scan {}
J’ai utilisé une simple boucle for pour déplacer le servo par incréments de 45, de 0 à 180 (et un autre pour l’amener de nouveau à 0). Chaque fois, il atteint son point prochaine il appelle ma fonction « LowestNumber » et ajoute la valeur reçue dans un tableau pour les 5 valeurs reçues (gauche / avant gauche / front / avant droit / droit).
quelque chose comme ceci :
pour (int i = 0; j’ai < 180 ; j’ai = i + 45) {}
myservo.Write(i) ;
LowestNumber() ;
}
pour (int i = 180 ; j’ai > 0; i = i - 45) {}
myservo.Write(i) ;
LowestNumber() ;
}
La fonction LowestNumber puise dans les 3 lectures, espacées de 50 millisecondes, le capteur à ultrasons. Les 3 lectures sont ensuite comparés entre eux, et la valeur la plus basse (le plus près possible de lecture) est acceptée et est stockée dans une variable (LowestNumberResult). Ce nombre est ensuite stocké dans un tableau basé sur où le servo est positionné. Le capteur à ultrasons est un peu imprévisible parfois donc je tiens à vérifier 3 fois. Et considérant que je suis seulement inquiet il frapper quelque chose, je garde le nombre le plus bas.
Saisissez votre numéro le plus bas
un = ultrasonique. Ranging(Inc)
Delay(50)
b = ultrasonique. Ranging(Inc)
Delay(50)
c = ultrasonique. Ranging(Inc)
Delay(50)
si (a > b).
a = b
Si (a > c)
a = c
Une fois que tous les 5 positions du moteur d’asservissement ont recueilli une distance du capteur ultrasonique, nous devrons alors traiter de manière appropriée les positions.
}
Maintenant, nous savons les distances en face de l’emplacement de l’aviron. Nous commençons par découvrir quelle direction est la plus grande distance et si certaines conditions sont remplies, nous irons dans cette direction.
Poignée {}
Certaines des restrictions ont été ainsi :
-sont de toutes les directions supérieures à 20 pouces
Assurez-vous bien sûr tous les chemins sont claires, peut être n’importe quel nombre,
ne doit pas être 20 pouces
-Si la direction plus éloignée est inférieure à la position avant + 10 pouces (un chiffre), aller de l’avant
favorisant la direction avant signifie qu'il ne tournera pas juste
autour en cercles dans le centre de votre pièce
Finalement, j’ai ajouté une deuxième déclaration, juste comme ça,
dire si le front était suffisamment clair, aller de l’avant deux fois
-Si la direction plus éloignée est à gauche, assurez-vous avant gauche est clair
-Si le chèque n’est pas clair droite
-Si les sens plus éloigné est droit, assurez-vous avant droit est clair
-Si le chèque n’est pas clair à gauche
-Si la direction plus éloignée est à gauche avant, assurez-vous que laissé est clair
-Si le chèque n’est pas clair droite
-Si sens plus éloigné est avant-droite, assurez-vous bien sûr droit est clair
-Si le chèque n’est pas clair à gauche
-Si toutes les directions sont inférieurs à 20 nous voulons retourner l’aviron et essayer les nouvelles mesures
}
{Supplémentaire
J’ai ajouté quelques fonctionnalités supplémentaires pour mon commutateur à 5 positions.
Puissance sur
En attente d’entrée
-Si vous vous approchez de l’aviron du front trop près, il va sauvegarder et secouer sa tête arrière et quatrième
-Si vous appuyez sur une direction, il va aller dans cette direction
Cliquez sur le centre
-démarre une requête, d’entrée de 8 directions et il conduira dans ces directions
Recliquez sur Centre
-lecteurs de manière autonome et évite les murs/objets
Centre cliquez une troisième fois retourne menu Démarrer
ainsi que quelques tours en tête du servo quand une direction est prises (comme si l’aviron est à la recherche où sa va tourner)
}