揭开这款紧凑型附加板的神奇之处,它结合了旋转输入控制和动态LED照明,为用户带来引人入胜的体验。
A
A
硬件概览
它是如何工作的?
Rotary O Click 基于德州仪器的两个74HC595 SPI可配置8位移位寄存器。结合高品质的旋转编码器EC12D1564402,您可以在设计中添加一个精确的输入旋钮。EC12D1564402增量式旋转编码器周围环绕着16个橙色LED灯,单次旋转被划分为15个离散步骤(与电位器不同,旋转编码器可以连续旋转)。这个Click board™是构建各种需要精确输入的人机界面(HMI)应用的理想解决方案,同时也能为任何应用增添一些有趣的视觉效果。如前所述,这个Click board™使用的是ALPS的
EC12D1564402,一个带有按键的15脉冲增量旋转编码器。这种编码器具有独特的机械规格(其内部开关的去抖时间降至2ms)并且可以承受多达30,000次的切换周期。支持的去抖电路允许在触发输出之前接触稳定。74HC595通过标准的SPI接口控制围绕编码器的环状LED,最大频率为5MHz。旋转编码器时,它在两个mikroBUS™线路上输出A和B信号(相互失相),即mikroBUS™插座的AN和PWM引脚,以及通过mikroBUS™插座的中断线输出的按键接触。74HC595还具有通过RST
mikroBUS™线使用的复位功能。最后,Rotary O Click使用了Diodes Incorporated的74LVC1T45,这是一个单比特双电源电平转换收发器,具有三态输出,用于旋转编码器电压逻辑转换。这个Click board™可以通过PWR SEL跳线选择使用3.3V或5V逻辑电压水平,从而适用于3.3V和5V兼容的MCU。此外,这个Click board™还配备了一个包含易于使用的函数和示例代码的库,可作为进一步开发的参考。
功能概述
开发板
Arduino UNO 是围绕 ATmega328P 芯片构建的多功能微控制器板。它为各种项目提供了广泛的连接选项,具有 14 个数字输入/输出引脚,其中六个支持 PWM 输出,以及六个模拟输入。其核心组件包括一个 16MHz 的陶瓷谐振器、一个 USB 连接器、一个电
源插孔、一个 ICSP 头和一个复位按钮,提供了为板 子供电和编程所需的一切。UNO 可以通过 USB 连接到计算机,也可以通过 AC-to-DC 适配器或电池供电。作为第一个 USB Arduino 板,它成为 Arduino 平台的基准,"Uno" 符号化其作为系列首款产品的地
位。这个名称选择,意为意大利语中的 "一",是为了 纪念 Arduino Software(IDE)1.0 的推出。最初与 Arduino Software(IDE)版本1.0 同时推出,Uno 自此成为后续 Arduino 发布的基础模型,体现了该平台的演进。
微控制器概述
MCU卡片 / MCU
建筑
AVR
MCU 内存 (KB)
32
硅供应商
Microchip
引脚数
28
RAM (字节)
2048
你完善了我!
配件
Arduino Mega 的 Click Shield 配备了四个 mikroBUS™ 插槽,其中两个是 Shuttle 连接器,允许所有的 Click board™ 设备与 Arduino Mega 板轻松连接。Arduino Mega 板采用了AVR 8位微控制器,具有先进的RISC架构,54个数字 I/O 引脚,并且兼容 Arduino™,为原型设计和创建多样化应用提供了无限的可能性。该板通过 USB 连接方便地进行控制和供电,以便在开箱即用时高效地对 Arduino Mega 板进行编程和调试,另外还需要将额外的 USB 电缆连接到板上的 USB B 端口。通过集成的 ATmega16U2 程序器简化项目开发,并利用丰富的 I/O 选项和扩展功能释放创造力。有八个开关,您可以将其用作输入,并有八个 LED,可用作 MEGA2560 的输出。此外,该 shield 还具有来自 Microchip 的高精度缓冲电压参考 MCP1501。该参考电压默认通过板底部的 EXT REF 跳线选择。您可以像通常在 Arduino Mega 板上那样选择外部参考电压。还有一个用于测试目的的 GND 钩子。另外,还有四个额外的 LED,分别是 PWR、LED(标准引脚 D13)、RX 和 TX LED,连接到 UART1(mikroBUS™ 1 插槽)。此 Click Shield 还具有几个开关,执行诸如选择 mikroBUS™ 插槽上模拟信号的逻辑电平以及选择 mikroBUS™ 插槽本身的逻辑电压级别等功能。此外,用户还可以使用现有的双向电平转换器,无论 Click board™ 是否以3.3V或5V逻辑电压级别运行,都可以使用任何 Click board™。一旦您将 Arduino Mega 板与 Click Shield for Arduino Mega 连接,就可以访问数百个使用3.3V或5V逻辑电压级别工作的 Click board™。
使用的MCU引脚
mikroBUS™映射器
“仔细看看!”
原理图
一步一步来
项目组装
实时跟踪您的结果
通过调试模式的应用程序输出
1. 一旦代码示例加载完成,按下 "DEBUG" 按钮将启动构建过程,并将其编程到创建的设置上,然后进入调试模式。
2. 编程完成后,IDE 中将出现一个带有各种操作按钮的标题。点击绿色的 "PLAY" 按钮开始读取通过 Click board™ 获得的结果。获得的结果将在 "Application Output" 标签中显示。
软件支持
库描述
这个库包含了ROTARY O Click驱动程序的API。
关键函数:
rotaryo_generic_transfer
- ROTARY数据传输函数rotaryo_turn_on_led_by_data
- 根据数据打开LED的函数rotaryo_turn_on_led_by_position
- 根据位置打开LED的函数
开源
代码示例
这个示例可以在 NECTO Studio 中找到。欢迎下载代码,或者您也可以复制下面的代码。
/*!
* @file main.c
* @brief Rotary O Click example
*
* # Description
* The demo application controls led on click with rotory on board
*
* The demo application is composed of two sections :
*
* ## Application Init
* Initializes SPI driver, set initial states,
* set RST logic high and performs device configuration.
*
* ## Application Task
* Show functionality of Rotary O Click, rotating and turn on/off led's,
* using the SPI interface
*
* @note
* In order to use all of the clicks functionality, pull down INT pin.
*
* @author Stefan Ilic
*
*/
#include "board.h"
#include "log.h"
#include "rotaryo.h"
static rotaryo_t rotaryo;
static log_t logger;
static uint8_t start_status;
static uint8_t old_state;
static uint8_t new_state;
static uint8_t old__rot_state;
static uint8_t new_rotate_state;
static uint8_t led_state;
static uint16_t led_data;
void application_init ( void ) {
log_cfg_t log_cfg; /**< Logger config object. */
rotaryo_cfg_t rotaryo_cfg; /**< Click config object. */
/**
* Logger initialization.
* Default baud rate: 115200
* Default log level: LOG_LEVEL_DEBUG
* @note If USB_UART_RX and USB_UART_TX
* are defined as HAL_PIN_NC, you will
* need to define them manually for log to work.
* See @b LOG_MAP_USB_UART macro definition for detailed explanation.
*/
LOG_MAP_USB_UART( log_cfg );
log_init( &logger, &log_cfg );
log_info( &logger, " Application Init " );
// Click initialization.
rotaryo_cfg_setup( &rotaryo_cfg );
ROTARYO_MAP_MIKROBUS( rotaryo_cfg, MIKROBUS_1 );
err_t init_flag = rotaryo_init( &rotaryo, &rotaryo_cfg );
if ( init_flag == SPI_MASTER_ERROR ) {
log_error( &logger, " Application Init Error. " );
log_info( &logger, " Please, run program again... " );
for ( ; ; );
}
log_info( &logger, " Application Task " );
led_data = 0x0001;
old_state = 0;
new_state = 1;
old__rot_state = 0;
new_rotate_state = 1;
}
void application_task ( void ) {
rotaryo_turn_on_led_by_data( &rotaryo, led_data );
// Push button
if ( rotaryo_button_push( &rotaryo ) ) {
new_state = 1;
if ( new_state == 1 && old_state == 0 ) {
old_state = 1;
led_state = ( led_state + 1 ) % 5;
if ( led_state == 4 ) {
for ( old_state = 0; old_state < 17; old_state++ ) {
rotaryo_turn_on_led_by_data( &rotaryo, 0xAAAA );
Delay_ms( 100 );
rotaryo_turn_on_led_by_data( &rotaryo, 0x5555 );
Delay_ms( 100 );
}
for ( old_state = 0; old_state < 17; old_state++ ) {
rotaryo_turn_on_led_by_position( &rotaryo, old_state );
Delay_ms( 100 );
}
led_state = 0;
led_data = rotaryo_get_led_data( led_state );
}
else {
led_data = rotaryo_get_led_data( led_state );
}
}
}
else {
old_state = 0;
}
// Rotate Clockwise and CounterClockwise
if ( rotaryo_get_eca_state( &rotaryo ) == rotaryo_get_ecb_state( &rotaryo ) ) {
old__rot_state = 0;
start_status = rotaryo_get_eca_state( &rotaryo ) && rotaryo_get_ecb_state( &rotaryo );
}
else {
new_rotate_state = 1;
if ( new_rotate_state != old__rot_state ) {
old__rot_state = 1;
if ( start_status != rotaryo_get_eca_state( &rotaryo ) ) {
led_data = ( led_data << 1 ) | ( led_data >> 15 );
}
else {
led_data = ( led_data >> 1 ) | ( led_data << 15 );
}
}
}
}
void main ( void ) {
application_init( );
for ( ; ; ) {
application_task( );
}
}
// ------------------------------------------------------------------------ END