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

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

程序源码

第五章炫酷LED灯

5.4.2 程序源码

//项目一——LED闪烁灯

int LEDPin=13;

void setup()

{

pinMode(LEDPin,OUTPUT); //13脚设置为输出

}

void loop()

{

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脚

int LED1 = 1;

int LED2 = 2;

int LED3 = 3;

int LED4 = 4;

int LED5 = 5;

int LED6 = 6;

//LED灯花样显示样式1子程序

void style_1(void)

{

unsigned char j;

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

}

}

//灯闪烁子程序

void flash(void)

{

unsigned char j,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子程序

void style_2(void)

{

unsigned char j,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子程序

void style_3(void)

{

unsigned char j,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

}

}

void setup()

{

unsigned char i;

for(i=1;i=6;i++) //依次设置1~6个数字引脚为输出模式pinMode(i,OUTPUT); //设置第i个引脚为输出模式

}

void loop()

{

style_1(); //样式1

flash(); //闪烁

style_2(); //样式2

flash(); //闪烁

style_3(); //样式3

flash(); //闪烁

第六章按键开关输入

6.4.2程序源码

int LED = 13; //设置控制LED的数字I/O脚

void setup()

{

pinMode(LED,OUTPUT); //设置数字I/O引脚为输出模式

}

void loop() {

int i;

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拓展实验

#define LED 13

#define sw 7

int val=0;

int old_val=0;

int state=0; //定义状态位

void setup(){

pinMode(LED,OUTPUT);

pinMode(sw,INPUT);

}

void loop(){

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程序源码

#define LED 13 //设置控制LED的数字I/O脚

void setup()

{

pinMode(LED,OUTPUT); //设置数字I/O引脚为输出模式

}

void loop() {

int i;

while(1)

{

i=digitalRead(10); //读取电压值

if(i==LOW) //如果为低电平

digitalWrite(LED,HIGH); //设置第13引脚为高电平,点亮LED灯

else

digitalWrite(LED,LOW); //设置第13引脚为低电平,熄灭LED灯

}

}

7.6拓展实验

#define LED 13 //设置控制LED的数字I/O脚

void setup()

{

pinMode(LED,OUTPUT); //设置数字I/O引脚为输出模式

}

void loop() {

int i;

digitalWrite(LED,LOW);

i=digitalRead(10); //读取电压值

if(i==LOW){ //如果为低电平

while(1){

digitalWrite(LED,HIGH); //设置第13引脚为高电平,点亮LED灯 delay(10000);

break;

}

}

}

第8章温度与湿度监测

8.4.2程序源码

#define DHT11_PIN 0

byte read_dht11_dat() //读取DHT11数据(每次获取8位) {

byte i = 0;

byte result = 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)));

}

return result; //返回获取的结果

}

void setup()

{

DDRC|=_BV(DHT11_PIN);

PORTC|=_BV(DHT11_PIN);

Serial.begin(19200);

Serial.println("Ready"); //串口输出提示信息

}

void loop()

{

byte dht11_dat[5];

byte dht11_in;

byte i;

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("dht11 start condition 1 not met");

return;

}

delayMicroseconds(80);

dht11_in=PINC & _BV(DHT11_PIN);

if(!dht11_in)

{

Serial.println("dht11 start condition 2 not met");

return;

}

delayMicroseconds(80);

for(i=0;i<5;i++)

dht11_dat[i]=read_dht11_dat(); //获取40位温度与湿度数据

DDRC|=_BV(DHT11_PIN);

PORTC|=_BV(DHT11_PIN);

byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat [3];

if(dht11_dat[4]!=dht11_check_sum)//校验

{

Serial.println("DHT11 checksum error");

}

Serial.print("Current humdity= ");

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拓展实验

#define DHT11_PIN 0

int LED=8;

int Buzzer=7;

byte read_dht11_dat()

{

byte i = 0;

byte result = 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)));

}

return result;

}

void setup()

{

DDRC|=_BV(DHT11_PIN);

PORTC|=_BV(DHT11_PIN);

pinMode(LED,OUTPUT);

pinMode(Buzzer,OUTPUT);

Serial.begin(19200);

Serial.println("Ready");

}

void loop()

{

byte dht11_dat[5];

byte dht11_in;

byte i;

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("dht11 start condition 1 not met"); return;

}

delayMicroseconds(80);

dht11_in=PINC & _BV(DHT11_PIN);

if(!dht11_in)

{

Serial.println("dht11 start condition 2 not met");

return;

}

delayMicroseconds(80);

for(i=0;i<5;i++) //获取40位温度与湿度数据

dht11_dat[i]=read_dht11_dat();

DDRC|=_BV(DHT11_PIN);

PORTC|=_BV(DHT11_PIN);

byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat [3];

if(dht11_dat[4]!=dht11_check_sum) //校验

{

Serial.println("DHT11 checksum error");

}

Serial.print("Current humdity= ");

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程序源码

void setup()

{

Serial.begin(9600);

}

void loop()

{

int val;

val=analogRead(0); //获取当前气体浓度Serial.println(val,DEC); //十进制串口输出delay(1000);

}

第十章 LCD显示

10.4程序设计

2) 实验程序

LCD显示实验参考程序源代码为:

int DI=12;

int RW=11;

int DB[]={3,4,5,6,7,8,9,10}; //使用数组来定义总线需要的引脚

int Enable=2;

void LcdCommandWrite(int value) {

//定义所有引脚

int i = 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 }

void LcdDataWrite(int value) { //定义所有引脚

int i = 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 }

void setup (void) {

int i = 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);

}

void loop (void) {

LcdCommandWrite(0x01); //屏幕清空,光标位置归零delay(10);

LcdCommandWrite(0x80+4);

delay(10);

//写入欢迎信息

LcdDataWrite('W');

LcdDataWrite('e');

相关主题
相关文档
最新文档