感应工位点亮灯光(结题)
第三篇:问题及解决
体验Vishay VEML4020 近距离感应开发板的路上,遇到不少的阻碍。或许是对于LPC使用keil MDK平台真有些不太熟悉呢!
虽然这二者在界面结构和设置上大致相近,好在有朋友在帮忙,逐步的一个一个的难关闯过,获得了一个自认为比较满意的实现方案。尽管这中间还有很多的问题,留待以后精细解决吧!
首先,Vishay VEML4020套件携带的U盘里面存放的VEML4020 EVM Board资源及方案代码资料(方案资料夹-P15-098Oscar-Body Cream(LPC824+Proximity Sensor)_V1_Claire.Chen_2015.12.01.rar)解压总是出现异常。尝试了很多次之后,重新下载升级了电脑的解压缩软件才得以解决。
其次,VEML4020 EVM Board的nxp_lpcxpresso_824_periph_examples工程代码编译出错。
当Workspace里面的工程lib代码无法找到之时,需要根据资料文档(6. 简易操作手册 - P15-098 Oscar-BodyCream(LPC824+Proximity Sensor)_V1_Claire.Chen_2016.01.21)指导的方法做。注意:在打开工程之前,最好确保工程文件夹的路径和文件夹名称不要太长,否则也会报错的。
1.先安装mbed Windows serial port driver,下面是最新驱动的下载地址:
https://developer.mbed.org/handbook/Windows-serial-configuration#1-download-the-mbed-windows-serial-port。
2.上电,会跳出一个 MBED 的 U 盘,设备管理器可以找到 COM 口。
3. 打开对应的 Code 软件包,路径为:
applications\lpc8xx\keil_uvision_projects\nxp_lpcxpresso_824。
4. 用 Keil 打开工作空间nxp_lpcxpresso_824_periph_examples.uvmpw 文件。
5. 编译最上面两个 library,再将periph_i2cm_polling Project 编译。此处一定要注意,初次打开工作台时,活动工程为periph_i2cm_pollingProject。
在编译某个工程代码之前一定要先将这个工程设定为当前活动工程才行,否则,会出错的。
6. 设置 Debug,选择CMSIS-DAP Debugger,SW 接口,在CMSIS-DAP Debugger界面可以看到目标板是否连接。
然后下载,等到LPC824 下载完毕,按 Reset复位运行即可。
第四篇:项目实现
我的项目内容是使用VEML4020 EVM Board实现工位人员存在感应探测,输出相对应的状态。这里是借用VEML4020 EVM Board上面的D5,D6,D7三个led灯来指示接近感应探测状态和输出状态。
工程代码如下:
/*检测proximity measurement是否可读*/
do { // wait on prox dataready bit
txData[0]=REGISTER_COMMAND; //80h
SetupXferRecAndExecute(I2C_ADDR_7BIT,txData,txSize, rxData, rxSize);// read command register
delay(delay_time);
} while (!(rxData[0] &COMMAND_MASK_PROX_DATA_READY)); // prox data readyCOMMAND_MASK_PROX_DATA_READY= 0010 0000
/*读取proximity measurement值*/
txSize = 1;
rxSize = 2;
txData[0]=REGISTER_PROX_VALUE; //87h
SetupXferRecAndExecute(I2C_ADDR_7BIT,txData,txSize, rxData, rxSize); // read prox value
delay(delay_time);
/*转换数据*/
MSB = rxData[0];
LSB = rxData[1];
last_Data = ((MSB <<8) + LSB);
SummeProxiValue +=last_Data; // Summary of all measured prox values
}
AverageProxiValue = SummeProxiValue/times;// calculate average //计算平均值
// AverageProxiValue =AverageProxiValue -2400;
/* 判断感应距离 输出状态 */
if(AverageProxiValue >3500)
{
Chip_GPIO_SetPinOutHigh(LPC_GPIO_PORT,0, ledBits[0]); // 离开指示
Chip_GPIO_SetPinOutLow(LPC_GPIO_PORT,0, ledBits[1]); // 靠近指示
Chip_GPIO_SetPinToggle(LPC_GPIO_PORT,0, ledBits[2]); // 靠近闪烁
}
else
{
Chip_GPIO_SetPinOutLow(LPC_GPIO_PORT,0, ledBits[0]);
Chip_GPIO_SetPinOutHigh(LPC_GPIO_PORT,0, ledBits[1]);
}
。
实现的视频如下:
http://v.youku.com/v_show/id_XMjYxNjE3NjkzNg==.html
。
最后再次感谢朋友们的帮助和支持!
视频播放:
多谢分享啊