Paso 2: Análisis de ReadOptical() método
Como dije hay son unas cuantas faltas de ortografía en los comentarios del código en linefollow.ino.Every lazo las llamadas de programa la siguiente function:sensor_in=line_following.read_optical();
Los comentarios de este método de read_optical() Lee lo siguiente:
Devoluciones
0 × 000 optical1 negro
0x0ff optical1 blanco
0 × 100 optical1 blanco
0x1ff optical1 negro
0x2XX no está listo; no utilizar este valor
Realmente debe ser el siguiente
Devoluciones
0 × 000 optical1 negro
0xFF optical1 blanco
0 × 100 optical2 blanco
0x1ff optical2 negro
0x2XX no está listo; no utiliza este valor (cualquier sensor puede devolver este valor)
0x0ff debe ser 0xff
Consulte la entrada de blog Software parte 3
Se verá en los párrafos a continuación la importancia de estos errores. (tiene que ver con la lectura de cada sensor de otros) En la línea siguiente robot hay dos sensores ópticos, cada vez que la función loop() ejecuta las llamadas de bosquejo de linefollow.ino un método para ver si uno de los sensores es ver claro u oscuro.
En un microcontrolador como Arduino, un segundo es un tiempo muy largo. La función loop() puede ejecutar muchos miles de veces por segundo. A cada bucle tarda depende de cuántas instrucciones programa llevará a cabo. Algunas instrucciones tardan más tiempo en la ejecución de otras instrucciones.
Instrucción (lo que funciones y métodos se componen de) tiempo de ejecución se mide en ciclos de reloj de CPU. El Arduino por defecto funciona a 16 MHz o 16 millones ciclos de reloj de un segundo. El bosquejo de linefollow.ino realiza algunas lógica bastante simple.
Después de configurar algunas de las variables, el loop() llama a una función para ver si es de un sensor de luz u oscuro, dependiendo de la respuesta alguna suposición lógica es ejecutado para reducir la respuesta a un valor de 0, 1, 2 o 3. Estos valores entonces se utilizan para contar los motores ya sea avanzar, girar a la izquierda o derecha.
Cada 15 millisegundos el programa loop dice cambiar y leer el otro sensor. Así que tienes un programa que coloca primero un sensor de lectura, convierte la respuesta en 0, 1, 2 o 3, indicar a los motores qué hacer y luego leer el otro sensor, convertir la respuesta a 0, 1, 2 o 3 y luego decirle a los motores qué hacer. En muchos casos, dependiendo de los valores de las variables de acción1 y action2, se omiten las instrucciones para controlar los motores. Se refieren a un blog más adelante.
Estas operaciones se hacen otra vez en miles de veces por segundo. El resto de este blog y los blogs más adelante van a enseñar lo que está sucediendo con la suposición lógica que lee el sensor y convierte la respuesta de 0, 1, 2 o 3. El siguiente segmento de código es el código de lujo que las lecturas del sensor se convierte en un valor de 0, 1, 2 o 3. Este código implica algunas instrucciones de programa que pueden ser bastante confusos para los programadores de controladores newmicro.
Por favor consulte otra entrada de blog que escribí llamado "Tutorial – poco golpeando y boleano matemáticas sin la matemáticas" este tutorial va de la mano con entender el siguiente segmento de código:
Si ((sensor_in & 0xf00) == 0)
sensorValue1 = sensor_in & 0xff;
else if ((sensor_in & 0xf00) >> 8 == 1)
sensorValue2 = sensor_in & 0xff;
Si (sensorValue1 == 0 x 00) acción1 = acción1 y 0xfe;
Si (sensorValue1 == 0xFF) acción1 = action1 | 0 x 01;
Si (sensorValue2 == 0 x 00) acción1 = action1 | 0 x 02;
Si (sensorValue2 == 0xFF) acción1 = acción1 y 0xfd;
Este segmento de código utiliza tres operadores especiales (instrucciones que operan sobre valores dados) el código utiliza los siguientes operadores binarios: & operador Bitwise y, | Puerta OR bit a bit el >> operador Bitwise derecha Mayús.
(Leer el tutorial)