Arduino开发从入门到实战程序源代码.docx
《Arduino开发从入门到实战程序源代码.docx》由会员分享,可在线阅读,更多相关《Arduino开发从入门到实战程序源代码.docx(122页珍藏版)》请在冰豆网上搜索。
Arduino开发从入门到实战程序源代码
程序源码
第五章炫酷LED灯
5.4.2程序源码
//项目一——LED闪烁灯
intLEDPin=13;
voidsetup()
{
pinMode(LEDPin,OUTPUT);//13脚设置为输出
}
voidloop()
{
digitalWrite(LEDPin,HIGH);//设定PIN13脚为HIGH=5V左右
delay(1000);//设定延时时间,1000=1s
digitalWrite(LEDPin,LOW);//设定PIN13脚为LOW=0V
delay(1000);//设定延时时间,1000=1s
}
5.7拓展实验
广告灯拓展实验参考程序为:
//设置控制LED的数字I/O脚
intLED1=1;
intLED2=2;
intLED3=3;
intLED4=4;
intLED5=5;
intLED6=6;
//LED灯花样显示样式1子程序
voidstyle_1(void)
{
unsignedcharj;
for(j=1;j=6;j++)//每隔200ms依次点亮1~6引脚相连的LED灯
{
digitalWrite(j,HIGH);//点亮与j引脚相连的LED灯
delay(200);//延时200ms
}
for(j=6;j=1;j--)//每隔200ms依次熄灭与6~1引脚相连的LED灯
{
digitalWrite(j,LOW);//熄灭与j引脚相连的LED灯
delay(200);//延时200ms
}
}
//灯闪烁子程序
voidflash(void)
{
unsignedcharj,k;
for(k=0;k=1;k++)//闪烁两次
{
for(j=1;j=6;j++)//点亮与1~6引脚相连的LED灯
digitalWrite(j,HIGH);//点亮与j引脚相连的LED灯
delay(200);//延时200ms
for(j=1;j=6;j++)//熄灭与1~6引脚相连的LED灯
digitalWrite(j,LOW);//熄灭与j引脚相连的LED灯
delay(200);//延时200ms
}
}
//LED灯花样显示样式2子程序
voidstyle_2(void)
{
unsignedcharj,k;
k=1;//设置k的初值为1
for(j=3;j=1;j--)
{
digitalWrite(j,HIGH);//点亮灯
digitalWrite(j+k,HIGH);//点亮灯
delay(400);//延时400ms
k+=2;//k值加2
}
k=5;//设置k值为5
for(j=1;j=3;j++)
{
digitalWrite(j,LOW);//熄灭灯
digitalWrite(j+k,LOW);//熄灭灯
delay(400);//延时400ms
k-=2;//k值减2
}
}
//LED灯花样显示样式3子程序
voidstyle_3(void)
{
unsignedcharj,k;//LED灯花样显示样式3子程序
k=5;//设置k值为5
for(j=1;j=3;j++)
{
digitalWrite(j,HIGH);//点亮灯
digitalWrite(j+k,HIGH);//点亮灯
delay(400);//延时400ms
digitalWrite(j,LOW);//熄灭灯
digitalWrite(j+k,LOW);//熄灭灯
k-=2;//k值减2
}
k=3;//设置k值为3
for(j=2;j=1;j--)
{
digitalWrite(j,HIGH);//点亮灯
digitalWrite(j+k,HIGH);//点亮灯
delay(400);//延时400ms
digitalWrite(j,LOW);//熄灭灯
digitalWrite(j+k,LOW);//熄灭灯
k+=2;//k值加2
}
}
voidsetup()
{
unsignedchari;
for(i=1;i=6;i++)//依次设置1~6个数字引脚为输出模式
pinMode(i,OUTPUT);//设置第i个引脚为输出模式
}
voidloop()
{
style_1();//样式1
flash();//闪烁
style_2();//样式2
flash();//闪烁
style_3();//样式3
flash();//闪烁
第六章按键开关输入
6.4.2程序源码
intLED=13;//设置控制LED的数字I/O脚
voidsetup()
{
pinMode(LED,OUTPUT);//设置数字I/O引脚为输出模式
}
voidloop(){
inti;
while
(1)
{
i=analogRead(A0);//读取模拟0口电压值
if(i>1000)//如果电压值大于1000(即4.88V)
digitalWrite(LED,HIGH);//设置第13引脚为高电平,点亮LED灯
else
digitalWrite(LED,LOW);//设置第13引脚为低电平,熄灭LED灯
}
}
6.6拓展实验
#defineLED13
#definesw7
intval=0;
intold_val=0;
intstate=0;//定义状态位
voidsetup(){
pinMode(LED,OUTPUT);
pinMode(sw,INPUT);
}
voidloop(){
val=digitalRead(sw);
if((val==HIGH)&&(old_val==LOW)){
state=1-state;//状态位取反
delay(10);
}
old_val=val;
if(state==1){
digitalWrite(LED,HIGH);
}
else{
digitalWrite(LED,LOW);
}
}
第七章触摸开关
7.4.2程序源码
#defineLED13//设置控制LED的数字I/O脚
voidsetup()
{
pinMode(LED,OUTPUT);//设置数字I/O引脚为输出模式
}
voidloop(){
inti;
while
(1)
{
i=digitalRead(10);//读取电压值
if(i==LOW)//如果为低电平
digitalWrite(LED,HIGH);//设置第13引脚为高电平,点亮LED灯
else
digitalWrite(LED,LOW);//设置第13引脚为低电平,熄灭LED灯
}
}
7.6拓展实验
#defineLED13//设置控制LED的数字I/O脚
voidsetup()
{
pinMode(LED,OUTPUT);//设置数字I/O引脚为输出模式
}
voidloop(){
inti;
digitalWrite(LED,LOW);
i=digitalRead(10);//读取电压值
if(i==LOW){//如果为低电平
while
(1){
digitalWrite(LED,HIGH);//设置第13引脚为高电平,点亮LED灯
delay(10000);
break;
}
}
}
第8章温度与湿度监测
8.4.2程序源码
#defineDHT11_PIN0
byteread_dht11_dat()//读取DHT11数据(每次获取8位)
{
bytei=0;
byteresult=0;
for(i=0;i<8;i++)
{
while(!
(PINC&_BV(DHT11_PIN)));
delayMicroseconds(30);
if(PINC&_BV(DHT11_PIN))
result|=(1<<(7-i));
while((PINC&_BV(DHT11_PIN)));
}
returnresult;//返回获取的结果
}
voidsetup()
{
DDRC|=_BV(DHT11_PIN);
PORTC|=_BV(DHT11_PIN);
Serial.begin(19200);
Serial.println("Ready");//串口输出提示信息
}
voidloop()
{
bytedht11_dat[5];
bytedht11_in;
bytei;
PORTC&=~_BV(DHT11_PIN);
delay(18);
PORTC|=_BV(DHT11_PIN);
delayMicroseconds(40);
DDRC&=~_BV(DHT11_PIN);
delayMicroseconds(40);
dht11_in=PINC&_BV(DHT11_PIN);
if(dht11_in)
{
Serial.println("dht11startcondition1notmet");
return;
}
delayMicroseconds(80);
dht11_in=PINC&_BV(DHT11_PIN);
if(!
dht11_in)
{
Serial.println("dht11startcondition2notmet");
return;
}
delayMicroseconds(80);
for(i=0;i<5;i++)
dht11_dat[i]=read_dht11_dat();//获取40位温度与湿度数据
DDRC|=_BV(DHT11_PIN);
PORTC|=_BV(DHT11_PIN);
bytedht11_check_sum=dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];
if(dht11_dat[4]!
=dht11_check_sum)//校验
{
Serial.println("DHT11checksumerror");
}
Serial.print("Currenthumdity=");
Serial.print(dht11_dat[0],DEC);//显示湿度整数部分
Serial.print(".");
Serial.print(dht11_dat[1],DEC);//显示湿度小数部分
Serial.print("%");
Serial.print("temperature=");
Serial.print(dht11_dat[2],DEC);//显示温度整数部分
Serial.print(".");
Serial.print(dht11_dat[3],DEC);//显示温度小数部分
Serial.println("C");
}
8.6拓展实验
#defineDHT11_PIN0
intLED=8;
intBuzzer=7;
byteread_dht11_dat()
{
bytei=0;
byteresult=0;
for(i=0;i<8;i++)
{
while(!
(PINC&_BV(DHT11_PIN)));
delayMicroseconds(30);
if(PINC&_BV(DHT11_PIN))
result|=(1<<(7-i));
while((PINC&_BV(DHT11_PIN)));
}
returnresult;
}
voidsetup()
{
DDRC|=_BV(DHT11_PIN);
PORTC|=_BV(DHT11_PIN);
pinMode(LED,OUTPUT);
pinMode(Buzzer,OUTPUT);
Serial.begin(19200);
Serial.println("Ready");
}
voidloop()
{
bytedht11_dat[5];
bytedht11_in;
bytei;
PORTC&=~_BV(DHT11_PIN);
delay(18);
PORTC|=_BV(DHT11_PIN);
delayMicroseconds(40);
DDRC&=~_BV(DHT11_PIN);
delayMicroseconds(40);
dht11_in=PINC&_BV(DHT11_PIN);
if(dht11_in)
{
Serial.println("dht11startcondition1notmet");
return;
}
delayMicroseconds(80);
dht11_in=PINC&_BV(DHT11_PIN);
if(!
dht11_in)
{
Serial.println("dht11startcondition2notmet");
return;
}
delayMicroseconds(80);
for(i=0;i<5;i++)//获取40位温度与湿度数据
dht11_dat[i]=read_dht11_dat();
DDRC|=_BV(DHT11_PIN);
PORTC|=_BV(DHT11_PIN);
bytedht11_check_sum=dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];
if(dht11_dat[4]!
=dht11_check_sum)//校验
{
Serial.println("DHT11checksumerror");
}
Serial.print("Currenthumdity=");
Serial.print(dht11_dat[0],DEC);//显示湿度整数部分
Serial.print(".");
Serial.print(dht11_dat[1],DEC);//显示湿度小数部分
Serial.print("%");
Serial.print("temperature=");
Serial.print(dht11_dat[2],DEC);//显示温度整数部分
Serial.print(".");
Serial.print(dht11_dat[3],DEC);//显示温度小数部分
Serial.println("C");
if(dht11_dat[0]==25)
digitalWrite(LED,HIGH);
else
digitalWrite(LED,LOW);
if(dht11_dat[2]==28)
digitalWrite(Buzzer,HIGH);
else
digitalWrite(Buzzer,LOW);
delay(2000);
}
第9章气体监测
9.4.2程序源码
voidsetup()
{
Serial.begin(9600);
}
voidloop()
{
intval;
val=analogRead(0);//获取当前气体浓度
Serial.println(val,DEC);//十进制串口输出
delay(1000);
}
第十章LCD显示
10.4程序设计
2)实验程序
LCD显示实验参考程序源代码为:
intDI=12;
intRW=11;
intDB[]={3,4,5,6,7,8,9,10};//使用数组来定义总线需要的引脚
intEnable=2;
voidLcdCommandWrite(intvalue){
//定义所有引脚
inti=0;
for(i=DB[0];i<=DI;i++)//总线赋值
{
digitalWrite(i,value&01);//因为1602液晶信号识别是D7~D0(不是D0~D7),这里是
//用来反转信号
value>>=1;
}
digitalWrite(Enable,LOW);
delayMicroseconds
(1);
digitalWrite(Enable,HIGH);
delayMicroseconds
(1);//延时1ms
digitalWrite(Enable,LOW);
delayMicroseconds
(1);//延时1ms
}
voidLcdDataWrite(intvalue){
//定义所有引脚
inti=0;
digitalWrite(DI,HIGH);
digitalWrite(RW,LOW);
for(i=DB[0];i<=DB[7];i++)
{
digitalWrite(i,value&01);
value>>=1;
}
digitalWrite(Enable,LOW);
delayMicroseconds
(1);
digitalWrite(Enable,HIGH);
delayMicroseconds
(1);
digitalWrite(Enable,LOW);
delayMicroseconds
(1);//延时1ms
}
voidsetup(void){
inti=0;
for(i=Enable;i<=DI;i++)
{
pinMode(i,OUTPUT);
}
delay(100);
//短暂的停顿后初始化LCD
用于LCD控制需要
LcdCommandWrite(0x38);//设置为8位接口,2行显示,5×7文字大小
delay(64);
LcdCommandWrite(0x38);//设置为8位接口,2行显示,5×7文字大小
delay(50);
LcdCommandWrite(0x38);//设置为8位接口,2行显示,5×7文字大小
delay(20);
LcdCommandWrite(0x06);//输入方式设定
//自动增量,没有显示移位
delay(20);
LcdCommandWrite(0x0E);//显示设置
//开启显示屏,光标显示,无闪烁
delay(20);
LcdCommandWrite(0x01);//屏幕清空,光标位置归零
delay(100);
LcdCommandWrite(0x80);//显示设置
//开启显示屏,光标显示,无闪烁
delay(20);
}
voidloop(void){
LcdCommandWrite(0x01);//屏幕清空,光标位置归零
delay(10);
LcdCommandWrite(0x80+4);
delay(10);
//写入欢迎信息
LcdDataWrite('W');
LcdDataWrite('e');
LcdDataWrite('l');
LcdDataWrite('c');
LcdDataWrite('o');
LcdDataWrite('m');
LcdDataWrite('e');
LcdDataWrite('!
');
delay(10);
LcdCommandWrite(0xc0);//定义光标位置为第2行第1个位置
delay(10);
LcdDataWrite('I');
LcdDataWrite('');
LcdDataWrite('L');
LcdDataWrite('o');
LcdDataWrite('v');
LcdDataWrite('e');
LcdDataWrite('');
LcdDataWrite('A');
LcdDataWrite('r');
LcdDataWrite('d');
LcdDataWrite('u');
LcdDataWrite('i');
LcdDataWrite('n');
LcdDataWrite('o');
LcdDataWrite('!
');
delay(5000);
}
第11章电机控制
11.4
2)步进电机实验程序
#include
//这里设置步进电机旋转一圈是多少步
#defineSTEPS100
//attachedto设置步进电机的步数和引脚
Stepperstepper(STEPS,8,9,10,11);
//定义变量用来存储历史读数
intprevious=0;
voidsetup()
{
//设置电机每分钟的转速为90步
stepper.setSpeed(90);
}
voidloop()
{
intval=analogRead(0);
//移动步数为当前读数减去历史读数
stepper.step(val-previous);
//保存历史读数
previous=val;
}
11.6
voidsetup(){
//初始化数字的引脚为输出
pinMode(13,OUTPUT);
pinMode(12,OUTPUT);
}
voidloop(){
digitalWrite(13,HIGH);
digitalWrite(12,HIGH);
delay(50);
digitalWrite(13,LOW);
digitalWrite(12,LOW);
delay(200);
}
第12章
第12章蓝牙通信
12.4程序设计
voidsetup()
{
Serial.begin(9600);
}
voidloop()
{
while(Serial.available())
{
charc=Serial.read();
if(c=='A')
{
Serial.println("HelloIamamarino");
}
}
}
第13章Wi-Fi无线数据传输
13.4程序设计
voidsetup()
{
Serial.begin(9600);
}
voidloop(){
Serial.println("HelloWorld!
");
delay(1000);
}
第14章
第14章ZigBee无线数据传输
14.4程序设计
ZigBee无线通信实验参考程序源代码分为主机程序和从机程序两部分。
1)主机程序
intbutton_open=4;//开灯按钮