查看: 1490|回复: 0

[原创] 【DFR0004/RoMeo控制器试用】ADC 按键 测试

[复制链接]
  • TA的每日心情
    奋斗
    6 天前
  • 签到天数: 206 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2022-10-2 18:38:30 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 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沉金工艺,做工精细,质量稳定



    正面.jpg


    反面.jpg


    开发环境在此就不多介绍了,可以参照如下介绍。
    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。
    ad_key.png


    demo 里已经有了ADC采集按键的历程,根据历程跑一下通过ad 获取按键状态。

    1. char msgs[5][19] = {   "S1 > Up Key OK    ",
    2.                     "S2 > Left Key OK  ",
    3.                                         "S3 > Down Key OK  ",
    4.                     "S4 > Right Key OK ",
    5.                     "S5 > Select Key OK" };      //定义一个2维数组 存放显示字符
    6. int adc_key_val[5] ={30, 150, 360, 535, 760 };         //定义一个数组 存放模拟键值比较值
    7. int potPin = 7;           //定义按键模拟端口7
    8. int NUM_KEYS = 5;
    9. int adc_key_in;
    10. int key=-1;
    11. int oldkey=-1;

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

    16. void loop()
    17. {
    18.   adc_key_in = analogRead(potPin);          //读模拟口7
    19.   key = get_key(adc_key_in);               //调用判断按键程序
    20.   if (key != oldkey)                       // 判断是否有新键按下
    21.    {
    22.      delay(50);                          // 延时
    23.      adc_key_in = analogRead(potPin);       //读模拟口7
    24.      key = get_key(adc_key_in);            //调用判断按键程序
    25.      if (key != oldkey)
    26.       {
    27.          oldkey = key;
    28.          if (key >=0) Serial.println(msgs[key]);  //确认有键按下,就通过串口发送2维数组相应字符
    29.       }
    30.    }
    31. }
    32. int get_key(unsigned int input)
    33. {
    34.     int k;
    35.     for (k = 0; k < NUM_KEYS; k++)
    36.      {
    37.         if (input < adc_key_val[k]) return k;  //循环对比比较值,判断是否有键按下,有返回键号
    38.      }
    39.     if (k >= NUM_KEYS) k = -1;            //没有键按下k =-1
    40.     return k;
    41. }
    复制代码

    编译运行后运行结果如下,安按下按键后可以在串口输出键值信息。
    adc_key1.png







    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-15 07:07 , Processed in 0.130644 second(s), 16 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.