tag 标签: 扫描

相关博文
  • 热度 16
    2017-5-19 23:13
    2096 次阅读|
    0 个评论
    在办公室里,我们常常用扫描仪扫描合同等纸质文件。 但日常生活中,我们要扫描收据、证明等文件时,往往得出门找店。毕竟不是每个人都会自备扫描仪。 而且面对较大文件的时候,普通扫描仪往往也无能为力... 面对这样的需求,HWTrek平台的Pup 项目应运而生。 Pup 是一款便携式智能扫描仪。使用方法超乎想象的简单:单手握住,对准目标,按下按钮,扫描完成。 遇上皱皱的文件或者厚重的书籍也不需要担心,Pup 会为纸质文件建立3D模型,通过其完善的算法,修复页面弯曲与变形,以获得最好的扫描效果。 扫描的文件可以存储为PDF,也可以通过光学文字辨识技术(OCR)转化为可编辑文本,导入Word 或 Excel 文档。 扫描完文件,也无需麻烦地找数据线连接电脑拷贝整理。动动手指头就可以进行分享、存储、或直接打印。 对于A8至A3尺寸的扫描件,Pup 都能实现高清质量扫描。 如果面对A2尺寸甚至更大的文件,Pup 也不虚,可以用其先扫描局部,再自动整合,即得到高清的完整图像。 好奇Pup 的工作原理? Pup 底部具备红外距离传感器,通过发射红外光,感应被扫描件反射回来红外光强度,测量Pup 与扫描件之间的距离,以判断相机拍摄范围,同时调整激光显示扫描范围。 底部的智能LED也将根据周围光亮情况,提供合适的照明,以此避免因光照不足、光照太强(如手机闪光灯)而导致的不良扫描效果。这一点与用手机做扫描相比,在效果上有很大的优势。 2016年底,Pup 项目在Indiegogo 平台众筹了33.5万美金。目前他们正在HWTrek平台寻找销售渠道,快来对接 Pup 项目需求吧~ 关于HWTrek智造协作平台 HWTrek 致力于协助全球物联网企业,媒合对接制造合作伙伴、行业专家,管理产品开发、与销售渠道连接。截至 2017年2月,平台已吸引 11,000 多家物联网中小企业和 2,800 多个硬件项目,90%来自欧美。已汇聚 2,200 多位来自供应链的专家及 1,000 多个解决方案。
  • 热度 7
    2016-2-21 10:45
    2733 次阅读|
    5 个评论
    基于状态机的按键扫描程序 所谓人机交互,无外乎是利用微控制器检测用户的输入指令,以及将设备的状态信息通过显示器显示出来,微控制器通过检测用户输入的指令,来及时响应用户的操作;用户则通过 LCD 等显示设备显示出来的信息,来实时的了解设备的运行状况。因此,一套优秀的人机接口,对一个嵌入式设备来说是多么的重要。有了人机接口,那么嵌入式的所有功能,都可以慢慢实现了。下面就有我来给大家讲讲人机交互里面最简单的输入设备,按键的扫描实现方法吧。 按键的扫描方式主要有下面几种: 1 、死循环扫描方式 :这种扫描方式,一般出现在大量的单片机教程及 51 开发板的配套例程里面,因此一般单片机初学者多是用这种扫描方式,因为这种扫描方式简单直接,也比较好理解。假定按键端口为 PIN_KEY1 ,延时函数为 delay_ms(unsined int ms), 则死循环扫描方式的实现方式如下: //由于超出字数,具体程序请大家阅读附件理解,抱歉。 以上就是死循环扫描方式的按键扫描实现方法,是最简单的方法, 这种方法最大的缺点就是占用 CPU 时间过长。 当实现的功能比较简单,例如只是控制一个 LED 灯的亮灭,感觉不出这种方法的缺点。但是当功能比较多的时候,就会造成系统比较卡顿的现象,使系统运行不流畅,造成的原因就是 delay_ms(20) ,因为在延时的 20ms 里面, CPU 完全是死等在那里,不去处理其他任何功能,只有当按键松开后,才会去处理其他功能,如果到处都充满了这种死循环,那么就会有很多功能得不到及时的响应,而造成系统卡顿。 2 、中断方式: 这种按键扫描方式一般是利用外部中断来实现,因为外部中断一般具有上升沿触发中断、下降沿触发中断、高电平触发中断、低电平触发中断等,当按键没有按下时为高电平,按下按键后,会有一个下降沿或者是低电平,外部中断检测到该信号后,进入外部中断处理程序,从而实现按键扫描。这种方式一般利用在一些需要低功耗应用的场合,当 MCU 进入低功耗模式时,需要一个外部中断来唤醒 MCU ,进入运行模式,这时我们可以利用一个外部中断来唤醒 MCU ,并且通过外部中断来检测扫描按键是否按下,实现特定的功能。外部中断扫描方式的主要优点是,平时不需要 MCU 的参与,也就不消耗 MCU 的运行时间,只有当检测到外部中断时,才处理按键事件;缺点是一般 MCU 的外部中断口不多,而外部中断一般是用来处理一些比较紧急的功能,比如过零检测等功能的。因此,外部中断扫描方式也不是最常用的按键扫描方法。 3 、 ADC 检测按键: 这种方法一般是使用在具有 ADC 功能的单片机上,当 IO 口不足时,可以使用一个 AD 口来检测按键,每个按键按下时, AD 采集到的数据不一样,从而来实现按键的检测。 4 、定时器定时扫描方式 :这种方法和方法 1 有点类似,只是不会像方法 1 那样死等在那里消耗 MCU 运行时间,而是通过定时器扫描来实现。首先, MCU 检测到按键后,定时器定时,达到一定时间后,继续扫描按键是否按下,然后计时按键按下的时间,当 20ms 以后按键还是按下状态,则执行按键操作,反之则认为是抖动。下面是我利用状态机实现的一个按键扫描程序,先贴出源代码再讲解实现过程。 //由于贴源代码超出字数,此处程序请大家看附件资料理解,抱歉,大家可以安装 Source Insight 3阅读,里面已经附件里面已经建好了工程。   //main 函数如下: void main(void) {        // 系统初始化        SystemInit();        while(1) {        if (SystemFlag.fTimer_5ms)//a        {               SystemFlag.fTimer_5ms = 0;//b               process_key();//c } } } 注解: a、 查询 5ms 标志是否为真,这个标志是在定时器中断里面置位的, 5ms 定时到,就置位该标志。 b、 清楚 5ms 到标志; c、 调用按键扫描函数,这样按键扫描函数是 5ms 执行一次。 process_key() 函数里面的具体的按键功能执行函数请查看附件,里面注释的很清楚了。 以上程序实现的功能是,短按 K1 , LED1 亮, LED2 灭;短按 K2 , LED1 灭, LED2 亮;长按 K1 两秒, LED1 翻转;长按 K2 两秒, LED2 翻转; K1 和 K2 同时按下 2 秒, LED1 和 LED2 都翻转。附件使用的是瑞萨 R5F100FC 单片机编程实现的,大家可以移植到任何平台,不会的可以跟帖回复,我可以和大家共同探讨。 我想经过了上面的讲解,大家对按键的几种扫描实现方式都有了一个足够的认识了,大家也可以看出状态机编程应用比较实用。将一个功能,分解成多个不同的状态,每个状态处理一个步骤,简单易懂,而且也更加容易实现。 如果你是个单片机初学者,或者是还在使用死循环扫描按键的程序员,那么请赶紧抛弃死循环吧,尽量用定时器中断来实现一个简单的前后台系统。 我自己是一个很喜欢使用状态机机制来编程的人,因为我觉得那样对系统的整个运行流程比较清晰。好了,今天就先写到这里了,以后我有空会继续分享一些个人编程过程中用到的方法,只希望对单片机初学者有个抛砖引玉的效果,让他们编程时,尽量从产品角度来编写程序。   如果你对以上程序还有疑问,欢迎跟帖回复 ( ^_^ ) 。 如果想更加详细的了解状态机按键扫描的实现,推荐大家看两本书,一本是“匠人手记 一个单片机工作者的实践与思考(第2版)”,一本是“AVR单片机嵌入式系统原理与应用实践”,大家可以先到网上看看书籍目录,如果觉得有需要的话,可以发邮件邮件给我,我可以发电子版给大家。
相关资源