Smart Display admite varios protocolos de comunicación CAN, entre ellos CANopen y Custom CAN ID. CANopen es un protocolo de comunicación estandarizado que define perfiles de comunicación, perfiles de dispositivo y modelos de objetos para distintos tipos de dispositivos, proporcionando un método estandarizado para configurar, supervisar y controlar dispositivos en un bus CAN. Por otro lado, cuando los dispositivos conectados a un bus CAN presentan funciones o requisitos específicos que no pueden cubrirse mediante los protocolos estándar existentes, Custom CAN ID permite definir la comunicación CAN en función de los requisitos de la aplicación, ofreciendo una mayor flexibilidad de configuración.
Este artículo explica cómo utilizar una placa Arduino, un módulo CAN bus y un sensor para cambiar de página en un Smart Display de 7 pulgadas mediante Custom CAN ID. Se describen los componentes de hardware utilizados en el proyecto, la compilación del programa Arduino y la implementación del cambio de página en el Smart Display mediante Custom CAN ID.
A través de esta demostración, los desarrolladores pueden comprender mejor la comunicación y el control entre la placa Arduino, el módulo CAN bus y Custom CAN ID, y utilizar este ejemplo como referencia para desarrollar aplicaciones relacionadas con la comunicación CAN de Smart Display.

Fig. 1 Diagrama de bloques del sistema
Este proyecto utiliza un Arduino Mega 2560 como controlador host y Arduino IDE v2.0.4 para el desarrollo del programa. Para establecer la comunicación con el Smart Display a través de la interfaz CAN bus, el host Arduino se conecta a un shield CAN bus. Este shield utiliza un controlador CAN MCP2515 y un transceptor CAN MCP2551 para establecer la comunicación CAN bus entre el host Arduino y el Smart Display.
Para esta aplicación se requieren los siguientes componentes:
- Smart Display de 7 pulgadas
- Arduino Mega 2560
- Shield CAN bus para Arduino Mega 2560
- Dongle CAN bus
- Sensor con botón físico
- LED
- Smart Display GUI Builder v0.4.5 o posterior
Esta demostración se divide en tres partes:
- Diseñar el proyecto en GUI Builder.
- Compilar y cargar el proyecto.
- Programar el host Arduino.
Diseñar el Proyecto en GUI Builder
Para comenzar, abra la versión más reciente de Smart Display GUI Builder y cree un nuevo proyecto. Introduzca un nombre para el proyecto; la carpeta del proyecto se seleccionará automáticamente.
Seleccione el tipo de dispositivo, en este caso, un dispositivo de 7 pulgadas, y elija "Custom CAN ID" como protocolo de comunicación. De forma predeterminada, la orientación de la pantalla está configurada en modo horizontal. A continuación, seleccione una plantilla de interfaz en blanco y haga clic en "Create" para crear el nuevo proyecto, como se muestra en la Figura 2.

Fig. 2
Una vez creado el proyecto en blanco, aparecerá la pantalla que se muestra en la Figura 3.

Fig. 3
Para esta demostración se necesita una segunda página. Haga clic en "Page" y, a continuación, en el botón con el signo más para añadir una nueva página.

Fig. 4
El estilo del fondo puede modificarse desde el panel "Resource".

Fig. 5
Seleccione el estilo de fondo deseado en el menú "background", situado en el lado derecho de la interfaz.

Fig. 6
Compilar y Cargar el Proyecto
Una vez completado el diseño de la interfaz y los pasos anteriores, el proyecto estará listo para compilarse y cargarse. Haga clic en "Device" y seleccione "Device Property". Revise la configuración del protocolo y de la velocidad de transmisión (baud rate), y ajústela si es necesario. Asegúrese de que la baud rate configurada en GUI Builder coincida con la definida en el programa Arduino. Una vez completada la configuración, haga clic en "Connect to Device". Cuando el dispositivo se haya conectado correctamente, haga clic en "Upload" para cargar el proyecto, como se muestra en la Figura 7.

Fig. 7
Cuando finalice la carga del proyecto, haga clic en "OK", como se muestra en la Figura 8.

Fig. 8
Una vez finalizada la carga, aparecerá la pantalla de inicio en el Smart Display, como se muestra en la Figura 9.

Fig. 9
A continuación, el Smart Display pasará de la pantalla de inicio a la página del proyecto, lo que indica que el proyecto se ha compilado y cargado correctamente mediante GUI Builder, como se muestra en la Figura 10.

