El código fuente del coche robot.

Este tutorial explicará brevemente sobre el automóvil robot que la estructura del código fuente de la placa de controlador de estudio a pedido de muchos fanáticos de los automóviles que no están familiarizados con las características de MCU. Y dé dos ejemplos de automóviles robot para ilustrar cómo fusionar las nuevas funciones lanzadas por el estudio y cómo expandir sus propias funciones.

Debe instalar keil 4 para modificar el código fuente de la placa de controlador del estudio.

Primero, echemos un vistazo a la arquitectura del código fuente de la placa de controlador:

El directorio de primer nivel del código fuente publicado por el estudio probablemente sea así. Hay cuatro archivos a los que debemos prestar atención, y los otros archivos se pueden ignorar.

  1. La carpeta lib en la parte superior: esta carpeta es el archivo de la biblioteca de la placa del controlador, como la biblioteca de funciones del controlador del manipulador.
  2. Carpeta de origen: esta carpeta es el lugar donde se coloca todo el código C de la placa del controlador. Lo que tenemos que modificar es el programa interior.
  3. Archivo Motor_con.uvproj: Este archivo es el archivo del proyecto. Después de instalar keil 4, el sistema lo asociará automáticamente. Solo necesita hacer doble clic en este icono para modificar el código fuente en el futuro.
  4. motor_con.hex: este archivo es el firmware compilado por keil 4, que es el firmware que se grabará en la placa del controlador.

Echemos un vistazo al directorio secundario. Solo hay un archivo de biblioteca en el directorio lib. En general, no es necesario que te preocupes por eso, por lo que no lo analizaremos más de cerca. Mire principalmente la carpeta Fuente.

Explique por separado:

Config.h: este archivo guarda diversa información de inicialización del robot, incluida la definición de pines, la definición del temporizador, el ángulo inicial del servo, el puerto de salida del motor y otras configuraciones. Este archivo es también uno de nuestros archivos modificados con más frecuencia.

main.c: El archivo de la función principal. Hay una función main() en este archivo. La ejecución del programa de la MCU comienza desde esta función main().

motor.c Inicialización de motor y pines.

timer.c El archivo de interrupción del temporizador contiene la implementación de interrupción de cada temporizador.

uart.c El puerto serie interrumpe el archivo y la comunicación con la computadora host se realiza aquí.

Otros archivos que terminan en .h: todos los archivos de encabezado, incluidas las declaraciones de varias funciones, y aquellos que estén interesados ​​​​pueden abrirlos por sí mismos.

Después de la introducción de la estructura básica de archivos, podemos ver que el nivel de estructura del código fuente de la placa del controlador del estudio es muy claro, lo cual es muy conveniente para la escritura y el mantenimiento del código.

A continuación, tome un paquete de actualización "encender y encender la lámpara de agua" lanzado por el estudio como ejemplo para explicar cómo fusionar el código. Primero descargue el paquete de actualización de la publicación de publicación del código fuente de la computadora inferior del estudio y descomprímalo para obtener tres archivos: SelfTest.c, SelfTest.h y main.c. De acuerdo con la comparación del proyecto fuente original, se puede encontrar que hay dos archivos más, SelfTest.c y SelfTest.h. Al mismo tiempo, el código original en el archivo main.c es:

1. Puede modificar este programa arbitrariamente y aplicarlo a los robots de automóviles inteligentes y otros productos electrónicos desarrollados por usted mismo, pero está prohibido usarlo para obtener ganancias de otros.

2. Por WIFI Robot Network·Robot Creative Studio

3.*/

4.#incluye "stc_new_8051.h"

5.#incluye "motor.h"

6.#incluye "uart.h"

7.#incluir <stdio.h>

8.#incluye "tipo.h"

9.#incluye "temporizador.h"

10

11.void principal (vacío)

12.{

13.UART_init();

14./* El temporizador 0 está dedicado al servo, no se recomienda cambiar la configuración */

15.Temporizador0_Iniciar();

16./* El temporizador 1 es gratuito, los usuarios pueden usarlo de manera flexible */

17.Temporizador1_Iniciar();

18.Inicio_Motor();

19. mientras(1)

20.{

21. ;

22. }

23.}

Copiar código

Ahora se convierte en:

  1. Puede modificar este programa arbitrariamente y aplicarlo a los robots de automóviles inteligentes y otros productos electrónicos desarrollados por usted mismo, pero está prohibido usarlo para obtener ganancias de otros.
  2. Por WIFI Robot Network·Robot Creative Studio
  3. */

4.#incluye "stc_new_8051.h"

5.#incluye "motor.h"

6.#incluye "uart.h"

7.#incluir <stdio.h>

8.#incluye "tipo.h"

9.#incluye "temporizador.h"

10.#incluye "Autoprueba.h"

  1. vacío principal (vacío)

13.{

  1. TestApp_Init();
  2. UART_init();

18./* El temporizador 0 está dedicado al servo, no se recomienda cambiar la configuración */

19.Temporizador0_Iniciar();

20./* El temporizador 1 es gratuito, los usuarios pueden usarlo de manera flexible */

21.Temporizador1_Iniciar();

22.Inicio_Motor(); veintitrés.

  1. mientras(1)
  2. {
  3. }
  4. }

Copiar código

Preste atención al código en las líneas 10 y 15 anteriores. Esto se modifica donde el programa C original.

Si es un archivo que no existía antes, como SelfTest.c y SelfTest.h, podemos colocar estos dos archivos en la carpeta Fuente de acuerdo con las indicaciones en la publicación de publicación del código fuente.

