Arduino开发从入门到实战程序源代码.docx

上传人:b****3 文档编号:3497561 上传时间:2022-11-23 格式:DOCX 页数:122 大小:46.63KB
下载 相关 举报
Arduino开发从入门到实战程序源代码.docx_第1页
第1页 / 共122页
Arduino开发从入门到实战程序源代码.docx_第2页
第2页 / 共122页
Arduino开发从入门到实战程序源代码.docx_第3页
第3页 / 共122页
Arduino开发从入门到实战程序源代码.docx_第4页
第4页 / 共122页
Arduino开发从入门到实战程序源代码.docx_第5页
第5页 / 共122页
点击查看更多>>
下载资源
资源描述

Arduino开发从入门到实战程序源代码.docx

《Arduino开发从入门到实战程序源代码.docx》由会员分享,可在线阅读,更多相关《Arduino开发从入门到实战程序源代码.docx(122页珍藏版)》请在冰豆网上搜索。

Arduino开发从入门到实战程序源代码.docx

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;//开灯按钮

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1