查看: 1328|回复: 6
打印 上一主题 下一主题

Arduino,程序设计基础.

[复制链接] qrcode

24

主题

28

帖子

85

积分

注册会员

Rank: 2

积分
85
楼主
跳转到指定楼层
发表于 2014-5-29 10:08 AM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一:Arduino语言

Arduino使用的语言是C/C++编写,但是这2种是有些不同点的语言,C侧重于面向过程编程,而C++侧重于面向对象.早期Arduino使用的库使用的是C语言便携,后来引进C++,现在是C/C++混合编程.


二:Arduino程序结构
Arduin的程序的基本结构由setup()和loop()这两个函数组成.


void setup()
{
//在这里填写setup()函数代码,他只会运行一次
}
void loop()
{
//在这里填写loop()函数代码,他会不断重复执行.
}


2.1
setup()
Arduino控制器通电或者复位后,即会开始执执行setup()函数中的程序,注意:该程序只会执行一次.
一般我们都是在setup中完成Arduino的初始设置,例如I/O口的状态和初始化串口等操作.
2.2
loop()
setup()函数中的程序执行完毕后,Arduino会接着执行loop()函数中的程序.而loop()函数是一个死循环,其中的程序会不断地重复运行.一般我们是在loop()函数种完成程序主要功能,例如驱动各种模块和采集数据.


三:Arduino I/O的简单控制


3.1
数字I/O的使用
(1)数字信号
数字信号以0,1代表不连续信号,也就是以二进制形式表示的信号.在Arduino中数字信号用高低电平来表示,高电平为数字信号1,低电平为数字信号0.
Arduino上每个带有数字编号的引脚都是数字引脚,包括写有”A”编号的模拟输入脚.使用这些引脚可以完成输入/输出数字信号的功能.
在使用输入或输出功能前,需要先通过pinMode()函数配置引脚的模式为输入模式或输出模式

pinMode(pin,mode);

配置为输出之后还需要使用digitalWrite()函数使该引脚输出高电平或者低电平,起形式为:
digitalWrite(pin,value);
其中pin位指定输出的引脚编号.参数Value为指定输出的电平,使用HINGH为高电平,LOW为低电平.(Arduino中高电平为5V,低电平位0V)
除了用于输出信号外,还可以用digitalRead()函数读取外部输入的数字信号 其调用形势 为
digitalRead(pin);
其中参数pin为指定读取状态的引脚编号.
当Arduino以5V供电时,会将范围为-0.5~1.5V输入电压作为低电平,将3~5.5V输入电压作为高电平识别,所以即使输入电压不太准确时 Arduino也可以正常识别 注意:过高 输入电压会损坏Arduino.
在Arduino核心库中 OUTPUT被定义为1,INPUT被定义为O,HIGH被定义为1,LOW被定义为0,.因此也可以用数字代替高/低电平.如
pinMode(13,1);
digitalWrite(13,1);


学以致用,学习完上面后,
开始流水灯实验
(1)实验所需材料
Arduino UNO 控制板 面包板 6个LED 6个220欧的电阻
(2)链接示意图
(这款软件叫Fritzing)
(3)代码:
void setup()
{
//初始化I/O,定义2-8引脚都为输出模式,这里引用了一个For循环语句,就不用定义7次了
for(int i=2;i<8;i++)
pinMode(i,OUTPUT);
}

void loop
{
//从引脚2-7,逐个点亮LED,等待一秒再熄灭LED
for(int i=2;i<7;i++)
{
digitalWrite(i,HIGH);
delay(1000);
digitalWrite(i,LOW);
}
//从7-2引脚,逐个点亮LED,等待一秒在熄灭LED
for(int=7;i>2;i--)
{
digitalWrite(i,HIGH);
delay(1000);
digitalWrite(i,LOW);
}
}


3,按键控制LED实验
材料:UNO控制板,面包板,1个LED,1个按键,1个220欧电阻,1个10K电阻
连接图:


说明:
实验中使用的220和10K的电阻的作用分别是限流和下拉
①限流电阻:
一般LED最大承受电流为25ma,若直接将LED链接在电路中易造成烧毁
②下拉电阻:
在Arduino 控制器的2号引脚到GND之前,连接了一个阻值很大的电阻.若没有该电阻,当按下按钮时,2号引脚会一直悬空,此时使用digitalRead()函数读取2号引脚的状态会得到一个不稳定的值(可能高,可能低),添加R1电阻到GND就是为了稳定引脚,当该引脚悬空时,就会设别为低电平.这种将某节点通过电阻接地的做法叫做下拉,这个电阻也叫下拉电阻.

代码:
//设置各引脚别名
const int buttonPin = 2;
const int ledPin = 13;
//定义变量
int button State = 0;

void setup()
{
//初始化LED引脚为输出模式
pinMode(ledPin,OUTPUT);
//初始化按键引脚为输入模式
pinMode(buttonPin,INPUT);
}

void loop()
{
//读取按键状态并储存在变量中
buttonState = digitalRead(buttonPin);
//检查按键是否被按下
//如果按下,则buttonState应该为高电平
if (buttonState ==HIGH)
{
//点亮LED
digitalWrite(ledPin,HIGH);
}
else
{
//熄灭LED
digitalWrite(ledpin,LOW);
}
}

2.5.2 项目人体感应灯(继电器模块与数字传感器)
(1)继电器模块:
实在找不到图了,就用这个四路继电器模块.原理自行百度 我这里就不做过多解释

(2):人体热释电红外传感器


人体热释电红外传感器是一种对人体辐射出的红外线敏感的传感器.当无人在其检测范围内运动时,模块保持输出低电平;当有人在其检测范围内运动时,模块输出一个高电平脉冲信号.
(3)链接示意图
人体热释电红外传感器的OUT引脚链接到Arduino的2号引脚,继电器的控制信号引脚连接到Arduino的3号引脚.




(4)代码
int PIRpin = 2;
int RELAYpin = 3;
void setup()
{
Serial.begin(9600);
pinMode(PIRpin,INPUT);
pinMode(RELAYpin,OUTPUT);
}
void loop()
{
//等待传感器检测到人
while(!digitalRead(PIRpin))
//将灯打开20秒,然后关闭
Serial.println("turn on");
digitalWrite(RELAYpin,HIGH);
delay(10000);
digitalWrite(RELAYpin,LOW);
Serial.println("turn off");
}


下载完程序后 打开端口监视器当有人走过的时候 灯会打开,串口输出 turn on的提示 反之会出现 turn off.


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

101

帖子

26

积分

新手上路

Rank: 1

积分
26
沙发
发表于 2014-5-29 10:13 AM | 只看该作者

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

1

主题

80

帖子

5

积分

新手上路

Rank: 1

积分
5
板凳
发表于 2014-5-29 10:14 AM | 只看该作者
支持!@
回复 支持 反对

使用道具 举报

45

主题

354

帖子

605

积分

高级会员

Rank: 4

积分
605
地板
发表于 2014-5-29 10:45 AM | 只看该作者

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

1

主题

101

帖子

19

积分

新手上路

Rank: 1

积分
19
5#
发表于 2014-5-29 07:39 PM | 只看该作者
哈哈~~
回复 支持 反对

使用道具 举报

321

主题

418

帖子

993

积分

禁止访问

积分
993
6#
发表于 2015-4-28 04:55 PM | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

2

主题

95

帖子

44

积分

新手上路

Rank: 1

积分
44
7#
发表于 2015-5-4 11:21 PM | 只看该作者
谢谢分享顶一个
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表