Luego, el archivo main.c original, debemos referirnos a la diferencia entre estos dos archivos para la migración de código.

Copie el código anterior en la parte roja del archivo main.c en la ubicación correspondiente del archivo main.c original y guárdelo.

En este punto, la nueva función ha sido trasplantada, refiriéndose a los consejos en cada publicación de publicación de código fuente. En realidad, es muy simple. Una vez completada la migración, debe regenerar un nuevo firmware, usar la función de compilación de keil 4, hacer clic para generar el archivo motor_con.hex y luego consultar el Tutorial 5, grabarlo en la placa del controlador y las nuevas funciones ¡ser agregado!

Entonces, ¿qué debo hacer si quiero agregar nuevas funciones yo mismo? Tomemos como ejemplo la adición de "luces controladas por puerto P22", supongamos que la instrucción para encender las luces es FF040100FF y apagarlas es FF040000FF.

En primer lugar, debe averiguar qué pin desea agregar a la función, puede consultar el diagrama de descripción del pin en la publicación de liberación de la placa del controlador para elegirlo usted mismo. Ahora, vamos a usar el puerto P22 para controlar las luces, por lo que el primer paso es agregar definiciones de pines en el archivo Config.h:

1.sbit LUZ PRINCIPAL_CON=P2^2;

Copiar código

Esta es la definición que usamos la interfaz P22 para conectar los faros.

Luego, en el archivo motor.h, defina la definición de macro del faro, para que no necesitemos usar la forma poco intuitiva de MAINLIGHT_CON=1 en llamadas específicas, y el código sea conveniente para leer y comprender.

1.#define MAINLIGHT_TURNON MAINLIGHT_CON=0;

2.#define MAINLIGHT_TURNOFF MAINLIGHT_CON=1;

Copiar código

Desde arriba de la definición de la macro, puede ver que cuando se encienden las luces del automóvil y se ejecuta la macro, el pin MAINLIGHT_CON, que es el pin P22, está bajo. En este momento, si el exterior es alto, entonces las luces del automóvil están encendidas, pero cuando se ejecuta la definición macro de apagar las luces, MAINLIGHT_CON=1 es de nivel alto y las luces se apagan. Por supuesto, aquí se usa la corriente del disipador, y también se puede usar el método de la fuente de corriente, pero la fuerza motriz es relativamente débil y las luces del automóvil no son tan brillantes.

En el tercer paso, después de terminar la definición macro de los faros, implementaremos el trabajo de los faros.

Todas las acciones de la placa del controlador de estudio se ejecutan en la interrupción del puerto serie, por lo que debemos modificar el archivo Uart.c. Abra el archivo Uart.c y busque la función void Communication_Decode(void). Esta función analiza el paquete de datos enviado por la computadora host. Nuestra función de ejecución de luces de automóviles se agregará aquí.

  1. vacío Communication_Decode (vacío)
  2. {
  3. si (búfer [0] == 0x00)
  4. {
  5. cambiar (búfer [1])
  6. {
  7. caso 0x01:MOTOR_GO_FORWARD; devolver;
  8. caso 0x02:MOTOR_GO_BACK; devolver;
  9. caso 0x03:MOTOR_GO_IZQUIERDA; devolver;
  10. caso 0x04:MOTOR_GO_DERECHO; devolver;
  11. caso 0x00:MOTOR_GO_STOP; devolver;
  12. predeterminado: retorno;
  13. }
  14. }
  15. de lo contrario si (búfer [0] == 0x01)
  16. {
  17. si (búfer [2]> 180)
  18. devolver;
  19. cambiar (búfer [1])
  20. {
  21. caso 0x01:se_timer[0]=búfer[2]; devolver;
  22. caso 0x02:se_timer[1]=búfer[2]; devolver;
  23. caso 0x03:se_timer[2]=búfer[2]; devolver;
  24. caso 0x04:se_timer[3]=búfer[2]; devolver;
  25. caso 0x05:se_timer[4]=búfer[2]; devolver;
  26. caso 0x06:se_timer[5]=búfer[2]; devolver;
  27. caso 0x07:se_timer[6]=búfer[2]; devolver;
  28. caso 0x08:se_timer[7]=búfer[2]; devolver;
  29. predeterminado: retorno;
  30. }
  31. }
  32. else if(buffer[0]==0x04) //Control de la lámpara utilizado por el método de corriente del sumidero
  33. {
  34. cambiar (búfer [1])
  35. {
  36. caso 0x01:
  37. LUZ PRINCIPAL_TURNON;
  38. romper;
  39. caso 0x00:
  40. LUZ PRINCIPAL_APAGADO;
  41. romper;
  42. predeterminado:retorno;
  43. }
  44. }
  45. demás
  46. {
  47. devolver;
  48. }
  49. }

Copiar código

Como se puede ver en el código de la línea 32 a la línea 45 arriba, tenemos una rama más en la rama if. Esta rama se utiliza para determinar si ha llegado el paquete de datos de encendido de la computadora host. Si se encuentra que el bit de tipo es 0x04 y el bit de comando es 0x01, entonces solo MAINLIGHT_TURNON; Esta definición de macro es para bajar el pin P22, es decir, para encender la luz para el comando FF040100FF. Por el contrario, el pin P22 se levanta y las luces del automóvil se apagan. OK, ejecute la compilación en Keil, puede generar el firmware del controlador que contiene los faros P22, ¿qué está esperando? Date prisa y grábalo en el tablero del controlador, y ve a buscar algo debajo de la cama ~~~

ArduinoRobot carRoboticsSmart robot car

Deja un comentario

Todos los comentarios son moderados antes de ser publicados