物联网实验报告实验二Word文档下载推荐.docx

上传人:b****2 文档编号:3182685 上传时间:2023-05-01 格式:DOCX 页数:8 大小:39.41KB
下载 相关 举报
物联网实验报告实验二Word文档下载推荐.docx_第1页
第1页 / 共8页
物联网实验报告实验二Word文档下载推荐.docx_第2页
第2页 / 共8页
物联网实验报告实验二Word文档下载推荐.docx_第3页
第3页 / 共8页
物联网实验报告实验二Word文档下载推荐.docx_第4页
第4页 / 共8页
物联网实验报告实验二Word文档下载推荐.docx_第5页
第5页 / 共8页
物联网实验报告实验二Word文档下载推荐.docx_第6页
第6页 / 共8页
物联网实验报告实验二Word文档下载推荐.docx_第7页
第7页 / 共8页
物联网实验报告实验二Word文档下载推荐.docx_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

物联网实验报告实验二Word文档下载推荐.docx

《物联网实验报告实验二Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《物联网实验报告实验二Word文档下载推荐.docx(8页珍藏版)》请在冰点文库上搜索。

物联网实验报告实验二Word文档下载推荐.docx

实验日期:

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<

ttt;

t++)

{

TOSH_uwait(1000);

}//红灯点亮周期800ms

callLeds.redOff();

}//红灯熄灭周期800ms

callLeds.redOn();

}

callTimer.start(TIMER_ONE_SHOT,0);

//已用for循环延时,此处跳转延时设置为0

current++;

break;

.'

/*dot:

onforoneunit,offforoneunit*/

if(m==0){

dbg(DBG_USR1,"

dot\n"

callLeds.greenOn();

m=1;

//用m=0时点亮绿灯,m=1时熄灭绿灯

tt;

callTimer.start(TIMER_ONE_SHOT,0);

}

else{

callLeds.greenOff();

m=0;

callTimer.start(TIMER_ONE_SHOT,0);

//下面程序思路和之前的思路相近

-'

/*dash:

onforthreeunits,offforoneunit*/

dash\n"

callLeds.yellowOn();

}//callTimer.start(TIMER_ONE_SHOT,MORSE_UNIT);

callLeds.yellowOff();

current++;

default:

/*illegalcharacter:

ignore*/

illegalcharacter!

\n"

/*wraparoundstringifendreached*/

if(!

*current)

current=morse;

五、讨论与结论(对实验现象、实验故障及处理方法、实验中存在的问题等进行分析和讨论,对实验的进一步想法或改进意见。

把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++){TOSH_uwait(1000);

}反复粘贴此语句,程序显得繁琐。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2