《交互式智能家居机器人》-项目3 交互式智能家居机器人运动模块设计_第1页
《交互式智能家居机器人》-项目3 交互式智能家居机器人运动模块设计_第2页
《交互式智能家居机器人》-项目3 交互式智能家居机器人运动模块设计_第3页
《交互式智能家居机器人》-项目3 交互式智能家居机器人运动模块设计_第4页
《交互式智能家居机器人》-项目3 交互式智能家居机器人运动模块设计_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

3.1项目描述本项目的主要内容包括:运用智能家居机器人控制系统编程和电机驱动模块,使机器人电机旋转方向和转速得到基本控制,然后在这个基础上编写出能够控制智能家居机器人实现前进、后退、左转弯、右转弯等基本巡航动作的控制函数。控制电机旋转是交互式智能家居机器人实现各种导航控制的重要基础,在后续的几个功能模块中都要用对伺服电机进行控制,因此本功能模块所设计出的电机控制函数将供后续几个功能模块直接调用。返回3.2教学目标通过学习与实践,学生应掌握以下知识和技能:(1)通过底层控制板(arduino)能够准确地控制相关资源的IO口。(2)掌握arduino编程语言(C++)的基本编程方法。(3)掌握直流电机的基本工作原理和控制方法。(4)能在arduino编程环境下编写控制直流电机驱动器的程序。(5)能够准确控制机器人的基本动作。返回下一页3.2教学目标(6)掌握在嵌入式控制板上通过Python编程编写一些具有图形的显示界面。(7)掌握在机器人控制器的扩展面包板上搭建基本的机器人传感器电路。(8)利用基本的传感器对当前环境进行简单的判断。(9)使用传感器对机器人的运动作智能策略。上一页返回3.3知识准备3.3.1关于直流电机输出或输入为直流电能的旋转电机称为直流电机,如图3.3.1所示。它是能实现直流电能和机械能互相转换的电机,当它作为电动机运行时是直流电动机,此时它将电能转换为机械能。3.3.2关于L298驱动器L298驱动器是用在底层控制板(arduino兼容)的一款大电流电机驱动,其控制端口为4个,减少了对底层控制板数字端口的开销,不但起到了节约控制器端口的作用,而且控制程序也更为简单。L298驱动器采用LGS公司良好的大功率电机专用驱动芯片L298P,可直接驱动2路直流电机,驱动电流最大达2A。下一页返回3.3知识准备该电路布线合理,均采用贴元件片且体积小、方便安装,输出端采用高速肖特基二极管作为保护。用户可以通过使用L298驱动器板轻松控制2路直流电机。图3.3.2

