arduino项目整理

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1报警器代码FloatsinVal//浮点型sin函数变量InttoneVal//整形音调变量Voidsetup(){pinmode(8,OUTPUT)//设置引脚为8的输出}Voidloop(){For(intx=0;x180,x++)//for循环初始变量为0度范围0——180增加{2sinVal=(sin(x*(3.1412/180))//将角度转换为弧度制赋值给sinValtoneVal=2000+(int(sinVal*1000))//将数值化为整数,无小数}tone(8,toneVal)//给引脚8音调delay(2)//延迟2毫秒}}SOS求救器SOS求救器是通过LED开关两种状态来拼出一个个字母。通过长闪烁和短闪烁来表示点和横杠。我们这个项目中,我们就拼写S.O.S这三个字母。通过查阅莫尔斯码表,我们可以知道,字母“S”用三个点表示,我们这里用短闪烁替代,字母“O”则用三个横杠表示,用长闪烁替代。【实验现象】LED灯短闪烁三次,停顿0.1s,长闪烁3次,停顿0.1s,再短闪烁三次,停顿五秒,最后循环整个程序。【试验线路图】按图连接好线路图(注意LED灯正负极及接地)注释:蓝线接地(Gnd)红线接10号【程序2-1】intledPin=10;voidsetup(){pinMode(ledPin,OUTPUT);3}voidloop(){//三个快闪烁来表示字母“S”digitalWrite(ledPin,HIGH);//LED亮灯(高电平)delay(150);//延时程序150(150ms)digitalWrite(ledPin,LOW);//LED熄灭(低电平)delay(100);//延时程序150(150ms)digitalWrite(ledPin,HIGH);//同第一段程序注释相同delay(150);digitalWrite(ledPin,LOW);delay(100);digitalWrite(ledPin,HIGH);//同第一段程序注释相同delay(150);digitalWrite(ledPin,LOW);delay(100);delay(100);//100毫秒延时产生字母之间的间隙这是程序S的表示方法,三个短闪烁,然后延时//三个短闪烁来表示字母“O”digitalWrite(ledPin,HIGH);//LED亮灯(高电平)delay(400);//延时程序400(400ms)digitalWrite(ledPin,LOW);//LED熄灭(低电平)delay(100);//延时程序100(100ms)4digitalWrite(ledPin,HIGH);//同第一段程序注释相同delay(400);digitalWrite(ledPin,LOW);delay(100);digitalWrite(ledPin,HIGH);//同第一段程序注释相同delay(400);digitalWrite(ledPin,LOW);delay(100);delay(100);//100毫秒延时产生字母之间的间隙这是程序O的表示方法,三个长闪烁,然后延时//再用三个快闪烁来表示字母“S”digitalWrite(ledPin,HIGH);//LED亮灯(高电平)delay(150);//延时程序150(150ms)digitalWrite(ledPin,LOW);//LED熄灭(低电平)delay(100);//延时程序150(150ms)digitalWrite(ledPin,HIGH);//同第一段程序注释相同delay(150);digitalWrite(ledPin,LOW);delay(100);digitalWrite(ledPin,HIGH);//同第一段程序注释相同delay(150);digitalWrite(ledPin,LOW);5delay(100);这是程序S的表示方法,三个短闪烁,然后延时delay(5000);//在重复S.0.S信号前等待5秒最后延迟5s然后循环程序}这就是一段完整的SOS求救器的程序,在经过电路测试好之后,我们可以简化一下我们的程序,进一步的加深难度。【程序2-2】intledPin=10;voidsetup(){pinMode(ledPin,OUTPUT);}voidloop()//三个快闪烁来表示字母“S”{for(intx=0;x3;x++){digitalWrite(ledPin,HIGH);//设置LED为开delay(150);//延时150毫秒digitalWrite(ledPin,LOW);//设置LED为关delay(100);//延时100毫秒}delay(100);//100毫秒延时产生字母之间的间隙这是程序S的表示方法,三个短闪烁,然后延时//三个短闪烁来表示字母“O”6for(intx=0;x3;x++){digitalWrite(ledPin,HIGH);//设置LED为开delay(400);//延时400毫秒digitalWrite(ledPin,LOW);//设置LED为关delay(100);//延时100毫秒}delay(100);//100毫秒延时产生字母之间的间隙这是程序O的表示方法,三个长闪烁,然后延时//再用三个快闪烁来表示字母“S”for(intx=0;x3;x++){digitalWrite(ledPin,HIGH);//设置LED为开delay(150);//延时150毫秒digitalWrite(ledPin,LOW);//设置LED为关delay(100);//延时100毫秒}这是程序S的表示方法,三个短闪烁,然后延时delay(5000);//在重复S.0.S信号前等待5秒}在输入代码的时候,注意保持代码的一个层次感,除了美观外,也便于你日后检查代码。确认正确后,下载代码到Arduino中,如果一切顺利的话,我们将看到LED闪烁出莫尔斯码S.O.S信号,等待5秒。重复闪烁。给Arduino外接电池,整个装到防水的盒子里,就可以用来发S.O.S信号了。【补充】【for语句格式】for(①循环初始化;②循环条件;③循环调整语句)7{④循环体语句;}For循环顺序第一轮:①→②→③→④第二轮:②→③→④……直到2不成立,for循环结束【比较运行符】==(等于)!=(不等于)(小于)(大于)=(小于等于)=(大于等于)特别要说明一下,等于必须是两个等号。还有像小于等于和大于等于,和=之间不能留有空格,否则编译不通过。当然,除了比较运算符外,程序也可以用的+、-、*、/(加、减、乘、除)这些常用的算术运算符。条件为真8呼吸灯方法一:intpwm=0;//声明pwm变量intPinMode=3;voidsetup(){9Serial.begin(9600);}viodloop(){analongWrite(PinMode,pwm);//设置PWM占空比delay(100);pwm++;//增加输出的PWM占空比}PWM简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种有效技术,这种技术被广泛应用在测量、通信、功率控制与变换的许多领域中。模拟输出用到的函数为analongWrite(pin,value),其中pin是输出的引脚号,value为0~255之间的数值。通过这种函数,硬件PWM通过0~255之间的任一值来编程,其中0为关闭,255为全功率,0~255之间的任意一个值都会产生一个约490HZ的占空比可变的脉冲序列。Arduino软件限制PWM通道为8位计数器。方法二intledPin=10;//将10号端口命名为ledPinvoidsetup(){pinMode(ledPin,OUTPUT);//设置端口的模式为输出模式}voidloop(){10fadeOn(1000,5);//调用fadeOn函数将1000传输nsignedinttime中5传输到intincreament中fadeOff(1000,5);//调用fadeOff函数}voidfadeOn(unsignedinttime,intincreament)//fadeOn函数读取括号中的数值{
for(bytevalue=0;value255;value+=increament)//for循环实现小灯从暗到亮{analogWrite(ledPin,value);//将value的值通过pwm来表示出来delay(time/(255/5));
//每一次循环后等待的时间}}voidfadeOff(unsignedinttime,intdecreament)//fadeOff函数读取括号中的数值{
for(bytevalue=255;value0;value-=decreament)//for循环实现小灯从亮到暗{analogWrite(ledPin,value);//将value的值通过pwm来表示出来11delay(time/(255/5));
//每一次循环后等待的时间}}analogWrite()其作用是给端口写入一个模拟值(PWM波)。可以用来控制LED灯的亮度变化,或者以不同的速度驱动马达。当执行analogWrite()命令后,端口会输出一个稳定的占空比的方波。除非有下一个命令来改变它。PWM信号的频率大约为490Hz.在使用uno的arduino控制板上,其工作在3,5,6,9,10,11端口。在使用analogWrite()命令前,可以不使用pinMode()命令把端口定义为输出端口,当然如果定义了更好,这样利于程序语言规范。语法analogWrite(pin,value)参数pin:写入的端口value:占空比:在0-255之间。注释与已知问题当PWM输出与5,6号端口的时候,会产生比预期更高的占空比。原因是PWM输出所使用的内部时钟,millis()与delay()两函数也在使用。所以要注意使用5,6号端口时,空占比要设置的稍微低一些,或者会产生5,6号端口无12法输出完全关闭的信号。PWM(Pulse-widthmodulation)脉宽调制PWM是使用数字手段来控制模拟输出的一种手段。使用数字控制产生占空比不同的方波(一个不停在开与关之间切换的信号)来控制模拟输出。以本次实验来看,端口的输入电压只有两个0V与5V。如我我想要3V的输出电压怎么办。。。有同学说串联电阻,对滴,这个方法是正确滴。但是如果我想1V,3V,3.5V等等之间来回变动怎么办呢?不可能不停地切换电阻吧。这种情况下。。。就需要使用PWM了。他是怎么控制的呢,对于arduino的数字端口电压输出只有LOW与HIGH两个开关,对应的就是0V与5V的电压输出,咱本把LOW定义为0,HIGH定义为1.一秒内让arduino输出500个0或者1的信号。如果这500个全部为1,那就是完整的5V,如果全部为0,那就是0V。如果010101010101这样输出,刚好一半一半,输出端口就感觉是2.5V的电压输出了。这个和咱们放映电影是一个道理,咱们所看的电影并不是完全连续的,它其实是每秒输出25张图片,在这种情况下人的肉眼是分辨不出来的,看上去就是连续的了。PWM也是同样的道理,如果想要不同的电压,就控制0与1的输出比例控制就ok~当然。。。这和真实的连续输出还是有差别的,单位时间内输出的0,1信号越多,控制的就越精确。在下图中,绿线之间代表一个周期,其值也是PWM频率的倒数。换句话说如果arduinoPWM的频率是500Hz,那么两绿线之间的周期就是2毫秒。analogWrite()命令中可以操控的范围为0-255,analogWrite(255)表示100%占空比(常开),analogWrite(127)占空比大约为50%(一半的时间)。13传统方法实现PWM除了使用analogWrite()命令实现PWM,还可以通过传统方法来控制电平的开关时间来设置。请看如下代码1voidsetup()2{3pi

1 / 31
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功