Etape 57 : Logiciel : Comment fonctionne le Code de rondelle de balle
Remarque :
Lorsque le ballon a sauté hors du trou de sortie, le capteur IR verra passer le ballon, mais il ne verra pas le ballon quand il est en vol stationnaire au-dessus de l’orifice de sortie. Afin de rendre la fonction de lavage de balle correctement, nous avons mis le ventilateur fonctionner pendant trois secondes de plus après que la sortie récepteur IR voit le ballon passer, de cette façon, que le joueur dispose de suffisamment de temps pour attraper la balle de ping-pong avant que le ventilateur s’arrête et elle descend vers le bas de la pipe. Si le joueur ne pas l’attraper, la rondelle de balle détecte il retomber le tuyau et faire sauter vers le haut. Cela se répétera pendant un certain temps avant qu’il arrive à expiration et définit un indicateur d’erreur.
Il y a vraiment que deux situations où les choses iront mal. La première situation est si une boule est placée dans le trou d’entrée, mais il ne vient jamais hors de la pipe pour déclencher le capteur de sortie et la fin de la fonction. Dans ce cas, la rondelle de balle serait juste continuer à fonctionner jusqu'à ce que quelqu'un est déclenché le capteur de sortie manuellement ou éteint le tableau. La deuxième situation se produit lorsque la balle de ping-pong sort de l’orifice de sortie et voyage le capteur mais le joueur n’est pas attraper le ballon donc la rondelle de balle s’éteint et la boule retombe vers le bas de la pipe. Si une autre balle est mises dans cette rondelle de balle même dans qu'il peut bloquer car il y aura désormais deux balles le tuyau à la place de celui qui est ce qu’il a été conçu pour. Dans tous ces cas, nous ne voulons pas les joueurs à continuer à essayer d’utiliser la rondelle de balle et empirer la situation, au lieu de cela, nous voulons désactiver la rondelle de balle jusqu'à ce que le problème a été résolu.
On programmera la table afin que si une balle coincée dans le tuyau ou si une balle retombe vers le bas de la pipe, la rondelle de balle sera complètement désactivée jusqu'à ce que le problème a été résolu et le joueur « annule » la rondelle de balle. Si un joueur tente de mettre une balle dans la rondelle de balle lorsqu’il est désactivé, les anneaux de rondelle LED ball clignote et s’éteint cinq fois ce qui indique que la balle rondelle est bloqué. J’ai joint quatre diagrammes qui expliquent chaque décision et les processus qui le microcontrôleur effectue afin de gérer ces erreurs. Voici une brève description :
Situation #1
Une boule est lâchée dans le trou d’entrée sur la rondelle de balle #2, mais elle reste coincée dans le tuyau et ne sortie la rondelle de balle. La rondelle de balle arrive à expiration et s’éteint mais le joueur tente de mettre une autre balle dans la rondelle de balle. Le point où le joueur fait la deuxième boule est deonoted par **.
Ball_Washers_Detect (UINT8 détection)
1) Assurez-vous que BW2_JAM n’est pas définie de la balle préalable. Il est effacé, afin de continuer à l’étape suivante.
2) set BW_ACTIVE = 1, alors que n’importe quelle fonction qui utilise la rondelle de balle LED anneaux pour les animations les utilisera pas.
3) tourner sur l’anneau de LED d’entrée et de la pompe à eau boule rondelle.
4) permettre deux secondes pour passer de sorte que la pompe ait suffisamment de temps pour pousser le ballon à l’autre extrémité du tuyau.
5) éteindre la pompe de lave-glace ball et allumez le ventilateur soufflant à une vitesse normale.
6) vérifier pour voir si la balle a passé la sonde sortie encore.
7) il n’a pas, a laissé deux secondes s’écoulent et garder le contrôle du capteur pour voir si elle passe.
8) boucles cinq fois (environ 10 secondes) mais expire que le ballon n’est pas venu de l’orifice de sortie.
9) set BW2_JAM = 1, alors que si une autre balle est détectée au niveau du trou d’entrée de la rondelle de balle le programme sait qu’il est coincé.
** Le joueur met dans la deuxième balle de ping-pong dans la rondelle de balle coincée.
10) Ball_Washers_Detect(detection) détecte la deuxième boule et recommence la fonction.
11) la première chose qu’il recherche est si BW2_JAM est défini, et il est.
12) la valeur de la variable globale "error_code" égale à BW2_JAM_ERROR_CODE.
13) set DIAGNOSE_ERROR = 1 (Timer3 la routine d’interruption se chargera du reste maintenant que DIAGNOSE_ERROR a la valeur).
Timer3()
11) Timer3 interrompt et vérifie si DIAGNOSE_ERROR == 1.
12) il y a une erreur, appelez la fonction Display_Error(error_code) et inclure la variable globale qui contient le code d’erreur.
Display_Error(Error)
13) vérifier le code d’erreur pour voir quel type d’erreur doit être affiché.
14) c’est un BW2_JAM_ERROR_CODE, appelez la fonction Ball_Washer_Jam_Error(error) pour informer le lecteur de l’erreur.
Ball_Washer_Jam_Error(Error)
15) ball rondelle de #2 entrée et sortie, les capteurs est les deux bloqués ? (C’est comment un utilisateur « réinitialise » la rondelle de balle).
16) ils ne sont pas tous les deux bloqués, set BW_ACTIVE égal à 1 pour n’utilise la rondelle de balle plus aucune autre animation LED anneaux.
17) clignoter les anneaux d’entrée et de sortie des rondelle ball #2 sur et hors cinq fois, il informe le joueur qu’il y a un bourrage.
18) effacer DIAGNOSE_ERROR 0 et désactivez BW_ACTIVE à 0.
Maintenant que vous avez une idée de comment le code de rondelle de balle est formaté, j’ai posté une vidéo ci-dessous pour situation #2 où le ballon n’est jamais attrapé par le trou de sortie. La vitesse du ventilateur ventilateur sera réduite avant il s’éteint alors que si le ballon n’a pas été attrapé, il va se replier vers le bas de la pipe et déclencher le capteur de sortie une autre fois. Le ventilateur va alors être accéléré à sa vitesse normale et souffler le ballon sortir la rondelle de balle, il répétera ce jusqu'à trois fois, et si le ballon n’a pas été saisi par la troisième fois il sera éteint et mettre une rondelle de balle confiture indicateur d’erreur.
Vous pouvez régler les vitesses de moteurs pour vos rondelles de boule dans le fichier d’en-tête miscellaneous.h en vertu de l’une des constantes définies BWx_PUMP_SPEED et BWx_FAN_SPEED ('x' étant la rondelle de balle #1 ou #2).