andeyqi 发表于 2022-10-2 18:38:30

【DFR0004/RoMeo控制器试用】ADC 按键 测试

本帖最后由 andeyqi 于 2022-10-3 15:36 编辑

收到开发板有一周多了,一直没有来的及更新帖子,之前一直没有玩过Arduino的板子,感谢提供的评测机会,借此机会体验下。开发板的外观和质感还是比较上档次的。
板卡简介:
Romeo控制器是DFRobot独家为机器人爱好者开发的一款基于Arduino平台的多功能实用控制器,能够利用Arduino平台下丰富的开源代码资源。该控制器不仅继承Arduino328控制器所有的特性而且集成了电机驱动、键盘、IO扩展板、无线数据串行通讯等接口。这就意味着Romeo不仅可以兼容Arduino系列的传感器和扩展板而且可最多直接驱动12个舵机。用户不在UNO上叠插一堆扩展板,节省空间和精力。Romeo为用户添加更多人性化设计,采用了3P彩色排针,能够对应我们的传感器连接线,防止插错烧元件。另外每个端口还添加了公母头排针,不论你用的是何种线材,能够放心的插在Romeo上。其中红色对应电源,蓝色对应模拟口,绿色对应数字口,黑色对应GND。
.采用Atmel Atmega328单片机
.兼容Arduino UNO Bootloader
.完全兼容Arduino UNO的端口布局
.集成APC220无线数传和DF-BluetoothV3 (SKU:TEL0026) 蓝牙模块接口
.支持5组I2C总线接口
.支持2路电机驱动,峰值电流2A,4个控制口使用跳线切换
.传感器电源和开关电源自动切换
.支持7个按键输入,5个A/D模拟按键,2个数字按键,使用跳线切换
.外部输入电压(推荐):7V~12V DC
.外部输入电压(范围):6V~20V DC
.逻辑工作电压:+5V DC
.数字信号I/O接口:14(其中6个PWM输出接口)
.模拟信号输入接口:8
.USB数据传输接口,TTL串口,ICSP在线烧写
.3个I2C接口(其中两个位90度弯曲排针)
.I/O接口电流:40 mA
.Flash容量:32 KB (4K用于bootloader)
.SRAM静态存储容量:2KB
.EEPROM存储容量:1KB
.时钟频率:16MHz
.RoMeo平面尺寸:100 X 80mm
.PCB沉金工艺,做工精细,质量稳定







开发环境在此就不多介绍了,可以参照如下介绍。
https://wiki.dfrobot.com.cn/_SKU_DFR0004_RoMeo%E6%8E%A7%E5%88%B6%E5%99%A8V1.0_%E5%85%BC%E5%AE%B9Arduino
板子上有五个AD的按键,每个按键按下会有不通的电压根据电压值的不通可以识别到对应的按键信息,原理图如下,从原理图看ADC 接到了ADC 7。


demo 里已经有了ADC采集按键的历程,根据历程跑一下通过ad 获取按键状态。
char msgs = {   "S1 > Up Key OK    ",
                  "S2 > Left Key OK",
                                        "S3 > Down Key OK",
                  "S4 > Right Key OK ",
                  "S5 > Select Key OK" };      //定义一个2维数组 存放显示字符
int adc_key_val ={30, 150, 360, 535, 760 };         //定义一个数组 存放模拟键值比较值
int potPin = 7;         //定义按键模拟端口7
int NUM_KEYS = 5;
int adc_key_in;
int key=-1;
int oldkey=-1;

void setup()
{
Serial.begin(19200);    //初始化串口 并设置波特率为19200
}

void loop()
{
adc_key_in = analogRead(potPin);          //读模拟口7
key = get_key(adc_key_in);               //调用判断按键程序
if (key != oldkey)                     // 判断是否有新键按下
   {
   delay(50);                        // 延时
   adc_key_in = analogRead(potPin);       //读模拟口7
   key = get_key(adc_key_in);            //调用判断按键程序
   if (key != oldkey)
      {
         oldkey = key;
         if (key >=0) Serial.println(msgs);//确认有键按下,就通过串口发送2维数组相应字符
      }
   }
}
int get_key(unsigned int input)
{
    int k;
    for (k = 0; k < NUM_KEYS; k++)
   {
      if (input < adc_key_val) return k;//循环对比比较值,判断是否有键按下,有返回键号
   }
    if (k >= NUM_KEYS) k = -1;            //没有键按下k =-1
    return k;
}
编译运行后运行结果如下,安按下按键后可以在串口输出键值信息。







页: [1]
查看完整版本: 【DFR0004/RoMeo控制器试用】ADC 按键 测试