版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ArduinoLWZ一、Arduino编程语 2、常量 while语句和do…while语 运算 函 数字I/O函 模拟I/O函 6、库文件 二、Sabertooth电机驱动模块应用实 1、工作模 Mode1:og Mode2:R/C Mode4:Packetized 2、应用实 PC软件的编程思 、程序串 2同时控制小 三、TN901_TEST非接触测温模块应用实 1、TN901工作原 2、应用实 (2)温度函 3、多个TN模块的应用实 四、气体传感器模块应用实 1、应用实 五、火焰传感器模块应用实 1、应用实 PC软件的编程思 七、舵机模块应用实 2、应用实 八、综合实 1、驱动2台舵机和电机的应用实 2、测3个测温度、驱动电机的应用实 3、测3个测温度、驱动2台舵机和电机的应用实 4、测2个气体、2个火焰、3个测温度、驱动2台舵机和电机的应用实 5、寻线、测2个气体、2个火焰、3个测温度、驱动2台舵机和电机的应用实 一、ArduinoArduino语言是建立在C/C++unsigned 或 :表示引脚的电平,HIGH=1表示高电平,LOW=0表示低电平INPUTOUTPUT:INPUT表示引脚输入电平,OUTPUT 或false :true表示真、对、1,false表示假、错、0。注意:C语言区别大小写字母。格式:if(条件为真 }if(a==2)b=4;if(a==2)注意:C语言用一个分号; 例:if(a==1){ //当变量a的值与1相等时,执行b=2,c=3 }if(a==2)b=2; //当变量a的值与2相等时,执行b=2 //当变量a的值与2不相等时,执行格式:for(初始值;循环条件;步进语句){ for(i=1,b=0;i<=8;i++b++;初始化8b1i1循环内容:{b++;}9i=9i<=8b++for(i=1,b=0;i<=5;i++)b++;初始化6i=6i<=5b++退出循环后,再执行一次b++,因此最终b=6break continue语句:退出本次循环,还会继续后面的循环if(i=2) //i=2}if(i=2) //i=2}switchcase格式:switch(变量casecase2:}例:switch(a){ //当变量a有多种情况时使用switchcase1: //当a=1时,执行以下代码 //switch语case //a=2时,执行以下 //switch语}格式:while(条件为真){ do }while(条件为真 } }while(i<1) 循环1次,结果i=1,b=1。=%自增 累积除+--与*<或-/>!非}例:void函数类型:void表示函数没有返回值,intdigitalRead(pin):void void 例 //设置数字0号引脚为输入模式 //1例 //设置数字0号引脚为高电平 intdigitalRead(pin):数字引脚的电平,函数结果为电平值,pin表示引脚号。例:a=digitalRead(0); //数字0号引脚电平,赋给变量a;b= intogRead(pin):模拟引脚的ADC值,函数结果为ADC值,pin表示引脚号。例:a=ogRead(0); //模拟0号引脚的ADC值,赋给变量a;b= ogRead(1); :延时函数,单位是ms。2)delayMicroseconds(us):延时函数,单位是us。min(x,y):求最小值。2)max(x,y):求最大值。3) 之间和fromHightoHigh之间。6)pow(base,exponent):开方函数,baseexponent次方。7)sq(x):平方。int()sin(rad):正弦运算,rad单位是弧度。2)cos(rad):余弦运算,rad单位是弧度。3)tan(rad):正切运算,rad单位是弧度。2)longrandom(max):随机数函数,返回数据大于等于0,小于max。attachInterrupt(interrupt,mode)IO23,interrupt表示中断口01,表示一个功能函数,mode:LOW低电平中断,CHANGE有变化就中断,RISING上升沿中断,FALLING下降沿中断。detachInterrupt(interrupt):中断开关,interrupt=1开,interrupt=0 noInterrupts():中断Serialn.begin(speed):设置串口的波特率,speed9600,115200intSerialn.available():判断串口的缓冲器是否收到数据。3)intSerialn.read() :串口收到的数据。4) :清空缓冲器。6)Serialn.println(data):串口输出数注意:Serialn写成Serial表示程序的串口,Serialn的n取值为电子积木的串口序号。 //设置程序的串口的波特率为9600 //设置COM1串口的波特率为9600 //设置COM2串口的波特率为:库名 说 EEPROM读写程 LCD IO TWI/I2C LED LED二、Sabertooth2.1Sabertooth og转。拨码开关5处于DOWN则对模拟电压的响应是指数形式,处于UP则为线性形式。一般拨码开关5处于UP,电机转速比较容易控制。拨码开关6处于UP则模拟电压值输入范围为0-5V2.5V2.5V是正转,并且电压越大转速越快;小于2.5V6DOWN1.875V-3.125V。对于5V的单片机,拨码开关6建议处于UP。对于3.3V的单片机,拨码开关6只能处于DOWN。2.2Mode1单片机输出经过RC滤波器变成一个模拟电压值传给Sabertooth。建议频率高于1000HZ。输出连接到Sabertooth的S1接口则控制Motor1,连接到S2接口则控制2.3SabertoothMode2:R/CMode3:Simplified12UPDOWNMode345设置串2.4Mode36UP则单机模式,只2.4Mode38位数据位、无校验、1位停止位。SabertoothMode3是单字节串口通信模式,S1接口是串口接收端,S2接口是模块片选端。单字节Motor2,128是全速反转,192是停止,255是全速正转;0Motor1和Motor2都停止。2.5SabertoothMode4:Packetized12DOWNMode44、56设置多机通信中从机的地址,具体看图2.6Mode4的拨码开关设置。2.6Mode49600波特率、8位数据位、无校验、1位停止位。Sabertooth的串口是TTL电平,对于连接到电脑需要外接RS-232。命令,参数,校验。第二字节是地址,就是拨码开关的对应的Address值。15表示波特率设置:参数=1,波特率为参数=2,波特率为9600;参数=3,波特率为19200;2.6SabertoothCOMPC软件传过来的的控制小车运动命令。Sabertooth模块连接到电子积木的COM1接口,处于工作模式Mode4:Packetizedserial,地址为130。Motor1连接小车前进方向左侧的两台电机,Motor2Motor1Motor22.7Sabertooth{//控制电机1Serial1.print(130,BYTE);地址=130 //命令=0,Motor1 //效验=(130+0+0)&0x7F=130&0x7F=2delay(5);//延时5ms//控制电机2Serial1.print(130,BYTE);地址=130 //命令=4,Motor2 //效验=(130+4+0)&0x7F=134&0x7F=6}{char //控制电机1Serial1.print(130,BYTE);地址=130 //命令=0,Motor1 i=i&0x7F; //控制电机2Serial1.print(130,BYTE);地址=130 //命令=4,Motor2 i=i&0x7F; }{char //控制电机1Serial1.print(130,BYTE);地址=130 //命令=1,Motor1 i=i&0x7F; //控制电机2Serial1.print(130,BYTE);地址=130 //命令=5,Motor2 i=i&0x7F; },Motor2{char //控制电机1Serial1.print(130,BYTE);地址=130 //命令=0,Motor1正转 //参数=s,速度=s i=i&0x7F; //控制电机2Serial1.print(130,BYTE);地址=130 //命令=5,Motor2 i=i&0x7F; },Motor2voidturn_Lcharsvoidturn_L,参数chars{char //控制电机1Serial1.print(130,BYTE);地址=130 //命令=1,Motor1 i=i& delay(5);//延时5ms//控制电机2Serial1.print(130,BYTE);地址=130 //命令=4,Motor2 i=i&0x7F; }的调用。因此,上面定义了六个控制小车运动的函数(停止motor_stop、前进advance、后退back_off、右转turn_R、左转turn_L。下面再讲如何调用这些函数实现控制小车的运动。Sabertooth模块。电子积木的初始化内容只能放在函数setup()。由于用到串口COM连接PC、串口COM1连接Sabertooth模块,所以需要对它void{ //连接Sabertooth模块的串口COM1的波特率为9600 //程序的串口COM的波特率为9600 //延时1000msSerial1.print(170,BYTE);//Sabertooth模块的初始化,其第一个字节必须是170 }【2】串口的确有接收到数据时,再使用Serial.read(),并保存于变量val中,第1个字节是控制小车运动令。Serial.availableSerial.read()读取数据,并更新速度值(变量speed。①②③④void{charspeed; intval; //速度默认值为 if(Serial.available())//①Serial.available()表示判断串口COM是否接收到 //ifval=Serial.read();//②串行COM的数据,控制小车运动 //命令有多种情况,因而使用switch switchcase'W': advance(speed); //前进,速度为speed case'S': back_off(speed); //后退,速度为speed //控制后退的时间200ms case'A': //左转,速度为speed case'D': //右转,速度为speed case'L': case while(Serial.available()==0){}//③while循环,强制要求接收第二个数据,此数据为speed= switch //if }控制小车运动的键盘按键:前进T、后退G、左转F、右转H、停止K、速度+、速度-这必须与电子积木程序的switch语句各种情况一一对应。键盘按下T,则向串口发送字符W,电子积木在switch判断出第一种情况,令小车前进一下。GSswitch判断出第二种情况,令小车后退一下。键FAswitch判断出第三种情况,令小车左转一下。键盘按下H,则向串口发送字符D,电子积木在switch判断出第四种情况,令小车右转一下。键盘按下K,则向串口发送字符L,电子积木在switch判断出第五种情况,令小车停止。+(speed增加)-(speed减小)Mspeed,电子积木在switch判断出第六种情况,设置小车速度。延时200ms的函数,最后执行停止函数。advance(speed); //前进,速度为speed 将loop函数中黄色底纹的语句或删除。的方法很简单,在语句最前加“//”。voidloop(){charspeed; intval; //速度默认值为 if(Serial.available())//①Serial.available()表示判断串口COM是否接收到 //ifval=Serial.read();//②串行COM的数据,控制小车运动 //命令有多种情况,因而使用switch switchcase'W': advance(speed); //前进,速度为speed case'S': back_off(speed); //后退,速度为speed case'A': //左转,速度为speed case'D': //右转,速度为speed case'L': case while(Serial.available()==0){}//③while循环,强制要求接收第二个数据,此数据为speed=Serial.read(); switch //if }无线数传模块的通信协议:9600,N,8,1。PC程序通过无线数传模块控制小车。可参看实例Arduino2_3.pde。Arduino2_1.pde基础上,添加无线数传模块,并连接到电子积木的串口COM2。注意选用足够大功率的供电电源。因此,只需将实例Arduino2_1.pdeSerialSerial25处。void{ //连接Sabertooth模块的串口COM1的波特率为9600 //连接无线数传模块的串口COM2的波特率为9600 Serial1.print(170,BYTE);//Sabertooth模块的初始化,其第一个字节必须是170 }void{charspeed; intval; ))// //ifval=Serial2.read();//②串行COM的数据,控制小车运动 switchcase'W': advance(speed); //前进,速度为speed case'S': back_off(speed); //后退,速度为speed //控制后退的时间200ms case'A': //左转,速度为speed case'D': //右转,速度为speed case'L': case while(Serial2.available()==0){}//③while循环,强制要求接收第二个数据,此数据为speed=Serial2.read(); switch //if }实例Arduino2_1.pde是使用程序的串口COM通信控制小车的运动;实例Arduino2_3.pdeCOM2通信控制小车的运动。现在只需合并两个由于COM和COM2的作用在本实例中是一样的。它们是关系,因此,一个一个地执行——这里先执行COM程序的if(Serial.available()){},再执行COM2程序if(Serial2.available()){}。由于它们作用一样,所以这两个大括号里面的内容是一样的,只是Serial与Serial2有区别。可参看实例Arduino2_4.pde。程序的流程图如下:COMCOM2void{ //程序的串口COM的波特率为9600 //连接Sabertooth模块的串口COM1的波特率为9600 //连接无线数传模块的串口COM2的波特率为9600 Serial1.print(170,BYTE);//Sabertooth模块的初始化,其第一个字节必须是170 }void{charspeed; intval; if(Serial.available())//①Serial.available()表示判断串口COM是否接收到 //ifval=Serial.read();//②串行COM的数据,控制小车运动 switchcase'W': advance(speed); //前进,速度为speed case'S': back_off(speed); //后退,速度为speed //控制后退的时间200ms case'A': //左转,速度为speed case'D': //右转,速度为speed case'L': case speed=Serial.read(); switch //if))// //ifval=Serial2.read();//②串行COM的数据,控制小车运动 switchcase'W': advance(speed); //前进,速度为speed case'S': back_off(speed); //后退,速度为speed //控制后退的时间200ms case'A': //左转,速度为speed case'D': //右转,速度为speed case'L': case while(Serial2.available()==0){}//③while循环,强制要求接收第二个数据,此数据为speed=Serial2.read(); switch //if }三、TN901_TEST3.1TN引脚:D是数据引脚,C是时钟引脚(TN输出时钟A是模块片选引脚(低电平为选中,高电平为不选中第1字节Item:Item=0x4C,表示物体温度;Item=0x66,表示Ambiamt第2字节MSB:温度字节;4Sum:Sum=(Item+MSB+LSB)&0xFF;第5字节CR:CR=0x0D1:物体温度Item=0x4C,MSB=0x14,LSB=0x2A,Sum=(0x4C+0x14+0x2A)&0xFF=0x8A&0xFF=0x8A,温度值=0x142A/16-273.15=49.475例2:Ambiamt温度Item=0x66,MSB=0x12,LSB=0xC3Sum=(0x66+0x12+0xC3)&0xFF=0x13B&0xFF=0x3B,CR=0x0D。温度值=0x12C3/16-273.15=27.03#defineClockPin16//TN_C引脚#defineDataPin17//TN_D引脚#defineTestPin18//TN_A引脚首先TN_A=0,模块处于被选状态。此时,TN_C引脚才输出,TN_D引脚才输出值。电子积木需要读出这两根引脚的电平来温度值。以下是根据图3.2TN模块SPI时序编非选中状态,TN_C停止输出时钟。voiddata_read(int*p)//void表示函数无结果,函数名称data_read,int*p保存的5个字{intdigitalWrite(TestPin1,LOW); { //每个字节占8位,即8个时{PinState= //延时100usPinState=digitalRead(DataPin1); if(1== tempData(tempData<<1&0xfe)+1;当TN_D=高电平,左移1位并+1tempData=(tempData<<1&0xfe); PinState= }while(PinState!= //如果TN_C=低电平,继}*p } //TN_A=1,不选中模块,模块停止输出时}void{ //TN_A引脚输入状态digitalWrite(TestPin1,HIGH); //TN_A=1,非选中TN模块 }void{intdata_buf[5 //保存读出TN模块的5inttempData //while的循环条件为1,即都循环{}里的内 //while循环 tempData=data_buf[1]<<8+data_buf[2]; //tempData=MSB<<8+LSB=MSB*256+LSBfloatrealTemp=(float)tempData/16-273.15;//转换成温度值,单位是摄氏度 通过串口 //while循环}TNC、DA678TNC、DA9、10116789void{ //TN1号模 digitalWrite(TestPin1,HIGH); //TN2号模 digitalWrite(TestPin2,HIGH); //TN3号模 digitalWrite(TestPin3,HIGH); }Arduino3_1.pdeTN模块,可以为每个模块写一个独kiinti可参看实例Arduino3_2.pde。//int*p保存的5个字节,ClockPin是TN_C,DataPin是TN_D,TestPin是voiddata_read(int*p,intClockPin,intDataPin,int{intdigitalWrite(TestPin,LOW); { //每个字节占8位,即8个时{PinState= PinState=digitalRead(DataPin); if(1== tempData(tempData<<1&0xfe)+1;当TN_D=高电平,左移1位并+1tempData=(tempData<<1&0xfe); PinState= }while(PinState!= //如果TN_C=低电平,继}*p } //TN_A=1,不选中模块,模块停止输出时}void{intdata_buf[5 //保存读出TN模块的5inttempData=0; floatrealTemp; //while的循环条件为1,即都循环{}里的内 //while循环//TN1号模data_read(data_buf,ClockPin1,DataPin1,TestPin1);//温度值,并保存于数组data_buf中tempData=data_buf[1]<<8+data_buf[2]; //tempData=MSB<<8+LSB=MSB*256+LSBrealTemp=(float)tempData/16-273.15; //TN2号模data_read(data_buf,ClockPin2,DataPin2,TestPin2);//温度值,并保存于数组data_buf中tempData=data_buf[1]<<8+data_buf[2]; //tempData=MSB<<8+LSB=MSB*256+LSBrealTemp=(float)tempData/16-273.15; //TN3号模data_read(data_buf,ClockPin3,DataPin3,TestPin3);//温度值,并保存于数组data_buf中tempData=data_buf[1]<<8+data_buf[2]; //tempData=MSB<<8+LSB=MSB*256+LSBrealTemp=(float)tempData/16-273.15; //while循环}与实例Arduino3_2.pde相比,此实例中每个TN模块拥有一个独立温度的函数。可参看实例Arduino3_3.pde。//TN1模voiddata_read1(int*p)//void表示函数无结果,函数名称data_read1,int*p保存的5个字{intdigitalWrite(TestPin1,LOW); { //每个字节占8位,即8个时{PinState= //延时100usPinState=digitalRead(DataPin1); if(1== tempData(tempData<<1&0xfe)+1;当TN_D=高电平,左移1位并+1tempData=(tempData<<1&0xfe); PinState= }while(PinState!= //如果TN_C=低电平,继}*p } //TN_A=1,不选中模块,模块停止输出时}//TN2号模voiddata_read2(int*p)//void表示函数无结果,函数名称data_read1,int*p保存的5个字{intdigitalWrite(TestPin2,LOW); { //每个字节占8位,即8个时{PinState= //延时100usPinState=digitalRead(DataPin2); if(1== tempData(tempData<<1&0xfe)+1;当TN_D=高电平,左移1位并+1tempData=(tempData<<1&0xfe); PinState= }while(PinState!= //如果TN_C=低电平,继}*p } //TN_A=1,不选中模块,模块停止输出时}//TN3号模voiddata_read3(int*p)//void表示函数无结果,函数名称data_read1,int*p保存的5个字{intdigitalWrite(TestPin3,LOW); { //每个字节占8位,即8个时{PinState= //延时100usPinState=digitalRead(DataPin3); if(1== tempData(tempData<<1&0xfe)+1;当TN_D=高电平,左移1位并tempData=(tempData<<1&0xfe); PinState= }while(PinState!= //如果TN_C=低电平,继}*p } //TN_A=1,不选中模块,模块停止输出时}void{intdata_buf[5 //保存读出TN模块的5inttempData=0; floatrealTemp; //while的循环条件为1,即都循环{}里的内 //while循环//TN1号模 tempData=data_buf[1]<<8+data_buf[2]; //tempData=MSB<<8+LSB=MSB*256+LSBrealTemp=(float)tempData/16-273.15; //TN2号模 tempData=data_buf[1]<<8+data_buf[2]; //tempData=MSB<<8+LSB=MSB*256+LSBrealTemp=(float)tempData/16-273.15; //TN3号模 tempData=data_buf[1]<<8+data_buf[2]; //tempData=MSB<<8+LSB=MSB*256+LSBrealTemp=(float)tempData/16-273.15; //while循环}void{ 串 的波特率为}void{intval;{ 以十进制形式发送模拟值,并发送回车换 //延时}}void{ 串 的波特率为}void{intval;{ 以十进制DEC形式发送模拟值,并发送回车换 以十进制DEC形式发送模拟值,并发送回车换 //延时}}5.1void{ //串口COM的波特率为pinMode(1 //数字引脚1输}void{intval;{ //火焰传感器输出模拟 //通过串口COM发送回PC if(val<600)digitalWrite(1,HIGH);//如果模拟值<600,则数字引脚1输出高电平elsedigitalWrite(1,LOW); //否则数字引脚1输出低电平 //}}void{ //串口COM的波特率为}void{intval;{ //1号火焰传感器输出模拟 //通过串口COM发送回 //以十进制形式发送模拟值,并发送回车换 //2号火焰传感器输出模拟信 //通过串口COM发送回 //以十进制形式发送模拟值,并发送回车换 //}}六、DF-miniLTV3DF-miniLTV3寻线模块工作电源+5V,是根据红外线对反射原理(深色反射弱,浅色反射强)1cm1电机。寻线传感器连接到电子积木的数字引脚3、4和5。可参看实例Arduino6_1.pde。intIRR=3;//定义右侧寻线传感器接口intIRM=4;//定义中间寻线传感器接口intIRL=5;//定义左侧寻线传感器接口void{ //连接Sabertooth模块的串口COM1的波特率为9600 //延时1000msSerial1.print(170,BYTE);//Sabertooth模块的初始化,其第一个字节必须是170 pinMode(IRR,INPUT);//设置右侧寻线传感器接口输入pinMode(IRM,INPUT);//设置中间寻线传感器接口输入pinMode(IRL,INPUT);//设置左侧寻线传感器接口输入}void{intchar { //右侧寻线传感器接口电平 if(l==HIGH&&m==LOW&&r==HIGH) advance elseif(l==LOW&&m==HIGH&&r==HIGH) //左转,速度为speedelseif(l==HIGH&&m==HIGH&&r==LOW) //右转,速度为speed }}【4】 ,三个寻线模块安装太近,能同时对着黑线【5】l=m=LOW,r=HIGH,左中寻线模块安装太近,能同时对着黑【6】l=r=LOW,m=HIGH,左右寻线模块安装太近,能同时对着黑【7】m=r=LOW,l=HIGH,右中寻线模块安装太近,能同时对着黑 Arduino6_1.pde的(1(2)一样。void{ //程序的串口COM的波特率为9600 //连接Sabertooth模块的串口COM1的波特率为9600 //延时1000msSerial1.print(170,BYTE);//Sabertooth模块的初始化,其第一个字节必须是170 pinMode(IRR,INPUT);设置右侧寻线传感器接口输入pinMode(IRM,INPUT);//设置中间寻线传感器接口输入pinMode(IRL,INPUT);//设置左侧寻线传感器接口输入}void{intval;char //isIR=1启动寻线,isIR=0charspeed;//小车的运动速度speed=64;//速度默认值为64{ if(l==HIGH&&m==LOW&&r==HIGH) advance elseif(l==LOW&&m==HIGH&& //符合情况【3 elseif(l==HIGH&&m==HIGH&& if(Serial.available())//Serial.available()COM //if //串行COM的数据,控制小车运动 //switch switchcase val= if(val=='1') //如果第二个数据为1 switch //if //while}ZP1(=0x31,电子积木在switch判断出第七种情况,0(=0x30位置是靠控制(脉冲宽度调制)信号的占空比来实现的。标准信号的周期固定20ms0.5~2.5ms的正脉冲宽度和舵机的转角-90度~+90度相对应。舵机转动时电要接到外部供电。USB供电已经不足够了。舵机根据控制信号脚上不同占空比的,会旋转到固定角度。如果这个的占空比存在微小变化,舵机在固定角度左右微小抖动;如果这个存在较大变化(周期不固定或者占空比不固定7.1Arduino提供了一个很好的舵机调用函数库,可以让Arduino任意IO口控制舵机。可参看实例Arduino7_1.pde。最后用sevon.write(w)控制转动角度w。#include<Servo.h>//舵机库头文件Servoservo1; //1号舵机Servo Servo void{ servo2.attach(16);//2号舵机使用16号引servo3.attach(17);//3号舵机使用17号引}void{staticintcharch=Serial.read();//COM的数据case //ASCII码转成数字,再case //数据后带a1 case //数据后带b2 case //数据后带c3 }例如:电子积木收到串口数据:85a18590b2900~180-90~+90非库形式产生周期为20ms的,主要放在loop函数,利用循环改变引脚电平来实现的。可参看实例Arduino7_2.pde。如果loop函数还有其它地方消耗时间,这非常影响到的周期和占空比,特别是这种消耗时间还是不固定的。这样对舵机产生影响了。1:loop(){servopulse(sp1,sa1,sp2,sa2);}servopulse20ms的方波。特别注意,串口命令会消耗一些时间,令程序产生周期大于20ms的。因此,1、2、3、4号舵机分别连接到电子积木的数字引脚、、、。注意选用足够大功servopin1=15;//定义舵机接口数字servopin2=16;//定义舵机接口数字servopin3=17;//定义舵机接口数字servopin4=18;//定义舵机接口数字sp1、sa11号舵机的数字引脚、角度级别。sp2、sa22号舵机的数字引脚、角度级别。sp3、sa33号舵机的数字引脚、角度级别。sp4、sa44号舵机的数字引脚、角度级别。这里将角度180度划分为10级,级别分别为0-9。首先,引脚spn输出高电平delayMicroseconds(220)spndigitalWrite(spn,LOW)。驱动2台舵机的函数:voidservopulse(intsp1,intsa1,intsp2,intsa2)//定义一个脉冲函{char //1号舵机接口电平至 //2号舵机接口电平至 // //1.98ms的脉 if(j==sa1)digitalWrite(sp1,LOW);//1号舵机接口电平至if(j==sa2)digitalWrite(sp2,LOW);//2号舵机接口电平至} // //}voidservopulse(intsp1,intsa1,intsp2,intsa2,intsp3,int{char //1号舵机接口电平至 //2号舵机接口电平至 //3号舵机接口电平至 // //1.98ms的脉 if(j==sa1)digitalWrite(sp1,LOW);//1号舵机接口电平至if(j==sa2)digitalWrite(sp2,LOW);//2号舵机接口电平至if(j==sa3)if(j==sa3)digitalWrite(sp3,LOW);//3号舵机接口电平至} // //}voidservopulse(intsp1,intsa1,intsp2,intsa2,intsp3,intsa3,intsp4,int{char //1号舵机接口电平至 //2号舵机接口电平至 // //1.98ms
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026项目部职工面试题及答案
- 2026新鸿蒙培训面试题及答案
- 2026消毒竞赛试题及答案
- 电气维修单位停电作业安全制度
- 租赁合同(龙门吊)
- 实验室管理员个人实习总结
- 司法鉴定机构现状调研报告
- 2026下半年年高校招生综合管理岗大学教师招聘考试笔试试题(含答案)
- 一级造价工程师职业资格考试(建设工程技术与计量、安装工程)模拟试题及答案(2026年全国)
- 行政执法资格考试题库及答案
- tig焊接工艺参数选择方法
- 2024年云南省昆明市交通运输局局属事业单位招聘7人历年【重点基础提升】模拟试题(共500题)附带答案详解
- 教育学原理第一章:教育的本质
- 夏季施工防暑降温安全培训
- 结构设计概况表
- 石膏粉研究预测报告-石膏粉行业市场深度分析及发展策略研究预测报告(2024-2028年)
- 形式发票样本
- 10kV架空线路现场验收表
- 《普通生物学》教材全文
- 张朋《了凡四训》课件
- 应聘机械工程师考试试题(答案)
评论
0/150
提交评论