biji-arduino套件使用说明书_第1页
biji-arduino套件使用说明书_第2页
biji-arduino套件使用说明书_第3页
biji-arduino套件使用说明书_第4页
biji-arduino套件使用说明书_第5页
已阅读5页,还剩183页未读 继续免费阅读

下载本文档

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

文档简介

前 免责增强版与版本的区别 资料适用范围以及工具需求列表 第一章开发程 第一 安装usb转串口驱 第二 安装IDE样例程 第三 程序基本结构说 第二章模块功能详 第一节基本数字输出功能LED 第二节数字电平读入实 第三节模数转换功 第四 脉宽调 第五节EEPROM应 第六节串口通 第七节7段数码 第八节4x4矩阵键 第九节AD键 第十 4位数码 第十一节1602液晶 第十二节喇叭和蜂鸣 第十三节RGB三基色 第十四节直流电机应 第十五节步进电机应 第十六节舵机应 第十七节超声波测 第十八节光敏电阻测 第十九节热敏电阻测 第二十 火焰传感 第二十一 传感 第二十二 LM35温度传感 第二十三 DS18B20温度传感 第二十四 DHT11湿度传感 第二十五 DS1302时钟...............................................................................第二十六 DS1307时钟...............................................................................第二十七节红外功 第二十八 字库12864液晶屏 第二十九 8x8LED点 第三十 74HC1383-8译..............................................................................第三十一 74HC164串转并.......................................................................第三十二 74HC595移位寄存 第三十三 2片74HC573控制8位数码管(LY-51S开发板 第三十四 2片74HC595控制8位数码管(串行数码管模块 第三十五 直流电机测速模块(德飞莱测速模块 第三十六 串口更新数码管时钟(综合应用 第三十七 数码作电压表(综合应用 第三章常见问题解 一、主板不能程 二、程序运行不稳定或者反复重 前免责担保修责任。ArduinoIDE升级bootloader需要用到tiny口,另外需要选配avrtiny下载器。请参考解决办法。究。本书例程学习使用,其他使用造成的不良自负。UNO作为讲解对象,其他不同板卡请自行更换连接端口和修改程序。增强版与版本的区别 2)增强版 3)增强版 4)增强版第一章开发程本章介绍arduino的开发的基本功能和使用,板卡和德飞莱板卡的基本功能和使用,初学者第一次使用时候的驱动安装、安装、程序、参数设置等功使用开发板成功的朋友可以跳过此章。本章分为三个部分:第一部分:串口驱动程序的安第一 安装usb转串口驱1.1-安装,方法同XP1.1-2手动打开CH341文件夹(驱动程序文件夹内)中CH341.exe,双击安装驱动 驱动安装 图1.1-4安装成功1.1-5COM6USB-SERIALCH340字样,否则表明驱动不正确。使用本公司新版本的串口调试可以检测是否安装有串口,运行截图如下。德飞莱串口调试V2.0以上版本内置串口检测功能。该版本可以到或者搜索。1.1-61.1-7需要第一次安装,之后使用会自动识别,更换USB口对应的端也会自动改变,请以设节仅讲解增强版板卡驱动安装,原版UNO请参考资料。第二 安装IDE样例程解压IDE开 ,或去官网版本。此解压后需安装,双arduino.exe文件打开1.2-1图1.2-2打开界打开出现上述界面(图1.2-2),英文菜单和快捷功能图标,可以通过参数设置变方编辑,比如notepad++。的ATmega328p,在此选择类型要特别注意,会导致不能识别。这里需要需要选择Tool->Board->arduinoUno。1.2-3第二步需要打开一个程序样例。首先完成一个简单的程序:闪烁LED例程。集成了所有功能程序。仅使用IDE主板套件就可以完成主板功能测试。由于自打开file->examples->01.Basics->Blink(这是自带测试程序)如下图图1.2-4打开自带样例程从图上可以看出,自带了很多样例,样例适用于多种板卡,UNO板卡只能使用其Arduino 德飞莱旗舰店1.2-arduino的程序。可以看出这个程序非常简洁,点击箭头图标,此图标是编译并程序,这里有2个执行过1.2-应的COM口(CH340的COM口),点击“确定”按钮。1.2-状态栏显示“Doneuploading”,完成。此时表明程序的二进制文件已经到开这个LED闪烁表示准备好,然后复位板卡,准备运行的程序,之后的执行现象则是用闪烁LED,闪烁仅表示过程正在进行,这个属于正常现象,并非故障或者错误。、D以S以法,自写整只在上述2个过程中可能会出现错误,尤其初学者。错误也分为2个部分,第一部分是编或者正确的串导致。重新按流程选择,或者重新拔插USB线。第三 TurnsonTurnsonanLEDonforonesecond,thenoffforonesecond,repeatedly.Thisexamplecodeisinthepublic //Pin13hasanLEDconnectedonmostArduino//giveitaintLED=//thesetuproutinerunsoncewhenyoupressreset:voidsetup(){//initializethedigitalpinasanoutput.pinMode(LED,OUTPUT);}//thelooproutinerunsoverandoveragainforever:voidloop(){ED,ED,//turntheLEDon(HIGHisthevoltage//waitfora//turntheLEDoffbymakingthevoltage//waitfora}1秒钟点亮,并循环重复这个过程。Arduino也有关键字高亮功能,通过关键字可以看到程intLED13;这句和cLED13LED灯也连接到这个引脚。程序紧接着的功能是把LED引脚定义位输出,这样就可以用来驱动LED灯。紧接着的函数loop就相当于c语言的主循环函数,所有的需要循环执行的功能都在这里面操作。LED4行语句,这些函数之前都封装在库文件,从函数的名字可以看出其功能,比如第一句:digitalWriED,HIGH);译为数字信号写入函数,通过这个函数可以对指定的端口写入数字信01,这里hight和low表示1000ms1300ms300即可,最小值为1,那么这个函数的最小延时时长是1ms。下一句熄灭LED灯,然后延时1秒灭1秒)。库的应用从简单的程序看不出明显的优势,程序越大优势越明显。通过样例可以了解arduino程序的基本结构,后续的内容都会有详细讲解。关于自带样例中的其最底层学习单片机的原理。建议与51单片机一起学习应用,本书配套的LY-51S是以51单片机为主的独立模块开发板套件,模块化的组成可以重复利用资源,无需每种单片机作为通用性的学习、查阅资料保存。书上的一些位置会有,通过扫描可以直达。第二章模块功能详学习LED灯、按键、数字输入输出、模拟输入输出、数码管、电机等,这些部最后有几个综合的功能程序需要用户重点学arduino的目的就是完成一个最在发布和修改。请及时关注arduino版块。第一 基本数字输出功能LED2.1-1、I/O英文全称是Input/Output,即输入/输出。单片机端口是标准双向口,就是说,单2.1-上图中AI/O口,A点相当于单刀双掷开关,可以接到+5V,也可以接到电源地。接到+5V或者悬空,整个电路中没有电流流过,LED的状态是熄灭。如果A点接到电源地,25V,假设LED1.5V10mA。通过所以LED被点亮。在数字电路中,接+5V为电平“1”,接地为“0”。arduinoUNO(UNO)LED灯连接原理图,2.1-GND(这种电流称灌电流)。Arduino而LED30mALED,不会烧毁,把这个章节的扩展功能放到德飞莱,随时更新内容,帮助初学者轻松入门。ArduinoLED2.1-2.1-5面包板连接图 图2.1- 面包板连接图 图2.1- 流程 / / LED1秒,灭1秒,依此循LED13//引脚定义intLED=//voidsetup()//pinMode(LED,}////voidloop() ED, //LED引脚置高电 //1 ED,//1} ED,HIGH);函数的名称去理解其意义:digital数字的Write写,作用是向指定的引脚写入数字信号,//voidloop(){}ED,ED,ED,//voidloop(){}ED,ED,ED,ED,LED////LED////数)LED闪烁状态。用户可以自行改变参数来提示:现在机信号灯都是彩色LED,这里只要求用单色的LED实现。比如来打开样例程序:“arduino实用样例\3-LED////constintLEDPin //intLEDState longpreviousMillis 最后一次的LEDlonginterval voidsetup()pinMode(LEDPin,}void{//unsignedlongcurrentMillis=millis();if(currentMillis-previousMillis>interval){//previousMillis=if(LEDState==LOW)LEDState=HIGH;LEDState=把对应的LEDLED EDPin,}}LED的程序,结果一样,但是方法却不同,到底差别在哪里呢?举例说明一下:上一个程序是CPU独立工作,这个程序是CPU和定时器一起工作。一个人工作和2成一个大个工程,必须分工明确、沟通得力,CPU就是CEO,负责协调各个部门工作。分析一下程序,LED什么时候熄灭什么时候点亮?只取决于时间,这个时间是定时器产生的,单片机电源引脚加上正确电压后它就开始工作,不受其他程序影响。CPU只需要8个LED的协调工作,如需完成流水灯或者花样灯的功能,首先必须了解硬来1变为0,0变为1,其他的都不用更改。2.1-7为灌电流连接方式,称为共阳连接(LED阳极连接到一起)2.1-8为拉电共阴方式只需改变LED方向,公共线接GND。2.1-8共阳连接2.1-9共阴连接2.1-10面包板连接图(共阳方式//constintLEDCount //constintLEDCount intLEDPins[]=0,1,2,3,4,5,6,7 //对应的LEDvoidsetup()//LEDfor(intthisLED=0;thisLED<LEDCount;{pinMode(LEDPins[thisLED],}}voidloop()for(intnum=0;num<8;num++){ EDPins[num],}//循环顺序点亮LED200msfor(intnum=0;num<8;{digitalWri LOW);delay(200); EDPins[num],}}LED1200ms熄灭第一个,然后点亮第2个,等待200ms,熄灭第2个,依此循环,直到8LED都点亮熄灭。周而复始。8位LEDLED亮灭。下面1位LED8位LED,都有一个共同特点:都是合,一种是断开;比如电位器(可调电阻,电阻的一种),连续变化的阻值。那么上述2能。digitalRead(),ogRead()2种函数,翻译到中文就是数字量、模拟量。打开程序:“\arduino实用样例\5-8LED灯显示电位器位置”,从名字可以看出这2种器件,18LED灯,LED灯讲之前解过,2.1- / 利用A0输入的模拟量,控制LED点亮状态,可以直 使用独立模块开发板LY-51S连接详情:。//const ogPin= / 利用A0输入的模拟量,控制LED点亮状态,可以直 使用独立模块开发板LY-51S连接详情:。//const ogPin=A0;//模拟输入constintLEDCount= //LEDintLEDPins[]=0,1,2,0,1,2,3,4,56,7, //对应的LEDvoidsetup()for(intthisLED=0;thisLED<LEDCount;{pinMode(LEDPins[thisLED],}}voidloop() sorReading intLEDLevel=map(sensorReading,0,1023,0,for(intthisLED=0;thisLED<LEDCount;{if(thisLED<LEDLevel) EDPins[thisLED],}else EDPins[thisLED],}}}这里用到map()函数,简单的说这个是数值变换函数,map的愿意是地图,实际的尺寸intLEDLevel=map(sensorReading,0,1023,0,解读这个语句的意思:等号左边定义一个int变量用来指示LED点亮的个数,ensorReading是的A0的模拟量值,这个值的范围是0-1023,因为arduino使用的是1023。LEDCount是自定义的LED810个或20个LED来指示电位器状态,只需要改变预定义的值。系统会自动计算比例系数,这样与LY-51S开发板LED模块连接如下2.1-13电路图,低电平有效1LEDarduinoD13LY-51SJ92.1-8LEDarduinoD0-D78LY-51SJ92.1-8LEDarduinoA0LY-51SJ32W3J31W42.1-第二 2.2-1常见的按键和开关2.2-22.2-22个脚、4个脚、5个脚还有薄膜按键(遥与arduino2.2-32.2-42.2-3是高电平有效。按键当按键按下,开关电路闭合,D2直接连接到VCC,此时单片机读到的是高电平。图2.2-4 图2.2- 图2.2-2.2-5高电平有效2.2-6低电平有效改进版的UNO把这2种按键集成到主板上,并预留了引脚插针,使用的时候只需要把对应的插针连接到相应的端口即可。和标识如下:2.2-键。一般用杜邦线连接,杜邦线如下: 图2.2-88P杜邦 图2.2-94P杜邦2.2-101P ///德飞莱旗舰店 ///德飞莱旗舰店 Pin2的电平信号,并把结果打印到串口,也同时反映到LED灯////intLED=13;//voidsetup()////者KEY_LpinMode(pushButton,INPUT);//独立模块LY-51S开发板上独立按键K1-K8//把LEDpinMode(LED, }//voidloop() intbuttonState LED ED,// //延时大小决定循 的时间间}Serial.begin(9600);这个语句的目的是初始化串口的参数,arduino规定只允许改变波特率参数,其他的参数使用通用数值。如果你需要pinMode(pushButton,INPUT);设置端口为输入模式,用于端口电平。这个程序的功能是按键的电平状态,然后实时的反应到LED并且传输到电脑串口上。2.2-箭头指向的按钮是打开arduino自带的串口调试功能。也可以使用第的调试,2.2-注意:德飞莱版本集成的按键KEY_L,没有上拉电阻,使用时需要打开单片机上口与GND之间,原理类似,这个应用的范围比上拉电阻少。\8-独立按键检测程序上拉”。输入上拉功能。 / 按键一端连接到+GND,另外一段连接到**Pin2如果使用LY-51S:void//使能pin2为输入,并启 上拉功能pinMode(2,pinMode(13,}void sorVal= if(sensorVal==HIGH){digitalWrite(13,}elsedigitalWrite(13,}}与之前的程序一样,仅仅改了一句设置功能,pinMode(2,INPUT_PULLUP);原来定义为普通输入,现在定义为上拉输入,arduino的语句都是英语单词,如果英语水平不错这些机可能检测的2次或者,而且次数是不能确定的,这个结果当然不是所需要的,既复杂,效果也不乐观。所以现在大多采取第二种方法:去抖动。2.2-2.2- / / LY-51S 来了解这个内容地址 /playlistshow/id独立按 /vshow/id按钮一端连接到+5V,另外一段连接到10Kpin2GND如果使用LY-51S独立模块开发板,参考以下 //constintbuttonPin //constintLEDPin LED//intLEDState //当前LEDint intlastButtonState= //上 //longlastDebounceTime //上次按键触发时longdebounceDelay //void{pinMode(buttonPin,INPUT);pinMode(LEDPin,OUTPUT);//LED EDPin,}voidloop() intreading=////if(reading!=lastButtonState)//lastDebounceTime=}if((millis()-lastDebounceTime)>debounceDelay)//if(reading!=buttonState)buttonState=buttonState=////{LEDState=}}}把LED EDPin,//lastButtonState=}程序的功能如下:按一下按键,LED熄灭,再次按一下按键,LED点亮,如此往复。与LY-51S连接图:2.2-8个独立按键,低电平有效2.2-ArduinoD2LY-51SJ26任一引脚,有8第三 ADC1、定义需要的模拟量输入端口。UNO是2.3-10-VCC的变化电压。2.3-2实物连接图LED / LED / 如果使用LY-51S独立模块开发板,参考以下 : sorPin=A0;intLEDPin=13;////LED sorValue=0;//模拟输入数值变voidsetup() pinMode(LEDPin,}voidloop() sensorValue //点亮LED,LY-51S独立模块开发板上LED模块则是熄灭LED EDPin,HIGH);//使 EDPin,LOW);//使用 }与LY-51S开发板连接如下图:2.3-39图2.3- 图2.3-图2.3-4ArduinoA0LY-51SJ32W3J31W4;2.3-5为电位器调节LED闪烁频率,接法同上第四 脉宽调制()定义是英文“PulseWidthModi的缩写,简称脉宽调制。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用于测量,通信,功率控制与变换等许多领域。一种模拟控制方式,根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶体管或晶体管导通时间的改变,这种方式能使电源的输出电压在工作条件变化时保持恒定。这里用模拟最简单的,频率不变,脉冲高电平宽度可以调节,实际是调节做功时间,从而达到调节电压、电流或者功率等参数。2.4-12.4-2在一些情况下可以替代DAC(数模转换)功能。所以在arduino里面使用函数ogWrite();写模拟量,arduino的 是8位,换算成数字量是0~255。 片自带的发生器功能,只有在主板上标有的端口才能使用这个功能,否则此函数写无效。UNO的 端口是3、5、6、9、10、11。图2.4-3调光电路图2.4- 调光基本连接,也可以连接到其他 引脚图2.4-4调光实物连接 / 利 功能实现调光效intLED=intbrightness LEDintfadeAmount ////void pinMode(LED,OUTPUT);//独立模块LY-51SLED1-LED8}//void //LED ED,//下一个循环调整LED//if(brightness==0||brightness=={fadeAmount=-fadeAmount}}打开程序:“\arduino实用样例程序功能:从0循环增大数值,到255后再循环减小到0,如此循环,LED状就是这种方法实现的。通过把之前学习过的ADC转换、调光功能结合起来,可以实2.4-5电位器控制LEDLED串联也能实现调光功能,这个程序则需要把中间图2.4-6实物连接图,连接到9打开程序:“\arduino实用样例\11-LED 数据变化到0-255区间,使用 引脚调节LED亮度如果使用LY-51S独立模块开发板,参考以 //constintogInPin=A0;//模拟输入引脚constintogOutPin=9;// insorValue=0; //电位器电压值intoutputValue //模拟量输出值(voidsetup()//}voidloop() sensorValue //outputValue=map(sensorValue,0,1023,0,//输出对应 ogOutPin,////这里可以使用arduino Serial.print("sensor="); Serial.print("\toutput=");//2ms//取保能稳 }程序解读:定义模拟输入引脚A0,定义 输出引脚Pin9,这2种功能都是单片机自带的硬件功能,所以无需设置初始化参数,arduino已经提前设置完成,只需接对端口操作。循环模拟量,把模拟量进行数据变换至0-255,以便适应 从最终现象看到的是:电位器转动,LED的亮度随之变化,串口不停的输出2种即时数值。这个程序集成了3种功能,模拟转换、 与LY-51S开发板连接图图2.4- 图2.4-2.4-7:ArduinoD9接LY-51SJ9任一端。图2.4-8:电位器调光,D9接J9任一端A0接J32W3J31W4第五 EEPROM应EER,非易失性器。单片机发展的起始阶段,程序的存贮器都是用高压编程的,擦除的时候需要用紫外线长时间照射。RAM在掉电后数据也丢失了,那个时候没有发明EERM只能用厂家设置。现在不同了,这种低价格的器到处都有,比如电脑硬盘,D卡都有反 / arduino使用的是AVR单片机,单片 / arduino使用的是AVR单片机,单片 #include EEPROM的地intaddress=0;bytevalue;{//value=Serial.print(valueDEC);//十进制显示数值value=value+1;对应的开机次数加1EEPROM.write(address,value);//然打开程序:“\arduino实用样例\13-”}void{} 数从EEPROM读出来,然后数值加一,再到EEPROM,由于单片机掉电后EEPROMArduino里面程序集成了相关函数,只用2个语句就实现读写功能。1万次的时候则认为这个机器的开关EEPROM功能,当开关次数达到1万次后把一些必要的信息反映到显示屏或者直接切第六节串口通讯的地位。串口通讯适合低速传输,通过RS485电平转换可以实现远距离传输。控制方式和才能发送下一个数据,速率不对等则会造成丢包、堵塞。一条路最多能开40码,如果强行180是主板能否程序,因为程序是通过该串口的。UNO只有1个硬件的串口,如果需arduinoarduino自带样例中提供测试函数部分,参考德飞莱或者arduino。2、蓝牙串口调试界

2.6-

2.6-2.6-第七 7段数码2.7-2.7-00011100002010130100401105011060111700008011190110A0111B0111C0011D0101E0111F01112.7-01100111112101031011410015100161000711118100091001A1000B1000C1100D1010E1000F10002.7-顺序,0-F的常用输出。2.7-38个LED8arduino2.7-42.7-58位LED的连接完全一样。只有实际操作才能发现数码管排列的优点。下面是2种类型的实物连接图。图2.7-6共阳数码管连接方式,公共端接 图2.7-7共阴数码管连接方式,公共端接打开程序:“\arduino实用样例\16- / / arduino版10-9intintLEDPins[]={0,1,2,3,4,56,7, //对应的LEDvoidsetup()for(intthisLED=0;thisLED<LEDCount;{pinMode(LEDPins[thisLED],}}数据处理,把需要处理的bytevoiddeal(unsignedcharvalue){for(inti=0;i<8;i++) EDPins[i],!bitRead(value,i));//使用了 函数,非常简}//voidloop()0-9for(int }}定义段码:不同的段点亮的组合形成固定的字符,常用的是0-9,A-F,这里只写0-9。voiddeal(unsignedcharvalue),其中value是要显示的数值,是查询处理的段码,如何把这个8位的数据到对应的端口上面是整个程序的关键。函数bitRead(value,i),目的是value这个字节中的每一个bit序许多初学者不能读懂,但一定要自行慢慢消化并理解显示原理,因为后面的48与与LY-51S开发板连接图图2.7-8独立共阳数码管电路 图2.7-9ArduinoD0-D7连接到LY-51SJ6a-第八节4x4电路图2.8-2打开程序:“\arduino实用样例\21-4x4 使用独立模块开发板LY-51S连接详情:constintnumRows4;//4constintnumCols4;//4constintdebounceTime20;//{'1','2','3','+'{'4','5','6','- constintrowPins[numRows7,6,5,4};//设置硬件对应的引脚constintcolPins[numCols]={11,10,9,8};for(introw=0;row<}for(intcolumn=0;column<}}voidloop//charkey=if(keySerial.print("GotSerial.print("Gotkey");//}}charcharkey=for(intcolumn=0;column<for(introw=0;row<numRows;while(digitalRead(rowPins[row])== ;key=}}digitalWrite(colPins[column],HIGH);//De-activethecurrent}return继续扫描。以4x4逐行扫描位例,步骤如下:2、4个列线全部设为输入,并置高电平(上拉作用第一行线拉低(LOW)4根列线是否有低电平出现?如果有,证明有按键按下,则继续下一步。改行线(置高HIGHT)。第二行线拉低(LOW)4根列线是否有低电平出现?如果有,证明有按键按下,则继续下一步。改行线(置高HIGHT)。第三行线拉低(LOW)4根列线是否有低电平出现?如果有,证明有按键按下,则继续下一步。改行线(置高HIGHT)。第四行线拉低(LOW)4根列线是否有低电平出现?如果有,证明有按键按下,则继续下一步。改行线(置高HIGHT)。LY-51S中有讲解,相关内容可以参考LY-51S的书籍或者与LY-51S开发板连接图如下,ArduinoJ252.8-图2.8- ArduinoD4-D11接LY-51S第九 AD键加电阻实现,连接方式有很多种,这里讲解常见的一种。ADC按键用于端口数量有限,按2.9-2.9- /// ///七星虫旗舰店 /// ///七星虫旗舰店 arduino版 如果使用LY-51S://constintogInPin=A0;//模拟输入引脚insorValue=0; //电位器电压值intkeyValue=0;voidsetup()//}voidloop() sensorValue //// Serial.print("KeyPressis=ADKey");2ms//取保能稳 }下,A0口会到的不同的电压值,通过对比电压值的范围,可以确定是哪个按键按下。一般ADC采样数值。不同的按键数值不同,相第十 4位数码32UNO主板没有这么多端口,那么最终有什么方法节省端口 DIS0111aDPY DIS027 DIS03 DIS042DIS01DIS02DIS03DIS04DIS05DIS07DIS08acfgcfg DIS05 DIS0610DIS07 DIS08e deegc eedafgbeedafgbdcfgde aeedafgbdceafgbdceafgbdd126789869861Kx9869862.10-从电路图上可以看出,8个数码管的数据端(a-dp)是连接在一起的,每个数码管都有可以实现不同的字符显示,这个数据是控制字形的,称之为段码。88个数码2.10-2.10-3最终要求显示效果2.10-这个8位数码管的工作原理24位数码管拼接在一起的。上图使用了驱动三2.10-5实物连接图图2.10-6硬件不区分共阴共阳,全部由控 / / 端口直接驱动4位共阴数码管,一般情况无需外接限流电阻 intsegCount=4;longpreviousMillis=constunsignedchar,//unsignedcharconstdofly_WeiMa[]={0,1,2,3};intLEDPins[]={12,8,5,3,2,11,6,4,}; //11,7,4,2,1,10,5,3注释是数码管实际引脚数,和 intsegPins[]= //12,9,8,6注释是数码管实际引脚数,和 一样,逆时针数德飞莱 unsignedchardisplayTemp[4];//显示缓冲区voidsetup(){//for(intthisLED=0;thisLED<LEDCount;{pinMode(LEDPins[thisLED],OUTPUT);for(intthisSeg=0;thisSeg<segCount;{pinMode(segPins[thisSeg],}}//数据处理,把需要处理的bytevoiddeal(unsignedcharvalue){for(inti=0;i<8;i++) EDPins[i],bitRead(value,i));//使用了 函数,非常简//!}//voidloop()staticunsignedintnum;//定义一个数据staticunsigned longlastTime=0;if(millis()-lastTime>={lastTime=} displayTemp[0]=dofly_DuanMa[1];//静态显示staticinti;unsignedlongcurrentMillis=millis();if(currentMillis-previousMillis>0){previousMilliscurrentMillis;deal(0);//清除“鬼影”for(inta=0;a<4;a++)//循环写位码,任何时刻只有1if(i==4)//4}}态扫描,而不是静态显示。44个字节的缓冲区,缓冲区可以理解为中转 / / 端口直接驱动4位共阴数码管,一般情况无需外接限流电阻 intsegCount=4;longpreviousMillis= constunsignedchar//unsignedcharconstdofly_WeiMa[]={0,1,2,3};intLEDPins[]={12,8,5,3,2,11,6,4,}; //11,7,4,2,1,10,5,3注释是数码管实际引脚数,和 intsegPins[]= //12,9,8,6注释是数码管实际引脚数,和 一样,逆时针数德飞莱 unsignedchardisplayTemp[4];//显示缓冲区voidsetup(){//for(intthisLED=0;thisLED<LEDCount;{pinMode(LEDPins[thisLED],OUTPUT);for(intthisSeg=0;thisSeg<segCount;{pinMode(segPins[thisSeg],}}//数据处理,把需要处理的bytevoiddeal(unsignedcharvalue){for(inti=0;i<8;i++) EDPins[i],bitRead(value,i));//使用了 函数,非常简//!}//voidloop()staticunsignedintnum;//定义一个数据staticunsigned longlastTime=0;if(millis()-lastTime>={lastTime=}} staticinti;unsignedlongcurrentMillis=millis();if(currentMillis-previousMillis>0)deal(0);//清除“鬼影”for(inta=0;a<4;a++)//循环写位码,任何时刻只有1 if(i==4)//4}}的显示信息也是可以改变的,这个程序的作用是实现 累计功能,达到最大值有重新第十一节16022.11-112接电源3弱,接地电源时对比度最高(对比度过高时会产生“

低电平0时选择指令寄存器。5656EE(或EN)端为使能(enable)端,下降沿使能740位(最低位84194243444546

高4位三态、双向数据总线7位(最)(也是busyflag)00写入指令寄存器(清除屏等00写入指令寄存器(清除屏等 读busyflag(DB7),以及位址计数(DB0~DB6) 写入数据寄存器(显示各字型等 从数据寄存器数1602液晶模块的字符发生器(CGROM)已经了160个不同的点阵字符图符都有一个固定的代码,比如大写的英文字母“A”01000001B(41H),显示时模ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如‘A’。以下是160216进制ASCII码表:ASCII0x42(前0x表示十六进制)2.11-3123456789 4位接线方式原理2.11-4图2.11-5实物图,参LiquidCrystal(rs,enable,d4,d5,d6,d7)LiquidCrystal(rs,rw,enable,LiquidCrystal(rs,enable,d4,d5,d6,d7)LiquidCrystal(rs,rw,enable,d4,d5,d6,d7)LiquidCrystal(rs,enable,d0,d1,d2,d3,d4,d5,d6,d7)LiquidCrystal(rs,rw,enable,d0,d1,d2,d3,d4,d5,d6,d7)lcd.begin(cols,rows)lcd:cols:rows:行数setCursor()--设置光标lcd.setCursor(col,row)lcd:cols:rows:行数lcd:lcd.print(data,data:(char,byte,int,long,orBASE可选thebaseinwhichtoprintnumbers:BINforbinarybase2DECfordecimalbase10),OCTforoctal(base8),HEXforhexadecimal(base16). / LiquidCrystal / LiquidCrystal库 oHD44780的LCD16引脚。引脚定义,这里使用4位数据模式,只写数据,不读数据:LCDRSpintodigitalpinLCDEnablepintodigitalpinLCDD4pintodigitalpinLCDD5pintodigitalpinLCDD6pintodigitalpinLCDD7pintodigitalpinLCDR/Wpintoground10K //使用LY-51Sendsto5VandgroundVO引脚接电位器抽头,用于调节对比度,LY-51S开发板只需要调节W1电位器。wipertoLCDVOpin(pin//#include//LiquidCrystallcd(12,11,5,4,3,2);voidsetup(){//lcd.begin(16,// o,}voidloop()//lcd.setCursor(0,1);打印复位后的运行秒值lcd.print("Second");}程序解读:首先需要包含对应的头文件“#includeLiquidCrystal.h>”,只有包含这个面的4种定义方式。下面进行一些必要的初始化,设置液晶的行列参数,这里使用1602液晶,所以是2行16lcd.print("oDOFLY!");默0,0位置打印,所以这些与LY-51S开发板连2.11-71602 与LY-51S配套模块连线图LY-51SJ23J23J23J23J23J23J23P25 电磁式蜂鸣器电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。号,阻抗匹配器推动压电蜂鸣片。)一些器只能发出“滴滴”声响的一般都是蜂鸣器。。在看程序之前,先了解的一个函数:tone()和notone()这个2个函数是的函数,在指定的引脚产生指定频率占空比50%的方波,其中一个是发生方波,另外一个就是停止方波。其实由定时器控制,不用去了解结构,直乐谱节拍规律改变的频率和时间就可以实现音乐。tone()有以下2种形式的参数tone(pin,frequency)notone(),,图2.12-1电位器改变频率电路图2.12-2电位器改变频率实物打开程序:“打开程序:“\arduino实用样例\38- 10K电阻另外一段接arduino如果使用如果使用LY-51S独立模块开发板,参考以 voidsetup()//}voidloop()// sorReading //把读入的模拟量(这种情况下,4001000//换算出频率范围(120-intthisPitch=map(sensorReading,400,1000,120, tone(9,thisPitch, //}再看一个单纯2.12-3图2.12-4直接用端口驱动喇叭或者蜂鸣器,的写法不同(程序中使用8脚,可自行更改程序 /// ///七星虫旗舰店 /// ///七星虫旗舰店 arduino版 LY-51S:#include//intmelody[]=NOTE_C4,NOTE_G3,NOTE_G3,NOTE_A3,NOTE_G3,0,NOTE_B3,//音符持续时间:4=四分音符,8=八分音符等等:intnoteDurations[]={4,8,8,4,4,4,4,4voidsetup()//for(intthisNote=0;thisNote<8;thisNote++)1S//=10004,八分音符=1000/8,tone(8,melody[thisNote],noteDuration);1.3intpauseBetweenNotes=noteDuration*1.30;//停 }}voidloop()//noneedtorepeatthe}与LY-51S开发板连使用ULN2003驱动,三极管处接可用于调节音量,默认不使用该功能,调节音表2.12-1LY-51S配套模块连线图LY-51SJ42表2.12-2LY-51S配套模块连线图LY-51SJ42J32W3J31 RGB三基色RGB三种颜色,R=Red,G=Green,B=Blue,通过这三种颜色不同比例的的,一个LED就是一个像素,这个像素可以通过程序控制显示任何颜色、任何灰度。在单片机中是通过来实现调色功能,之前学习过调光功能,使用1个单色LED,主的彩片一般也会用RGB格式表示,比如24位彩色,RGB三种颜色各占8位,组成的格式RGB=888格式。每种颜色28次方=256个亮度等级,那么整个像素是可以显224次方=16777216明确,1种颜色用1路,三种颜色就用三路,很幸运,UNO有大于3路功能输出,所以还有剩余来完成其他功能。下面是电路图和实物连接他。同样的RGB也分共阳和共阴,LED一共4个有效引脚,1个公共端,另外3个是三种颜色的另外一端。图2.13-1RGB / arduino版块 / arduino版块 r代表红色,范围是0-255,g代表绿色,范围是0-255,b代表蓝色,范围是0-255三色LED灯的调光变色功能。TheLED39,10,11 功能进行调光,实现3种颜色混合显示 StringinString //intcurrentColor=intred,green,blue=voidsetup//while(!Serial){;//waitforserialporttoconnect.NeededforLeonardo}//Serial.println("\n\nStringtoInt()RGB:");//LED端口方向:pinMode(9,OUTPUT);pinMode(10,OUTPUT);pinMode(11,OUTPUT);13脚LED作为电源指示:pinMode(13,OUTPUT);digitalWrite(13,HIGH);}voidloopint ifSerial.available(){inChar=}if(isDigit(inChar))// inString+=}if(inChar==','){//根 switch(currentColor)case 0redred=//inStringinString=casegreen=}}//if(inChar=='\r')blue=//写入对应的 ogWrite(9,255-green);ogWrite(10,255-打印对应的数据到串口Serial.print("Red:");Serial.print(",Green:");Serial.print(",Blue:");//inString=//currentColor=}}的字符串格式规定如下:r,g,b,+200,100,150,+回车,这个格式是正确的。机。其中包含2个关键信息:1、直流2、电。分为两部分:定子与转子。注意:换向极与换向器弄了。直流电调速就是调节两端的电压。之前学过,这里也使用通用的方法控制速解,直流电机还有正反转功能,这需要的驱动配合控制,比如L9110,L298等。ULN2003驱动电机,这2.14-12.14-2打开程序:“\arduino实用样例\41-直流电机调速程序”这里不 程序,因为程序与调光的程序完全一样,仅仅是电路连接不同程序讲解:请参考调光与LY-51S开发板连接图如下:表2.14-1LY-51S配套模块连线图LY-J45 4相8拍。1相励 2相励 1-2相励步ABCD步ABCD步ABCD1100011100110002010020110211003601006011060017000810012.15-1方向流向。双极电机需要H桥驱动,每个线圈可以正反向施加电压。2.15-2步进电机+ULN2003驱动2.15-3 / //德飞莱 arduino版块 LY-51S#include / //德飞莱 arduino版块 LY-51S#include////changethistothenumberofstepsonyourmotor#defineSTEPS512//Stepperstepper(STEPS,8,10,9, intprevious=voidsetup(){}{ AD值,在LY-51Sintval //stepper.step(val-//记下这 previous=}些的函数电机。结果会在上。与LY-51S2.15-42.15-42.15-2LY-51S配套模块连线图LY-51SJ42J42J42J42步进电机直接J44插 里说的舵机主要应用于航模、车模和等多种领域。之前提及的舵机一般是正负90度之舵机的控制信号实际上是信号,周期不变,高电平的时间决定舵机的实际位置。单片机中常用的产生方式有2其一是通过定时器或者延时模拟出信号,其二是单片机包含发生器图2.16-19g舵机外形图 2.16-2舵机连接电路2.16-32.16-4 / / Servo //8intpos={// //}{for(pos0pos180;pos //0度-180 //1 //输入对应的角度值,舵机会转到此位}for(pos=180;pos>=1;pos-{}//180度-0//} 与LY-51S开发板连接图2.16-1LY-51S配套模块连线图LY-51S舵机J52或 echo端会产生高电平回响信号,其持续时间与所测距离成打开程序:“打开程序:“\arduino实用样例\47-超声波测试程序 arduino版 //constconstinttrig //constintecho //pinMode(echo,INPUT);}digitalWrite(trig,1);//置高电平digitalWrite(trig,0);//设为低电平floatS=IntervalTime/58.00;//使用浮点计算出距离,单位cm}}2pulseIn(echo, HIGH);直接用该函数测量高电平的宽度,自动识别电平,无需等。 体片(光敏层)—空穴对,参与导电,使电路中电流增强。为了获得高的2.18-3 / / //德飞莱 arduino版块 通过检测光敏电阻的变化值,用于控制LED的闪烁频率,值越大,闪烁越慢如果使用LY-51S独立模块开发板,参考以 sorPin=A0;intLEDPin=13;////LEDintsensorValue=0;//voidsetup() pinMode(LEDPin,}voidloop() sensorValue //点亮LED,LY-51S独立模块开发板上LED模块则是熄灭LED EDPin,HIGH);//使用 EDPin,LOW);//使用 }LED闪烁频率完全相同,在实际应用中,也只需要 / / //德飞莱 arduino版块 通过检测光敏电阻的变化值,用于控制LED的闪烁频率,值越大,闪烁越慢如果使用LY-51S独立模块开发板,参考以: sorPin=intLEDPin=13;intrelayPin= sorValue=// voidsetup()pinMode(relayPin,}voidloop() sensorValue 点亮LED,LY-51SLEDLEDif(sensorValue>=800)digitalWrite(relayPin,HIGH); EDPin,HIGH);//使用 EDPin,LOW);//使用 }if(sensorValue>=800)digitalWrite(relayPin,HIGH);elseif(sensorValue<=600)digitalWrite(relayPin,LOW);与LY-51S开发板连接图图2.18-5光敏和热敏电路图2.18-2.18-1LY-51S配套模块连线图LY-J7 NTC热敏电阻,由于热敏电阻应用广泛,种类繁多,这里进针一种NTC热敏电阻材料。与光敏电阻电路完全相同,只是更换传2.19-5与LY-51S开发板连接图图2.19-62.19-1LY-51S配套模块连线图LY-J7 2.20-2制LED相同。这里主要讲解硬件电路图。程序和硬件部分是此消彼长的关系,硬件复杂,LED作为状态指示灯,电位器是用来调节火焰传感器比较电路的灵敏度,ULN2003和继电器是输出控制部分。在实际应这些设备可以实现自动灭火、等工作。程序同光敏、热敏控制程序。打开程序:“\arduino实用样例\60-火焰传感器控制继电 工作电压范 静态电 触发方 L不可重复触发/H重复触感应角 可重复触发方式:即感应输出高电平后,在延时时间段内,如果有在其感应范具有感应时间(默认设置:0.2秒):感应模块在每一次感应输出后(高电平变为低电平),可以紧跟着设置一个时间,在此时间段内感应器不接收任何感应信号。此功能模块的参考原理图2、模块除了对红外敏感,其他的光线,如光、红外等也可能干扰模块能时只需要接上电源,外接一个led灯即可完成实验。 LM35温度传感LM35介绍LM35是一种得到广泛使用的温度传感器。由于它采用补偿,所以输出可以从0℃供电模式可提供负温度的量测;两种接法的电流-温度关系,在温度中自热效应低(0.08℃),单电源模式在25℃下电流约50μA,工作电压较宽,可在4—20V的供电电工作电压4~30V,在上述电压范围以内,从电源吸收的电流几乎是不变的(约50μA),所以自身几乎没有散热的问题。这么小的电流也使得该在某些应用中特别适下图是常用的封装形式,这里使用插件TO-92封装,类似普通三极管图2.22-图2.22-图2.22-图2.22- / / arduino版intpotPin0;0LM35void{Serial.begin(9600);//设置波}void{{ Serial.print(dat);//输出显示dat的值Serial.println("C");//原样输出显示C字符串delay(500);//延时0.5秒} 2、LM35的测温精度取决于电路设计,和采样数据优化。电路部分应尽量避免干扰, DS18B20温度传感DS18B20介绍:处理器与DS18B20的双向通讯。55℃~+1251④、工作电源3.0~5.5V/DC(可以数据线寄生电源⑤、在使用中不需要任何元9~12位数字量方式串行传送2.23-12.23-2#include#include//Data#include#include//Datawireispluggedintoport2ontheArduino#defineONE_WIRE_BUS2//SetupaoneWireinstancetocommunicatewithanyOneWiredevices(not/DallastemperatureOneWire//PassouroneWirereferencetoDallasTemperature.DallasTemperaturesensors(&oneWire);void{//startserialportSerial.println("DallasTemperatureICControlLibrary//Startupthelibrary}void{//callsensors.requestTemperatures()toissueaglobal//requesttoalldevicesonthebussensors.requestTemperatures();//SendthecommandtogettemperaturesSerial.print("Temperatureforthedevice1(index0)is:}程序解读:DS18B20的的时序较为复杂,对时间精度要求较高,arduino自身有精准的多个18B20器件,非常方便。与LY-51S开发板连接图:图2.23-32路温度传感 图2.23-2.23-1LY-51S配套模块连线图LY-J48 DHT11湿度传感4引脚安装DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感。它应相连接。因此该产品具有品质卓越、超快响应、能力强、性价比极高等优点。每个2.24-1 / / 不使用库文件的DHT11这个程序移植其他,后期会做修改intLED=8;intbyte{bytei=0;{}return}void{}void{bytedht11_dat[5];bytedht11_in;bytei;PORTC&=DDRC&=dht11_in=PINC&_BV(DHT11_PIN);{Serial.println("dht11startcondition1notmet");}dht11_in=PINC&_BV(DHT11_PIN);{Serial.println("dht11startcondition2not}{Serial.println("DHT11checksum}Serial.print("temperature=");}第二十五节DS1302DS1302是DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,5.5VCPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供也能保持时钟的连续运行。DS1302由VCC1或VCC2两者中的较大者供电。当Vcc2大于VCC1+0.2V时,VCC2给DS1302供电。当VCC2小于VCC1时,DS1302由VCC1供电。X1和X232.768kHz晶振。RST是复位/RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送。当RST置为低电平,则会终止此次数据传送,I/OVCC>2.0V之前,RST必须保持低电平。只有在SCLKRST置为高电平。I/O为串行数据输入输出端(双向)。SCLK为时钟输入端。与LY-51S开发板连接图2.25-1LY-51S配套模块连线图LY-51SJ13J13J13 DS1307时钟年上线2100。-40808DIP和SOIC封装器配置:64x电源电压范围:4.5Vto5.5V封装类型:DIPSOP工作温度范围:0°Cto封装类型器容量:56bytes接口类型:Serial,I2C温度范围:电压,Vcc最大:5V标号DS1307IICDS1307TWIDS1307寄存器或RAM中:第一步.START第二步.SLA+W(0xd0)字节,DS1307应答第三步.1字节内存地址(DS1307内该地址处),DS1307应答。第五步.STOP 库的使用,主程序的部分非第二十七节红外功 引脚定 2.27-2输入输出波形图(38K载波号,此信号经由IC放大器进行放大,然后通过自动增益控制、带通滤波、解调、波形38KHz调制波驱动。这里不做详细讲解,应用较少。在入到LED1个LED闪烁功能通过红外发射和接2.27-5Arduino中使用简化接法。只要接电源和信号线即可。打开程序:“\arduino实用样IRremote:IRrecvDemo-demonstratesreceivingIRcodeswithAnIRdetector/demodulatormustbeconnectedtotheinputVersion0.1July,Copyright2009Ken intRECV_PIN=11;decode_resultsresults;voidsetup(){irrecv.enableIRIn();//Startthereceiver}voidloop()if{Serial.println(results.value,HEX);irrecv.resume();//Receivethenextvalue}}便捷的。按下的任意按键,串口显示出对应的码值,一般格式:HHHHHHHHIRremote:IRrecvDemo-demonstratesreceivingIRIRremote:IRrecvDemo-demonstratesreceivingIRcodeswithAnIRdetector/demodulatormustbeconnectedtotheinputVersion0.1July,Copyright2009Ken #include<IRremote.h>intRECV_PIN=11;intRELAY_PIN=4;IRrecvirrecv(RECV_PIN);decode_resultsresults;//Dumpsoutthedecode_results//Callthisafter//void*toworkaroundcompiler//voiddump(void*v) decode_results*results=(decode_results*)vvoiddump(decode_results*results){intcount=results-if(results->decode_type=={Serial.println("Couldnotdecode}elseif(results->decode_type=={Serial.print("DecodedNEC:}elseif(results->decode_type=={Serial.print("DecodedSONY:}elseif(results->decode_type=={Serial.print("DecodedRC5:}elseif(results->decode_type=={Serial.print("DecodedRC6:}Serial.print(results->value,HEX);Serial.print("(");Serial.print(results->bits,DEC);Serial.println("bits)");}Serial.print("Raw(");Serial.print(count,DEC);Serial.print("):");for(inti=0;i<count;i++)ifif((i%2)==1)Serial.print(results- }elseSerial.print(-(int)results- }Serial.print("}}void{pinMode(RELAY_PIN,irrecv.enableIRIn();//Startthe}inton=unsignedlonglast=millis();voidloop(){if(irrecv.decode(&results))//Ifit'sbeenatleast1/4secondsincethe//IRreceived,toggletherelayif(millis()-last>250){on=digitalWrite(RELAY_PIN,on?HIGH:LOW);digitalWrite(13,on?HIGH:LOW);}last=irrecv.resume();//Receivethenext}}与LY-51S开发板连接图:2.27-1LY-51S配套模块连线图LY-J42RL1或 字库12864液晶屏档。样例程序中使用ST7920字库液晶。12接电源3456E(或EN)端为使能(enable)端,下降沿使能;串行同740位(最低位84194243444546高4位三态、双向数据总线7位(最)(也是busy12864负压输出端(用于调节对比度 字库ST792012864

arduino版LY-51S PIN1=GNDPIN2=5VPIN4RS(CS)

温馨提示

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

评论

0/150

提交评论