Étape 2: ReadOptical() méthode d’analyse
Comme je le disais il y a sont quelques fautes de frappe dans les commentaires du code dans linefollow.ino.Every boucle le programme appelle les function:sensor_in=line_following.read_optical() suivants ;
Les commentaires pour cette méthode read_optical() lit ce qui suit :
Retourne
0 × 000 optical1 noir
0x0FF optical1 blanc
optical1 0 x 100 blanc
0x1ff optical1 noir
0x2XX n’est pas prêt ; n’utilisez pas cette valeur
En fait, est devrait être la suivante
Retourne
0 × 000 optical1 noir
0xFF optical1 blanc
optical2 0 x 100 blanc
0x1ff optical2 noir
0x2XX n’est pas prêt ; n’utilisez pas cette valeur (soit capteur peut retourner cette valeur)
En fait, 0x0ff devrait être 0xff
Se référer à blog logiciel partie 3
Vous verrez dans les paragraphes ci-dessous l’importance de ces fautes de frappe. (a faire avec tout autre capteur de lecture) Sur la ligne qui suit le robot il sont a deux capteurs optiques, chaque fois que la fonction loop() exécute les appels de croquis linefollow.ino une méthode pour voir si un des capteurs est de voir clair ou foncé.
Sur un microcontrôleur, tels que l’Arduino, une seconde est une très longue période. La fonction loop() peut exécuter plusieurs milliers de fois par seconde. Juste combien de temps chaque boucle prend dépend des instructions de programme combien ont lieu. Quelques instructions prennent plus de temps à exécuter que d’autres instructions.
Instruction (ce que fonctions et méthodes sont constitués de) temps d’exécution est mesuré en cycles d’horloge du CPU. L’Arduino par défaut fonctionne à 16 MHz ou 16 millions horloge cycles par seconde. L’esquisse linefollow.ino effectue une logique assez simple.
Après avoir configuré certaines variables, le loop() appelle une fonction pour voir si un capteur est léger ou foncé, selon la réponse certaine logique fantaisie est exécutée pour réduire la réponse à une valeur de 0, 1, 2 ou 3. Ces valeurs sont ensuite utilisées pour raconter les moteurs pour soit aller de l’avant, vers la gauche ou la droite.
Toutes les 15 millisecondes le programme boucle est dit de passer et lire l’autre capteur. Si vous avez un programme qui effectue une boucle lire tout d’abord un capteur, convertit la réponse à 0, 1, 2 ou 3, dire les moteurs ce qu’il faut faire et puis lire l’autre capteur, convertir la réponse à 0, 1, 2 ou 3 et puis dire les moteurs quoi faire. Dans de nombreux cas, en fonction des valeurs des variables action1 et action2, les instructions pour commander les moteurs sont ignorées. Se référer à un article de blog plus tard.
Ces opérations sont font à nouveau à des milliers de fois par seconde. Le reste de ce blog et les articles plus tard vont vous apprendre ce qui se passe avec la logique de fantaisie qui lit le capteur et convertit la réponse à 0, 1, 2 ou 3. Le segment de code suivant est le code de fantaisie qui convertit les lectures du détecteur à une valeur de0, 1, 2 ou 3. Ce code implique quelques instructions de programme qui peuvent être assez déroutantes pour les programmeurs de newmicro-contrôleur.
S’il vous plaît se référer à une autre entrée de blog que j’ai écrit appelé « Tutoriel – Bit cogner et Boolean Math sans le Math » ce tutoriel va de pair avec la compréhension du segment de code suivant :
Si ((sensor_in & 0xf00) == 0)
sensorValue1 = sensor_in & 0xff ;
sinon si ((sensor_in & 0xf00) >> 8 == 1)
sensorValue2 = sensor_in & 0xff ;
Si (sensorValue1 == 0 x 00) action1 = action1 & 0xfe ;
Si (sensorValue1 == 0xFF) action1 = action1 | 0 x 01 ;
Si (sensorValue2 == 0 x 00) action1 = action1 | 0 x 02 ;
Si (sensorValue2 == 0xFF) action1 = action1 & 0xfd ;
Ce segment de code utilise trois opérateurs spéciaux (instructions qui fonctionnent sur certaines valeurs) le code utilise les opérateurs binaires suivants : & opérateur Bitwise AND, | Opérateur de bits OR operatorand la >> opérateur de décalage de la droite au niveau du bit.
(Lire le tutoriel)