Share&Joy

Ginger' Blog


  • 首页
  • 归档
  • 标签
  •   

© 2018 1-riverfish

Theme Typography by Makito

Proudly published with Hexo

Arduino学习笔记2

发布于 2017-08-12 tech arduino 

Arduino学习笔记–2

实例3 颜色渐变LED灯

原理:数字引脚只能输出高电平HIGH或低电平LOW两种,但是通过脉冲宽度调制(Pulse Width Modulation简称PWM)就能让数字端口模拟输出多级的电压(通常是0级~255级,0级代表没有,255级代表最高电压)。

UNO板上具有PWM(Pulse Width Moudulation)功能 的IO口:D3 D5 D6 D9 D10 D11(引脚数字旁边有个 ~ )

参考博客

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
int ledPin1=5;
int ledPin2=6;
void setup() {
// put your setup code here, to run once:
pinMode(ledPin1,OUTPUT);
pinMode(ledPin2,OUTPUT);
//Serial.begin(9600);
}

void loop() {
// put your main code here, to run repeatedly:

for(int level=0;level<256;level++)
{
analogWrite(ledPin1,level);
delay(10);
}
for(int level=255;level>=0;level--)
{
analogWrite(ledPin1,level);
delay(10);
}
for(int level=0;level<256;level++)
{
analogWrite(ledPin2,level);
delay(10);
}
for(int level=255;level>=0;level--)
{
analogWrite(ledPin2,level);
delay(10);
}
}

串口连接通信模块

抱歉文章结构组织的不好,下边将控制器连接到蓝牙模块需要一些基础

UNO的串口

开发板与任何通信模块的数据交换都是通过这些串口(Serial)来完成的

每一个串口都有一个Tx(Transmit Data) Rx(Receive Data)引脚组成。

注意:开发板与外接模块相连的时候,Tx连到另一端的Rx,并且VC(+)/GND(-)不能和Tx/Rx接反了*3 重要的事情说三遍,否则会烧坏模块

实例4 跑马灯

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int startPin=2;
int endPin=4;
int index =0;
void setup() {
// put your setup code here, to run once:
for(int i=startPin;i<=endPin;i++)
{
pinMode(i,OUTPUT);
}//IO口全部设置为输出模式
}

void loop() {
// put your main code here, to run repeatedly:
for(int i=startPin;i<=endPin;i++)
{
digitalWrite(i,LOW);
}//led灯全部熄灭
digitalWrite(startPin+index,HIGH);
index=(index+1) % (endPin-startPin+1);
delay(100);
}

实例5 Arduino的串口输入

实例效果:在Arduino的IDE中打开串口监视器并将波特率设置为9600,然后向Arduino模块发送字符h ,LED依次亮起

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
int startPin=2;
int endPin=4;
int index =0;
int val;
void setup() {
// put your setup code here, to run once:
for(int i=startPin;i<=endPin;i++)
{
pinMode(i,OUTPUT);
}//IO口全部设置为输出模式
Serial.begin(9600);
}

void loop() {
// put your main code here, to run repeatedly:
val=Serial.read();
if(-1!=val)
{
if('h'==val)
{
for(int c=0;c<=2;c++)
{
for(int i=startPin;i<=endPin;i++)
{
digitalWrite(i,LOW);
}//led灯全部熄灭
digitalWrite(startPin+index,HIGH);
index=(index+1) % (endPin-startPin+1);
delay(100);
}
digitalWrite(endPin,LOW);
}
}
}

Serial.read()函数从串口获得数据 函数不阻塞,也就是说不论串口上是否有数据到达,该函数都会立即返回

当串口上有数据到达的时候,该函数的返回值为到达数据的第一个字符的ASCII码;当串口没有数据到达的时候,该函数的返回值为-1

Serial.available()函数的功能是返回串口缓冲区当前剩余的字符的个数

实例6 Arduino的模拟输入

1
2
3
4
5
6
7
8
9
10
int analogPin = A5;
int val = 0;
void setup(){
Serial.begin(9600);
}
void loop(){
val = analogRead(analogPin);
Serial.println(val);
delay(1000);
}

读取模拟数字引脚的整数值 Range from 0 to 1023

注意不要占用串口,否则编译好的程序无法上传 (不要问我怎么知道的)

分享到 

 上一篇: Hexo基本命令 下一篇: Arduino学习笔记1 

© 2018 1-riverfish

Theme Typography by Makito

Proudly published with Hexo