已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机科学与技术学院、软件学院学生实验报告实验题目: 基于ATOS平台的物联网实验 学生姓名: 指导教师: 专业班级: 提交日期: 49 实验一 LED组件1.1 实验要求绿灯一直处于熄灭的状态,红灯不停闪烁(注意:工具箱提供的代码有bug,对于基站节点LED_BLUE - 红灯 LED_YELLOW - 绿灯 ON和OFF逻辑相反)1.2 实验思路将绿灯状态改为OFF,红灯通过时间延迟控制其的亮灭。1.3 实验关键代码/* LED 示例程序的实现模块,简单的点亮3个LED灯date 2010-1*/module LedMuses interface Boot;implementation/* LED灯演示*/task void DemoLed()/* 目前节点上提供两个LED灯LED_BLUE - 蓝灯LED_YELLOW - 黄灯*/int i,j;while(1)for(i=0;i1000;i+)for(j=0;j500;j+);LED_BLUE_OFF; /* 熄灭蓝色LED灯 */LED_YELLOW_OFF; /* 点亮黄色LED灯 */for(i=0;i1000;i+)for(j=0;j500;j+);LED_BLUE_ON; /* 熄灭蓝色LED灯 */LED_YELLOW_OFF; /* 点亮黄色LED灯 */* 启动事件处理函数,在LED.nc已经关联到MainC.Boot接口系统启动后会调用此函数*/event void Boot.booted()post DemoLed();1.4 实验截图1.5 实验心得通过这次实验,掌握了对 LED的简单控制,受益匪浅,并且对此次实验的运作过程开始了解。 实验二 定时器组件1.1 实验要求通过定时器让绿色灯闪烁,并且闪烁三次后停止闪烁。1.2 实验思路设置一个变量,在计时器每计数一次自加一次,加到三时,停止计时器。1.3 实验关键代码#define DBG_LEV 5module TimerLedMuses interface Boot;/* Timer为系统接口TMilli指明了定时器的精度为毫秒 */uses interface Timer as Timer1; /* as关键字为接口别名 */uses interface Timer as Timer2;implementation/* 任务: 切换黄色LED灯 */int i=0;/* 启动事件处理函数,在TimerLed.nc已经关联到MainC.Boot接口系统启动后会调用此函数*/event void Boot.booted()/* 定时器1: 持续工作,每隔1s触发一次 */call Timer1.startPeriodic(1000);/* 定时器2: 持续工作,每隔3s触发一次*/call Timer2.startPeriodic(5000);/* 定时器1的事件处理函数 */event void Timer1.fired()/* 事件处理中直接切换蓝色LED灯 */ADBG(5, led blue toggle.rn);/LED_BLUE_TOGGLE;ADBG(5, led yellow toggle.rn);/post ToggleLedYellow();LED_YELLOW_TOGGLE;i=i+1;if(i=3) call Timer1.stop(); /通过stop函数使定时器停止/* 定时器2的事件处理函数 */event void Timer2.fired()/ADBG(5, led yellow toggle.rn);/post ToggleLedYellow();1.4 实验截图1.5 实验心得通过此次实验,加强了我对代码的思考,更加了解定时器函数的使用。实验三 串口调试1.1 实验要求通过级别控制,使得某些调试语句没有被输出到串口。1.2 实验思路默认的ADBG_LEV为3000,将语句中的DBG_LEV参数改为比默认的ADBG_LEV小即可1.3 实验关键代码/* 串口调试程序的实现模块date */* 定义调试级别,参加Makefile的ADBG_LEVEL定义,设置大于等于ADBG_LEVEL */#define DBG_LEV3000module SerialDebugMuses interface Boot;implementation/* 任务: 通过串口打印信息来调试 */task void DebugSerial()uint8_t num1 = 0x39;uint32_t num2 = 0x12345678;float float1 = 123.1234;/* ADBG,格式类似于printf,第一个参数为调试等级,可以参见tos/lib/common/antdebug.h */* 打印字符和字符串 */ADBG(DBG_LEV, rnrnDEMO of Serial Debugrn, x);ADBG(DBG_LEV, 1. This is a string, and this is char %crn, x);/* 打印8位的数字 */ADBG(DBG_LEV, 2. NUM1: HEX=0x%x, DEC=%drn, (int)(num1), (int)(num1);/* 打印32位数字 */ADBG(2000, 2. NUM2: HEX=0x%lx, DEC=%ldrn, (uint32_t)(num2), (uint32_t) (num2);/* 打印浮点数*/ADBG(DBG_LEV, 3. FLOAT: %frn, float1);/* 启动事件处理函数,在SerialDebug.nc已经关联到MainC.Boot接口系统启动后会调用此函数*/event void Boot.booted()post DebugSerial();1.4 实验截图图1 未屏蔽前图2 屏蔽后1.5 实验心得此次实验加深了我对串口的了解与使用,是一次非常好的实验材料,受益匪浅。实验四 串口通信1.1 实验要求实现一个串口实验,在串口助手中实现回显的功能。(键盘键入的任何内容回车后显示在串口助手的终端)1.2 实验思路直接在原有的UartStream.receivedByte函数基础上修改,直接输出结果1.3 实验关键代码/* 串口输入输出程序的实现模块authordate */#include /* 定义此宏,将演示UartStream.receive函数,允许一次指定数量的数据 */#define SERIALIO_RECEIVE#define DBG_LEV3000module SerialIoMuses interface Boot;uses interface StdControl as UartStdControl;uses interface UartStream;implementationuint8_t m_receive_len;uint8_t m_echo_buf;uint8_t m_send_buf100;/* 显示一个菜单提示用户 */void showMenu() strcpy(m_send_buf, rnrnDemo of Serio I/Orn1 Toggle BLUE LEDrn2 Toggle YELLOW LEDrn);/* 通过UartStream.send可以发送字节数据 */call UartStream.send(m_send_buf, strlen(m_send_buf);/* 启动事件处理函数,在SerialIo.nc已经关联到MainC.Boot接口系统启动后会调用此函数*/event void Boot.booted()LED_BLUE_ON;LED_YELLOW_ON;call UartStdControl.start();showMenu();async event void UartStream.sendDone(uint8_t *buf, uint16_t len, error_t error)/* 重新发送刚才接收的字符进行回显 */task void showMenuTask()showMenu();task void lightLED()if(m_echo_buf=1)LED_BLUE_TOGGLE; /* 切换蓝色LED灯 */ADBG(DBG_LEV, You choose to toggle BLUE LEDrn);else if (m_echo_buf = 2)LED_YELLOW_TOGGLE; /* 切换黄色LED灯 */ADBG(DBG_LEV, You choose to toggle YELLOW LEDrn);/* 如果没有调用receive接收,则每接收到一个数据就会触发此事件 */async event void UartStream.receivedByte(uint8_t byte)m_echo_buf = byte;ADBG(DBG_LEV, %cr,m_echo_buf); /将byte直接输出post lightLED(); /* 在接收完receive命令欲接收的长度后会调用此事件 */async event void UartStream.receiveDone(uint8_t *buf, uint16_t len, error_t error)1.4 实验截图1.5 实验心得通过这次实验,对串口通信的原理有了大致的了解,同时也更加深刻了我对这门课的认识,巩固了我的理论知识。实验五 FLASH读写1.1 实验要求自己定义一个结构体,并且将结构体的内容写入到0x1fff8,并且在写完后将结构体的数据读取出来和原始数据进行比较。1.2 实验思路将原有代码的读写数组改成结构体中的数组即可1.3 实验关键代码/* 定义调试级别,参加Makefile的ADBG_LEVEL定义,设置大于等于ADBG_LEVEL */#define DBG_LEV3000module TestFlashCuses interface Boot;uses interface HalFlash;implementation struct data uint8_t ieee38; uint8_t ieee48; ; struct data arr;task void initTask() uint8_t i; arr.ieee40=2; arr.ieee41=2; arr.ieee42=3; arr.ieee43=3; arr.ieee44=4; arr.ieee45=4; arr.ieee46=5; arr.ieee47=5;ADBG(DBG_LEV, read now n);call HalFlash.erase(uint8_t*)0x1fff8);for (i=0; i 8; i+=4)call HalFlash.write(uint8_t*)(0x1FFF8+i), (arr.ieee4+i), 4);call HalFlash.read(arr.ieee3, (uint8_t *)0x1FFF8, 8);ADBG(DBG_LEV, read ok.n);for (i=0; i MAX_ADDRESS_LEN)m_address_index = MAX_ADDRESS_LEN -1;for ( i=0; i = A & digital = a & digital = 0 & digital = call Packet.maxPayloadLength()return;payloadm_len+ = c;ADBG_APP( %c, c);if(m_len call Packet.maxPayloadLength()return;else/*输入地址*/if(m_address_index MAX_ADDRESS_LEN)m_address_strm_address_index+ = c;ADBG_APP( %c, c);if(m_address_index MAX_ADDRESS_LEN)return;/*按下回车键或者到达最大长度,则处理*/if(m_input_type = INPUT_DATA)post sendData();else/*地址处理完毕,准备输入数据*/m_input_type = INPUT_DATA;post showMenu();/* 实现接口UartStream 接口中的事件*/async event void UartStream.sendDone(uint8_t* buf, uint16_t len, error_t error)async event void UartStream.receiveDone(uint8_t* buf, uint16_t len, error_t error)/*射频接收数据*/event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len)uint8_t i;ADBG_APP( rn*Receive, len = %d, DATA:rn, ADBG_N(len);for(i=0; i MainC.Boot;/* 串口收发组件*/components PlatformSerialC;P2PM.UartStdControl - PlatformSerialC;P2PM.UartStream - PlatformSerialC;/*活动消息组件*/ components new PlatformMacC(123);components AtosMacC;P2PM.AtosControl - AtosMacC;P2PM.AMPacket - PlatformMacC;P2PM.Packet - PlatformMacC;P2PM.AMSend - PlatformMacC;P2PM.Receive -PlatformMacC;components new TimerMilliC() as Timer1;P2PM.Timer1 - Timer1; / 添加Timer1的定时器声明#define DBG_LEV 1000module P2PMuses interface Boot;interface AtosControl;interface StdControl as UartStdControl;interface UartStream;interface AMSend;interface Receive;interface AMPacket;interface Packet;interface Timer as Timer1; implementationenumMAX_ADDRESS_LEN = 5,INPUT_ADDRESS = 0,INPUT_DATA = 1,;message_t m_msg;uint8_t m_len = 0;char m_address_strMAX_ADDRESS_LEN = 0;uint8_t m_address_index = 0;uint8_t m_input_type = 0;/* 显示菜单*/task void showMenu()if( m_input_type = INPUT_DATA)/*等待输入欲发送的数据*/ADBG_APP( rn* To Send:rn);else/*等待输入欲发送的地址*/ADBG_APP( rn# rn* MY NodeId = 0x%x, Group=0x%x, destination ?rn,ADBG_N(call AMPacket.address(),ADBG_N(TOS_IEEE_PANID);m_input_type = INPUT_ADDRESS;m_address_index = 0;/*将从串口输入的地址字符串转化为真实地址*/uint16_t getDestAddress()uint16_t address = 0;uint8_t i = 0;if(m_address_index MAX_ADDRESS_LEN)m_address_index = MAX_ADDRESS_LEN -1;for ( i=0; i = A & digital = a & digital = 0 & digital = call Packet.maxPayloadLength()return;payloadm_len+ = c;ADBG_APP( %c, c);if(m_len call Packet.maxPayloadLength()return;else/*输入地址*/if(m_address_index MAX_ADDRESS_LEN)m_address_strm_address_index+ = c;ADBG_APP( %c, c);if(m_address_index MAX_ADDRESS_LEN)return;/*按下回车键或者到达最大长度,则处理*/if(m_input_type = INPUT_DATA)post sendData();else/*地址处理完毕,准备输入数据*/m_input_type = INPUT_DATA;post showMenu();/* 实现接口UartStream 接口中的事件*/async event void UartStream.sendDone(uint8_t* buf, uint16_t len, error_t error)async event void UartStream.receiveDone(uint8_t* buf, uint16_t len, error_t error)/*射频接收数据*/event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len)uint8_t i;call Timer1.startPeriodic(1000);ADBG_APP( rn*Receive, len = %d, DATA:rn, ADBG_N(len);for(i=0; i len; i+)ADBG_APP( %c, (uint8_t*)payload)i);ADBG_APP( rn);LED_YELLOW_TOGGLE;m_input_type = INPUT_ADDRESS;/*定时器事件处理函数*/event void Timer1.fired() /定时器结束后执行post sendData1();/给节点2发送数据call Timer1.stop();1.4 实验截图1.5 实验心得通过这次实验,对点对点的原理有了大致的了解,同时也更加深刻了我对这门课的认识,巩固了我的理论知识。对于延时发送可以通过定时器来实现也更为熟悉。实验七 射频广播1.1 实验要求写一个射频广播实验,包括基站和两个节点的程序。使得两个节点在接收到基站的三个广播信号停止接收广播数据。1.2 实验思路添加全局变量,每次广播成功变量自减一次,判断是否为0,为0时停止广播。1.3 实验关键代码#define DBG_LEV 1000module BroadcastPuses interface Boot;interface AtosControl;interface AMSend;interface Receive;interface AMPacket;interface Packet;interface Timer as SensorTimer;implementationmessage_t m_msg;int i = 3;/定义控制广播次数的参数/* 发送数据*/task void sendData()uint16_t m_len = 0x00;uint8_t* payload = call Packet.getPayload(&m_msg, NULL);uint16_t address = call AMPacket.address();*payload = 0x01;m_len = 0x01;if (address = 0x01)call AMSend.send(0xFFFF, &m_msg, m_len);LED_BLUE_TOGGLE;/*发送完处理*/event void AMSend.sendDone(message_t* msg, error_t success)/* 节点启动完毕*/event void Boot.booted()/*开启射频*/call AtosControl.start();LED_YELLOW_ON;LED_BLUE_ON;call SensorTimer.startPeriodic(1000);event void SensorTimer.fired()post sendData();/*射频接收数据*/event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len)LED_BLUE_TOGGLE;i = i - 1;if(i=0) call AtosControl.stop();/每次广播完成后自减1,减到0时停止广播1.4 实验心得通过这次实验,对射频广播的原理有了大致的了解,同时也更加深刻了我对这门课的认识,巩固了我的理论知识。实验八 传感通信1.1 实验要求每次基站发送一个采集命令,发送1,节点每隔1s采集温湿度数据,发送2,节点每隔2s采集温湿度数据,以此类推,并且将采集的数据发送到基站。1.2 实验思路对上个实验P2PM的代码文件以及本实验的CommSensor文件进行修改,基站发送数据包节点,数据中参数作为时间间隔,节点中加入一个计数器,对参数乘1000,即秒数。同时利用P2PM中的代码把本来发送的光照数据改为温湿度传感器数据。1.3 实验关键代码基站代码:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年芜湖市镜湖区荆山社区医院招聘笔试备考题库及答案详解
- 2026厦门市集美区窗内小学银发教师招募1人考试参考题库及答案详解
- 赣州市南康区智链家具产业集团有限公司2026年公开招聘子公司员工【18人】笔试模拟试题及答案详解
- 2026广西南宁市武鸣区“点对点”送工和乡村公岗专管员招聘4人笔试模拟试题及答案详解
- 四川川交建设集团有限公司2027届高校毕业生招聘笔试备考题库及答案详解
- 中国石油2027届校园招聘考试参考题库及答案详解
- 赣州市人才集团有限公司2026年第二批次人才招聘【5人】笔试参考题库及答案详解
- 2027广州地铁校园秋季招聘笔试备考试题及答案详解
- 北京第四实验学校教师招聘及实习生招募笔试备考试题及答案详解
- 2026年哈尔滨住房建设发展集团有限责任公司人员招聘笔试模拟试题及答案详解
- 第十四章35kV变电站保护整定值计算实例
- CJ/T 358-2019非开挖工程用聚乙烯管
- 危大工程巡视检查记录表 (样表)附危大工程安全监管及检查要点
- 电子电工产业概论 课件全套 陈芳芳 学习领域1-5 产业基本概况 - 职业岗位
- 2024秋新人教版数学七年级上册教学课件 6.3.2 第1课时 角的比较与运算
- GB 15930-2024建筑通风和排烟系统用防火阀门
- 生理学智慧树知到期末考试答案章节答案2024年温州医科大学
- 部编版四年级上册语文《现代诗二首》
- UPVC管粘接施工工艺
- 成人感染性心内膜炎预防诊断和治疗专家共识
- 煤气化生产技术(第四版) 完整整套 全套 模块1-8 煤气化技术认知- 煤气化生产过程的安全与环保认知
评论
0/150
提交评论