物联网实验报告实验二.docx
- 文档编号:1700046
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:8
- 大小:39.41KB
物联网实验报告实验二.docx
《物联网实验报告实验二.docx》由会员分享,可在线阅读,更多相关《物联网实验报告实验二.docx(8页珍藏版)》请在冰点文库上搜索。
物联网实验报告实验二
实验报告
实验名称利用LED的HelloWorld实例
课程名称无线传感器网络实验
院系部:
电气与电子工程学院
专业班级:
电网1101班
学生姓名:
张雪垠赵炳强张鸣祚
学号:
******************************
指导教师:
***
成绩:
实验日期:
2014-4-8
华北电力大学(北京)
一、实验目的及要求:
本章将应用前面所学习的LED控制组件及Timer组件,对安装在ZigbeX上的LED的On/Off进行摩尔斯编码并输出单词“hello,world”的实例进行学习。
二、仪器用具:
主电脑、1个Mote设备、ISP工具、打印机连接线、USB连接线
三、实验原理:
HelloWorld应用程序是把“hello,world”文字转换为摩尔斯电码并显示在LED中的程序。
在HelloWorld实例中,设置Timer并按指定的时间打开/关闭LED,可以用摩尔斯电码表示所需的英文单词。
为了控制时间设置和LED的On/Off,在HelloWorld.nc文件中声明TimerC组件及LedsC组件,与自身的模块HelloWorldM组件进行连接。
在HelloWorld实例中使用的各组件的声明及连接结构,可以在配置文件HelloWorld.nc中进行确认。
Helloworld为了能够运行一个完整的应用程序,把必需的Main组件放在下层组件中,对其它组件及自身的模块部分进行连接。
通过Main组件最先运行的是HelloWorldM的StdControl.Init()函数。
在该函数中执行对LED的初始化及有关Off的指令。
在此之后调用的函数为StdControl.Start函数,通过Timer组件,设置为每秒(1000)只调用一次警报(TIMER_ONE_SHOT)。
Timer组件按设置,在1秒后通过Signal,调用HelloWorldM内的Timer.fired()函数。
在Timer.fired()函数中,根据保存在static指针变量morse中的“helloes,world"摩尔斯值,命令REDLED的On/Off。
例如,在摩尔斯电码空格“”中,在2*MORSE_UNIT期间内LED无任何变化,摩尔斯电码“.”中,在MORSE_UNIT期间内打开REDLED后,然后在MORSE_UNIT期间内关闭REDLED,通过current++跳到下一个摩尔斯电码。
摩尔斯电码“-”中,3*MORSE_UNIT期间内打开REDLED后,同样在MORSE_UNIT期间内关闭REDLED,通过current++跳到下一个摩尔斯电码。
通过这样的计算方法,安装了Helloworld程序的ZigbeX传感器节点,通过REDLED输出“Hello,world”摩尔斯电码。
将HelloWorldM中使用的多个组件的连接结构以图形结构显示如下:
四、实验步骤(包括原理图、实验结果与数据处理)
<利用Ponyprog工SP程序下载到ZigbeX中>
首先运行Cygwin。
如下输入命令,进入实例文件夹。
cd/opt/tinyos-1.x/contrib/zigbex/helloworld
接下来,输入“MakeZigbex”进行编译。
<利用USB工SP板下载到ZigbeX中>
①运行AVRStudio
②在AVRStudio中选择Tools->ProgramAVR->AutoConnect菜单,连接到USB-ISP上。
③连接完成后,出现如下下载画面。
④点击“…”按钮,选择所需的Hex文件后,点击“Program”按钮运行程序。
⑥按相应功能进行适当设置后,点击“Program”按钮。
在进行上述步骤之前,与ZigbeX连接的USB工SP板上的开关必须设为“ISP”模式,而且己通过USB连接线与计算机进行连接。
<在例程基础上修改程序为实验要求的程序>
修改后的程序如下:
加粗出为修改处
#defineMORSE_WPM1/*speed,inwordsperminute*/
/*we'dliketosay1000*60/50/MORSE_WPMhere,butthatgenerates
compilerwarningswhenproducing16-bitcode*/
#defineMORSE_UNIT(1000000/MORSE_WPM)/*millisecondsperunit*/修改比例,让小灯闪烁变慢
。
。
。
。
。
。
implementation{
intm=0,t,tt=800,ttt=300;//m为绿灯状态变量,m=0表示等灭;tt控制‘-’和‘.’时的周期;ttt控制‘’时的快闪周期
commandresult_tStdControl.init(){
callLeds.init();
/*TheTinyOScodetriestoturnofftheLEDsintheinitroutine,
butTOSSIMdoesn'tseemtoclearthemunlessweresetthem
explicitly:
*/
callLeds.redOff();
callLeds.yellowOff();
callLeds.greenOff();
returnSUCCESS;
}
。
。
。
。
。
。
eventresult_tTimer.fired(){
/*AnesCcompilerbugpreventsusfromdeclaring
staticcharmorse[],soweneedstaticchar*morse.*/
staticchar*morse="--.......--.--."
"-..-..-."
"-.--..-.";//‘张雪垠’对应的莫斯码
。
。
。
。
。
。
switch(*current){
case'':
/*pause:
offfortwounits*/
dbg(DBG_USR1,"Morse:
pause\n");
callLeds.redOn();
for(t=0;t { TOSH_uwait(1000); }//红灯点亮周期800ms callLeds.redOff(); for(t=0;t { TOSH_uwait(1000); }//红灯熄灭周期800ms callLeds.redOn(); for(t=0;t { TOSH_uwait(1000); } callLeds.redOff(); for(t=0;t { TOSH_uwait(1000); } callTimer.start(TIMER_ONE_SHOT,0);//已用for循环延时,此处跳转延时设置为0 current++; break; case'.': /*dot: onforoneunit,offforoneunit*/ if(m==0){ dbg(DBG_USR1,"Morse: dot\n"); callLeds.greenOn(); m=1;//用m=0时点亮绿灯,m=1时熄灭绿灯 for(t=0;t { TOSH_uwait(1000); } callTimer.start(TIMER_ONE_SHOT,0); } else{ dbg(DBG_USR1,"Morse: dot\n"); callLeds.greenOff(); for(t=0;t { TOSH_uwait(1000); } m=0; callTimer.start(TIMER_ONE_SHOT,0); } current++; break; //下面程序思路和之前的思路相近 case'-': /*dash: onforthreeunits,offforoneunit*/ dbg(DBG_USR1,"Morse: dash\n"); callLeds.yellowOn(); for(t=0;t { TOSH_uwait(1000); }//callTimer.start(TIMER_ONE_SHOT,MORSE_UNIT); callLeds.yellowOff(); for(t=0;t { TOSH_uwait(1000); } callTimer.start(TIMER_ONE_SHOT,0); current++; break; default: /*illegalcharacter: ignore*/ dbg(DBG_USR1,"Morse: illegalcharacter! \n"); break; } /*wraparoundstringifendreached*/ if(! *current) current=morse; returnSUCCESS; } } 五、讨论与结论(对实验现象、实验故障及处理方法、实验中存在的问题等进行分析和讨论,对实验的进一步想法或改进意见。 ) 把HelloWorld程序下载到设备后,可以看到设备通过三个LED反复显示“Hello,world"摩尔斯电码。 实验过程中主要问题是延时上的问题,之前一直想用callTimer.start(TIMER_ONE_SHOT,MORSE_UNIT)这条语句中的MORSE_UNIT来延时,后来发现callTimer.start(TIMER_ONE_SHOT,MORSE_UNIT)语句是一条跳转语句,执行完后就跳到程序开始eventresult_tTimer.fired()处去了,没法执行下一行程序,故改用TOSH_uwait(1000);语句延时,但是该语句以us为单位,所以只能用for循环延长周期。 本想自己定义一个delay()函数。 但是发现编译器不允许。 所以只能for(t=0;t
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 联网 实验 报告