所示为L298驱动器及原理图。L298驱动器接口引脚功能的介绍如表3.3.1所示。板载LED指示灯示意如图3.3.3所示。(1)A1、A2LED:M1电机端口输出电压及正反转指示。(2)B1、B2LED:M2电机端口输出电压及正反转指示。L298P驱动板性能参数如表3.3.2所示。上一页下一页返回3.3知识准备3.3.3底层控制板的基本电机编程技巧将L298电机驱动板连接在底层控制主控板上。连接很简单,M1、M2接线柱接入两个直流电机;驱动电机用的供电电源连接到VIN、GND端口。L298驱动器与底层控制板接线如图3.3.4所示。接线方式为:INA接到底层控制板的PD4端口上;PWMA接到底层控制板的PD5端口上;PWMB接到底层控制板的PD6端口上;INB接到底层控制板的PD7端口上;VCC接到底层控制板的+5V上;GND接到底层控制板的GND端口上。上一页下一页返回3.3知识准备根据图3.3.4所示的连线方法,可以通过程序控制M1和M2两个直流电机的正转、反转、停止以及PWM调速。PWM调速通过调整占空比来模拟不同电压值,从而控制加到电机两端的电压,PWM调速如图3.3.5所示。3.3.3.1底层控制板的模拟输出函数analogWrite()函数将模拟值(PWM波)输出到管脚。它可用于在不同的光线亮度情况下调节发光二极管的亮度或以不同的速度驱动电机。调用analogWrite()后,该引脚将产生一个指定占空比的稳定方波,直到下一次调用analogWrite()(或在同一引脚时调用igitalRead()或digitalWrite()函数)为止。PWM的信号频率约为490Hz。上一页下一页返回3.3知识准备在底层控制板中,这个函数工作在引脚3、5、6、9、10和11处。在使用的时候,用户并不需要在调用analogWrite()之前为设置输入引脚而调用pinMode()函数。L298驱动电机测试程序如下:/*L298TEST*/intINA=4;//电机A正反转控制端intPWMA=5;//电机A调速端intINB=7;//电机B正反转控制端intPWMB=6;//电机B调速端voidsetup(){pinMode(INA,OUTPUT);pinMode(INB,OUTPUT);上一页下一页返回3.3知识准备}voidloop(){intvalue;for(value=0;value<=255;value+=5){digitalWrite(INA,HIGH);digitalWrite(INB,HIGH);analogWrite(PWMA,value);//PWM调速analogWrite(PWMB,value);delay(50);}}上一页下一页返回3.3知识准备下载这个程序之后,智能家居机器人的两个驱动轮会从速度为0加速到速度最大,然后循环这个过程。如果没有出现这个现象,则需要仔细检查一下程序代码和接线端口是否正确。3.3.3.2跳帽使用说明图3.3.2标注了跳帽的具体位置,这里介绍跳帽的使用说明(见表3.3.3)。3.3.3.3控制信号真值表控制信号真值如表3.3.4所示。上一页下一页返回3.3知识准备当在非PWM模式下时,对电机进行正反转控制,需对PWM控制引脚作如下处理:(1)作为模拟输出,使用analogWrite(PWMA,x)函数,x选取可驱动电机的输出数值(转速根据数值可调整)。(2)作为数字输出,使用digitalWrite(PWMA,x)函数,x选取HIGH(置高)或LOW(置低)。上一页下一页返回3.3知识准备3.3.4导航传感器选择对于家居导航来说,需要解决几个问题,首先是遇到障碍物时能够准确地避开障碍物。由于家居环境复杂,对于准确避开障碍物,单纯靠一两个传感器很难解决这个问题,一般会采用“全向无死角”避障方式,搭建全方位红外传感器或者超声波。由于超声波有死区,所以一般用红外传感器会更多一些。还有就是结合结构部分搭建全方位的触碰开关进行避障,但是这样必须确保机器人结构和障碍物有接触,从避障稳定性来说,这样可能会更好,但是从智能程度来说,非接触的要好一些,所以这里选用红外传感器进行讲解。对于一个智能家居机器人来说,有时候需要机器人在一定的范围内工作,而不超出这个范围,人们习惯性地用黑胶带或者其他颜色的彩带把这个区域圈起来,或者用一段做一个表示,不能越过这个区域,那么需要选择寻线传感器来判断边界的位置。上一页下一页返回3.3知识准备对于在家庭里工作的机器人人们还需要准确地判断机器人的位置,也就是室内定位,这是一个技术性问题。有关这方面的技术包括无线网络定位技术、RFID射频识别定位技术、视觉定位技术。无线网络定位技术就是利用zigbee、蓝牙4.0等探测连接的信号强度RSSi进行定位,典型的有苹果公司开发的iBeacon定位,其定位精度可以达到厘米级别;RFID射频识别定位技术是基于广泛的布置RFID标签进行设置的,这种定位方式的精度要靠布置的RFID标签的密度来改善,具有实现简单、稳定性能较好、成本较低等优点;视觉定位技术是基于视觉系统进行设置的,依靠事先编写好的记忆特征物体和捕获到的视觉图像作处理对比进行定位,这种定位精度不高,编程量较大,有时还需要人员的现场参与和判断,但是比较适合几个固定位置的定位。本书选择RFID射频识别定位技术进行讲解。上一页下一页返回3.3知识准备3.3.4.1红外传感器红外传感器(后称为“红外避障模块”,见图3.3.6)具有一对红外信号发射与接收的二极管,发射管发射一定频率的红外信号,接收管接收这种频率的红外信号。当红外传感器的检测方向遇到障碍物(反射面)时,红外信号反射回来被接收管接收,经过处理后,通过数字传感器接口返回到机器人主机中,机器人即可利用红外波的返回信号识别周围环境的变化。避障功能在日常生活中也是比较常见的,如风靡一时的自动清扫机器人,它有小小圆圆的外观,只需被放在地上,一会就可以将屋子打扫干净。其最基本的功能就是避障,当它检测到前方有障碍时就会绕开,这样就可以躲避家具而将地板清理干净。上一页下一页返回3.3知识准备3.3.4.2循迹传感器循迹传感器是使用光电接收管来探测它所面对的表面反射光强度的传感器,因此这种光电传感器便可应用在检测表面的颜色深度和测量一定距离的移动物体上。循迹传感器由一个红外发射管和一个红外接收管组成,当发射出去的红外光线被颜色深度较浅的表面物所接收时,会将这些红外光线反射回来,而红外接收管便可以接收到这个返回来的信号;若发射时射到颜色深度较深的表面物时,较深颜色的物体能吸收红外光而使反射回来的红外光很弱或没有反射回来,这时接收管没有接收到信号。这样便可以用这两种状态来判断被测物表面的颜色深度,用这样结构的光电传感器再外加一些阻容件便可以将光能转为电能了。上一页下一页返回3.3知识准备循迹传感器主要用于地面灰度检测、黑白线区别、简单颜色识别等。颜色越深,返回值越大;颜色越浅,返回值越小。图3.3.7所示为QTI循迹传感器。3.3.4.3RFID传感器RFID是英文“RadioFrequencyIdentification”的缩写,叫作射频识别技术,简称射频技术。RFID是一种非接触式的物体识别技术,它可以通过射频信号自动识别目标对象并获取相关数据,因此许多项目正是借用这一特性来实现对物体的识别和定位。上一页下一页返回3.3知识准备本项目使用的是能够读取EM4100无源只读系列125KHZ标签卡的RFID传感器(见图3.3.8),标签卡含有一个唯一的标识符,其为240中的某一个,或1、99、511、627、776种可能组合。RFID识别卡(RFID读卡器)读到后,通过串行接口传输。3.3.5家居巡航导航策略交互式智能服务机器人系统旨在智能家居环境下能为人类提供家居服务。面对复杂的家居环境,人们需要使用定位的地板,这里将其命名为“智慧地板”,它是由9个RFID标签整合在一起构成的具有大量RFID数据的地板结构。交互式智能服务机器人保存了环境地板的信息,不需要通过远程查询便自动获取机器人的位置信息。机器人在确定任务类型后开始执行,工作过程中机器人自动获取自身位置信息,从而根据自身位置信息进行路径规划。上一页下一页返回3.3知识准备在机器人避障方面采取全局避障测量,在机器人的每个方向上安装两个红外避障模块,在安装过程中保证每个方向上配合的两个红外传感器可以全局覆盖该方向的障碍物,这样可以保证机器人在四个方向上没有接触到障碍物,然而对一些U型区域(通常称之为“死区”),通过计算重复动作的次数来判断当前的地理环境,然后绕过死区。对于循迹传感器,其在智能家居机器人中主要用来判断某些区域是否为违禁区域,如果它在有某个方向探测到了灰度的变化,就可以向相反的方向上修正处理。上一页返回3.4任务实现3.4.1方案设计该功能模块采用L298驱动器和执行机构作为运动模块,底层控制板作为驱动模块,嵌入式控制板作为显示终端和算法实现处理核心模块,如图3.4.1所示。这个执行机构的动力装置采用直列减速电机,其编程控制方便且无须额外增加复杂的驱动电路,底层控制板控制着机器人运动的辅助模块(RFID传感器、红外避障传感器、QTI循迹传感器),从而综合对机器人的姿态和位置作智能判断。3.4.2硬件电路设计整个运动模块的电路设计为模块化设计,传感器电路为成熟模块,基本上只需要设计接口电路。L298和电机部分上一内容有详细介绍,在这里介绍一下接口电路,如图3.4.2所示。下一页返回3.4任务实现3.4.3家居机器人导航组装3.4.3.1运动驱动结构件组装1.组装电机如图3.4.3所示,先将电机固定支架用长螺丝安装在电机上,然后将轮子对准电机输出轴,调整方向后将轮子装上电机。2.将电机轮子安装在底板上如图3.4.4所示,电机支架一端有两个螺纹孔,将其对准底板上对应的安装孔后,拧入螺丝固定即可。3.安装万向轮如图3.4.5所示,万向轮安装在车体的尾部,将更多的重量集中在万向轮和驱动轮之间会让小车更加稳定。上一页下一页返回3.4任务实现4.安装电池盒如图3.4.6所示,注意用螺钉固定时,螺钉一定是头朝下,否则电池就装不下了。5.安装上下层连接尼龙柱如图3.4.7所示,建议使用长30mm的尼龙柱,方便以后加装编码器和码盘安装尼龙柱。6.完成组装如图3.4.8所示,将下层的电源线、电机线穿过上层板预留的孔洞,安装好上层板后即可完成车体的组装,实际效果如图3.4.9所示。上一页下一页返回3.4任务实现3.4.3.2红外避障模块组装红外避障传感器的安装比较简单,可以像循迹传感器一样装在下层,也可以装在上层。先将5mm长的短尼龙柱用螺丝固定在传感器上,再将尼龙柱有螺纹的一段穿过车体板上的孔后用螺母固定即可,如图3.4.10所示。3.4.3.3QTI循迹传感器组装(1)先不要将上层车体板用螺母固定,组装板卡阻时还需要将上层板取下。(2)电机驱动板上的VIN、GND接线端子需要直接通过电池供电,以提供驱动电机的电流。在完成车体组装前最好先用两根电源线将电池的正负极引出备用(见图3.4.11)。上一页下一页返回3.4任务实现传感器的安装较为简单,将其用螺母、螺丝固定到小车底板前端的孔洞上即可,再将传感器接线穿过上层板预留的孔后接到扩展板上,如图3.4.12所示。3.4.3.4RFID射频卡安装图3.4.13所示为RFID射频卡的安装,在RFID模块上面有4个安装孔,用螺丝和铜柱将RFID射频卡安装在机器人的底部,原则是RFID射频卡可以感应地面上的标签卡,且可以随时调整。上一页下一页返回3.4任务实现3.4.4智能家居机器人导航程序设计本小节主要讲解智能家居机器人如何通过避障传感器进行导航,基本思路为在机器人上面安装3个红外避障模块,即正前方、左侧方、右侧方,如果前方有障碍物(即正前方有障碍物),那么机器人后退一段距离,然后往一侧运行;如果左侧方有障碍物,左侧传感器会感应到,机器人后退一段距离,往右侧运行;如果右侧有障碍物,则右侧传感器可以感应到,机器人也会后退一段距离,往左侧运行。其具体流程如图3.4.14所示。上一页下一页返回3.4任务实现智能家居机器人导航程序范例如下:intSNUM[3];intINA=4;//电机A正反转控制端intPWMA=5;//电机A调速端intINB=7;//电机B正反转控制端intPWMB=6;//电机B调速端voidmotospd(intsp1,intsp2)//电机速度控制函数,括号内分别为左右电机速度值,{//范围-255~+255,正值为正转,负值为反转。if(sp1>0)上一页下一页返回3.4任务实现digitalWrite(INA,HIGH);elsedigitalWrite(INA,LOW);if(sp2>0)digitalWrite(INB,HIGH);elsedigitalWrite(INB,LOW);analogWrite(PWMA,abs(sp1));analogWrite(PWMB,abs(sp2));}上一页下一页返回3.4任务实现voidsetup(){pinMode(8,INPUT);//配置左传感器IO口为输入pinMode(14,INPUT);//配置中传感器IO口为输入pinMode(15,INPUT);//配置右传感器IO口为输入pinMode(INA,OUTPUT);pinMode(INB,OUTPUT);//配置电机驱动IO口为输出}voidloop(){SNUM[0]=digitalRead(8);//左传感器赋值SNUM[1]=digitalRead(14);//中传感器赋值SNUM[2]=digitalRead(15);//右传感器赋值上一页下一页返回3.4任务实现if((SNUM[0]==1)&&(SNUM[1]==1)&&(SNUM[2]==1))//所有传感器都没有检测到障碍物motospd(100,100);//直行if((SNUM[0]==0)&&(SNUM[1]==1)&&(SNUM[2]==1))//左传感器检测到障碍物{motospd(-100,-100);//后退delay(50);motospd(100,50);//右转}上一页下一页返回3.4任务实现if((SNUM[0]==1)&&(SNUM[1]==1)&&(SNUM[2]==0))//右传感器检测到障碍物{motospd(-100,-100);//后退delay(50);motospd(50,100);//左转}if((SNUM[0]==0)&&(SNUM[1]==0)&&(SNUM[2]==0))//中传感器检测到障碍物{上一页下一页返回3.4任务实现motospd(-100,-100);//后退delay(50);motospd(50,100);//左转}delay(50);}上一页下一页返回3.4任务实现3.4.5智能家居机器人导航避开“死角”的算法设计当机器人进入墙角时,可能会碰到这种情况:首先左边有障碍物,于是它倒退、右转,再向前行走,这时右边也有障碍物,于是再后退、左转、前进,左边又有障碍物,再次右边有障碍物……此时,机器人就会一直困在墙角里出不来。技巧是记下障碍物交替的总次数,还有必须记下每个传感器前一次的状态,并和当前的状态对比。如果状态相反,就在交替总数上加“1”。如果这个交替总数超过了程序预先给定的阀值,那么就该做一个“U”形转弯,并且把计数器复位。上一页下一页返回3.4任务实现机器人导航避开死角范例程序如下。这个程序使机器人在第四次或第五次交替探测到“死区”后,完成一个“U”形的拐弯,其次数取决于哪一个传感器先感应到障碍物。bytewLeftOld;//PreviousloopwhiskervaluesbytewRightOld;bytecounter;//ForcountingalternatecornersintSNUM[3];intINA=4;//电机A正反转控制端intPWMA=5;//电机A调速端intINB=7;//电机B正反转控制端intPWMB=6;//电机B调速端上一页下一页返回3.4任务实现voidmotospd(intsp1,intsp2)//电机速度控制函数,括号内分别为左右电机速度值,{//范围-255~+255,正值为正转,负值为反转。if(sp1>0)digitalWrite(INA,HIGH);elsedigitalWrite(INA,LOW);if(sp2>0)digitalWrite(INB,HIGH);elsedigitalWrite(INB,LOW);analogWrite(PWMA,abs(sp1));上一页下一页返回3.4任务实现analogWrite(PWMB,abs(sp2));}voidsetup()//Built-ininitializationblock{pinMode(8,INPUT);//配置左传感器IO口为输入pinMode(14,INPUT);//配置中传感器IO口为输入pinMode(15,INPUT);//配置右传感器IO口为输入pinMode(INA,OUTPUT);pinMode(INB,OUTPUT);//配置电机驱动IO口为输出tone(4,3000,1000);//Playtonefor1seconddelay(1000);//Delaytofinishtone上一页下一页返回3.4任务实现wLeftOld=0;//Init.previouswhiskerstateswRightOld=1;counter=0;//Initializecounterto0}voidloop()//Mainloopauto-repeats{//CornerEscapebytewLeft=digitalRead(15);//CopyrightresulttowLeftbytewRight=digitalRead(8);//CopyleftresulttowRightif(wLeft!=wRight)//Onewhiskerpressed?{//Alternatefromlasttime?上一页下一页返回3.4任务实现if((wLeft!=wLeftOld)&&(wRight!=wRightOld)){counter++;//IncreasecountbyonewLeftOld=wLeft;//RecordcurrentfornextrepwRightOld=wRight;if(counter==4)//Stuckinacorner?{wLeft=0;//SetupforU-turnwRight=0;counter=0;//Clearalternatecornercount}上一页下一页返回3.4任务实现}else//Notalternatefromlasttime{counter=0;//Clearalternatecornercount}}//WhiskerNavigationif((wLeft==0)&&(wRight==0))//Ifbothwhiskerscontact{motospd(-100,-100);//后退delay(50);motospd(50,100);//左转上一页下一页返回3.4任务实现}elseif(wLeft==0)//Ifonlyleftwhiskercontact{motospd(-100,-100);//后退delay(50);motospd(100,50);//右转}elseif(wRight==0)//Ifonlyrightwhiskercontact{motospd(-100,-100);//后退delay(50);上一页下一页返回3.4任务实现motospd(50,100);//左转}else//Otherwise,nowhiskercontact{motospd(100,100);//直行}delay(20);}上一页下一页返回3.4任务实现3.4.6调试程序机器人循迹调试主要分为三个步骤,首先是检测传感器是否感应灵敏,可以利用底层控制板的串口显示程序打印传感器的状态:在setup()函数中加入:Serial.begin(9600);//打开串口,初始化然后利用loop函数检测传感器的状态,下面加入打印显示数据://CornerEscapebytewLeft=digitalRead(15);//CopyrightresulttowLeftbytewRight=digitalRead(8);//CopyleftresulttowRightSerial.print(wLeft);//显示左边避障传感器状态上一页下一页返回3.4任务实现Serial.print(‘\r’);//增加制表符,就是空格四个字符长度Serial.print(wRight);//显示右边避障传感器状态Serial.print(‘\n’);//回车换行最后,把程序下载到底层控制板中进行测试,用手挡着左边的避障传感器,看是否左边在串口栏显示为“0”,然后再试一下右边传感器,接着可以试一下中间的传感器。还需要测试一下感应的灵敏度,如果灵敏度过低,可以调节避障传感器上的可调电阻,从而提高其灵敏度。测试好之后,可以注释刚才增加的代码。上一页下一页返回3.4任务实现3.4.7利用嵌入式系统监测运行状态可以使用嵌入式控制板来显示红外避障模块的当前状态,因为嵌入式控制板上搭建了一个7寸的HDMI显示屏,可以把它当成平常Windows系统的计算机使用。通常在计算机上面用串口调试助手来显示相关信息。底层控制板范例如下:#include<Wire.h>#defineSLAVE_ADDRESS0x04intnumber=0;intstate=0;intSNUM[3];上一页下一页返回3.4任务实现intINA=4;//电机A正反转控制端intPWMA=5;//电机A调速端intINB=7;//电机B正反转控制端intPWMB=6;//电机B调速端voidmotospd(intsp1,intsp2)//电机速度控制函数,括号内分别为左右电机速度值,{//范围-255~+255,正值为正转,负值为反转。if(sp1>0)digitalWrite(INA,HIGH);elsedigitalWrite(INA,LOW);上一页下一页返回3.4任务实现if(sp2>0)digitalWrite(INB,HIGH);elsedigitalWrite(INB,LOW);analogWrite(PWMA,abs(sp1));analogWrite(PWMB,abs(sp2));}voidsetup(){pinMode(8,INPUT);//配置左传感器IO口为输入pinMode(14,INPUT);//配置中传感器IO口为输入pinMode(15,INPUT);//配置右传感器IO口为输入pinMode(INA,OUTPUT);上一页下一页返回3.4任务实现pinMode(INB,OUTPUT);//配置电机驱动IO口为输出Serial.begin(9600);//startserialforoutput//initializei2casslaveWire.begin(SLAVE_ADDRESS);//definecallbacksfori2ccommunicationWire.onReceive(receiveData);Wire.onRequest(sendData);Serial.println("Ready!");}voidloop(){SNUM[0]=digitalRead(8);//左传感器赋值SNUM[1]=digitalRead(14);//中传感器赋值上一页下一页返回3.4任务实现SNUM[2]=digitalRead(15);//右传感器赋值if((SNUM[0]==1)&&(SNUM[1]==1)&&(SNUM[2]==1))//所有传感器都没有检测到障碍物motospd(100,100);//直行if((SNUM[0]==0)&&(SNUM[1]==1)&&(SNUM[2]==1))//左传感器检测到障碍物{motospd(-100,-100);//后退delay(50);motospd(100,50);//右转上一页下一页返回3.4任务实现}if((SNUM[0]==1)&&(SNUM[1]==1)&&(SNUM[2]==0))//右传感器检测到障碍物{motospd(-100,-100);//后退delay(50);motospd(50,100);//左转}if((SNUM[0]==0)&&(SNUM[1]==0)&&(SNUM[2]==0))//中传感器检测到障碍物{上一页下一页返回3.4任务实现motospd(-100,-100);//后退delay(50);motospd(50,100);//左转}delay(50);}//callbackforreceiveddatavoidreceiveData(intbyteCount){}//callbackforsendingdatavoidsendData(){上一页下一页返回3.4任务实现inti;for(i=0;i<3;i++){Wire.write(SNUM[i]);}}嵌入式控制板范例程序如下:importsmbusimporttime#forRPIversion1,use"bus=smbus.SMBus(0)"bus=smbus.SMBus(1)上一页下一页返回3.4任务实现#ThisistheaddresswesetupintheArduinoProgramaddress=0x04defwriteNumber(value):bus.write_byte(address,value)#bus.write_byte_data(address,0,value)retu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论