Fig. 10
Programar el Host Arduino
La biblioteca mcp2515_can.h se utiliza para la comunicación mediante Custom CAN ID, mientras que la biblioteca SPI.h se utiliza para la comunicación mediante Serial Peripheral Interface (SPI). La biblioteca mcp2515_can.h permite establecer la comunicación con el controlador CAN (Controller Area Network) MCP2515, utilizado habitualmente en sistemas embebidos.
Esta biblioteca proporciona funciones para inicializar el MCP2515, configurar parámetros de comunicación CAN como la velocidad de bits, los filtros y las máscaras, transmitir y recibir mensajes CAN y comprobar posibles errores. En el programa desarrollado en Arduino IDE, los ajustes necesarios para la comunicación CAN se definen en el código mostrado en la Figura 11, incluidos el CAN ID, los parámetros de control y las variables relacionadas. Este fragmento de código inicializa las variables globales, las constantes y los arrays que se utilizarán posteriormente en el programa, junto con sus respectivos tipos de datos.

Fig. 11
Este fragmento de código contiene la función setup(), que se ejecuta una sola vez al iniciar el programa. Serial.begin() inicializa la comunicación serie con el Serial Monitor a una velocidad de 115200 baudios. El pin del LED integrado se configura como salida mediante pinMode(), mientras que el pin del botón físico se configura como entrada. A continuación, se utiliza un bucle while para inicializar el controlador CAN MCP2515 y se llama a CAN.begin() con CAN_250KBPS para establecer la velocidad de bits CAN en 250 kbps.

Fig. 12
La función changePageFunction() envía comandos CAN a través del MCP2515 para cambiar de página en el Smart Display mediante mensajes CAN con bytes de datos específicos. En primer lugar, la función envía un comando "device mode" para poner el Smart Display en modo de configuración, seguido de un comando "change page" con el número de página deseado. Por último, envía otro comando "device mode" para devolver el Smart Display al modo de visualización.

Fig. 13
Este fragmento de código contiene la función loop(), que se ejecuta repetidamente una vez finalizada la función setup().
El programa utiliza analogRead() para leer el valor de tensión del botón físico y lo almacena en la variable buttonValue. Si buttonValue es mayor que el valor de THRESHOLD, significa que se ha pulsado el botón físico. A continuación, el programa incrementa en 1 la variable nowPage y muestra el valor actual de nowPage en el Serial Monitor mediante sprintf() y Serial.println().
Después, el programa pasa el valor actual de nowPage a changePageFunction() para cambiar a la página especificada. Si nowPage es distinto de 0, digitalWrite() enciende el LED integrado del pin 13; de lo contrario, el LED se apaga. La variable lastDebounce se actualiza con el tiempo actual mediante millis() para registrar el momento de la pulsación más reciente del botón. El programa continúa leyendo buttonValue dentro de un bucle while hasta que se suelta el botón físico.
Por último, delay(100) introduce un retardo de 100 ms al final del bucle para que los mensajes del bus CAN se transmitan a un intervalo adecuado.

Fig. 14
Para obtener más información, consulte el código Arduino. Al establecer la comunicación entre el host y el Smart Display, asegúrese de que los parámetros correspondientes de la comunicación CAN estén configurados correctamente. Para obtener más información sobre la comunicación entre el host y el Smart Display, consulte el registro de comunicación de GUI Builder.
Después de verificar y cargar correctamente el programa en Arduino IDE, las páginas del Smart Display pueden cambiarse mediante el botón físico. Cuando el Smart Display muestra la primera página, el LED permanece apagado. Al pulsar el botón físico, la pantalla cambia a la segunda página y el LED se enciende, como se muestra en la Figura 15.

Fig. 15
Con esto finaliza la demostración del cambio de páginas del Smart Display mediante Custom CAN ID.
Para descargar el programa, el vídeo de demostración y los recursos relacionados, consulte la página del proyecto en GitHub. La configuración real del hardware se muestra en la Figura 16.

Fig. 16
Conclusión
Este ejemplo muestra cómo utilizar una placa Arduino con un controlador CAN MCP2515 para cambiar de página en un Smart Display mediante Custom CAN ID. El host Arduino lee la entrada de un botón físico y envía comandos CAN a través del MCP2515 al Smart Display para cambiar entre las distintas páginas de visualización.
Este ejemplo permite a los desarrolladores adquirir una comprensión básica de la comunicación y el control mediante Custom CAN ID entre un host Arduino y un Smart Display, y puede servir como referencia para desarrollar otras aplicaciones de comunicación CAN con Smart Display.