Arduino学习
1. 入门
- 数字IO
- 模拟IO
- 串口IO
输入设备 Input
开关功能:某种状态下接通电路
类型:数字输入(开或关)电位计功能:调节旋转程度
类型:模拟输入(旋转不同值不同)蓝牙从功能:无线接收数据
类型:串口输入(向Arduino发送信息)
输出设备 Output
LED功能:指示亮或灭
类型:数字输出马达功能:转动
类型:模拟输出(调整转速)蓝牙主功能:无线发送数据
类型:串口输出
1.1 注释
/* */
注释int a = 0;
要有分号结尾
1 | void setup() { |
1.2 变量
变量类型
int 变量名
整数 ,默认值为0
int current_temperature
cdu为整数变量int current_temperature = 18
赋值
整数的范围为-32,768到32,767,超过上限,返回到最下限
1.2.1 变量的作用域
全局变量 setup和loop外
局部变量 setup中或loop中,两个不同函数中,不能互相使用
1.3 函数
pinMode(LED_BUILTIN,OUTPUT);
初始化led数字引脚为输出模式pinMode(13,OUTPUT)
如果UNO中LED接的引脚为13,也可以这样写digitalWrite(LED_BUILTIN,HIGH);
将数字引脚写为高电平 /亮digitalWrite(LED_BUILTIN,LOW);
将数字引脚写为低电平 /灭delay(1000);
延时等待1秒
1.4 数字输出
LED发光二极管
OUTPUT
1.5 数字输入
开关,输入信号
INPUT,识别HIGH和LOW两种状态
引脚悬空floating
int pushButton = 2;
给引脚2取一个名字pinMode(pushButton,INPUT);
初始化2数字引脚为输入模式
Serial.begin(9600);
启动串口通讯 ,每秒9600位Serial.println(button);
显示按键状态
int buttonState = digitalRead(pushButton);
digitalRead(被读引脚号码)
读取数字引脚的电平状态,返回HIGH/LOW值,1/0
1.6 输入上拉模式
INPUT_PULLUP
1 | pinMode(2, INPUT_PULLUP); - 2引脚为开关输入上拉 |
int sensorVal = digitalRead(2)
将开关状态数值读取到变量中
上拉模式:开关断开-高电平,开关闭合-低电平
sensorVal 高电平 - 开关断开 - 13输出LOW
1 | if (sensorVal == HIGH) { |
关系运算符 : ==
等于 !=
不等于
1.7 boolean运算符
&&
与 、 ||
或 、 !
非
非1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17boolean pushButton;
void setup() {
pinMode(2,INPUT_PULLUP);
pinMode(13,OUTPUT);
}
void loop() {
pushButton = digitalRead(2);
/*逻辑非运算*/
if (!pushButton) {
digitalWrite(13, HIGH); /*pushButton 为false ,则点亮LED*/
} else {
digitalWrite(13, LOW);
}
}
/*if括号中如果为1.运行if后程序,如果为0,则运行else*/
与 : 都真,才真1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18boolean pushButton1;
boolean pushButton2;
void setup() {
pinMode(2,INPUT_PULLUP);
pinMode(8,INPUT_PULLUP);
pinMode(13,OUTPUT);
}
void loop() {
pushButton1 = digitalRead(2);
pushButton2 = digitalRead(8);
/*逻辑与运算*/
if (!pushButton1 && !push Button) {
digitalWrite(13, HIGH); /*1和2都是1,才会点亮*/
} else {
digitalWrite(13, LOW);
}
}
或 :只要有一个为真,就是真
1.8 LED数码管
一位8段共阴极数码管
不同引脚给出高电平,就能显示不同的数字
2. 基础知识学习
2.1 循环
1 | int pinNumber = 3; |
1 | for (int brightness = 0 ; brightness <=255 ; brightness++) { |
2.2 if
1 | if (!pushButton) { |
2.3 switch…case
1 | switch (var) { |
2.4 random()
random(0,4)
0/1/2/3随机数
2.5 自定义函数
不带参数1
2
3
4
5
6
7
8
9
10void displayClear() {
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
}
displayClear() /*调用函数*/
带参数1
2
3
4
5
6
7
8
9
10void displayNumber(int ledNumber) {
语句
}
void displayNumber(int ledNumber , long ledNumber2) {
语句
}
/*调用*/
displayNumber(myNumber);
带参数,带返回值1
2
3
4
5
6
7
8
9int getRandomNumber(int minNumber, int maxNumber){
int randomNumber;
randomNumber = random(minNumber, maxNumber);
return randomNumber
}
/*返回randomNumber*/
return ;
/*返回0*/
randomSeed(analogRead(A0))
来自A0引脚模拟输入的数值作为随机种子
2.6 串口监视器
1 | Serial.begin(9600); |
2.7 模拟输出
可以不用pinMode()
analogWrite(ledPin, brightness)
analogWrite(引脚编号, 参数)
2.8 PWM
analogWrite(ledPin, 127)
50%亮度
2毫秒内,50%高电平,50%低电平
PWM脉冲宽度调制
2.9 电位器模拟输入
电位器,旋钮改变R1,R2比值
R1 + R2 = 固定值
3个引脚,1接地,2接输入引脚,3接5V引脚
旋钮旋转来改变第2引脚的电位,
analogRead(引脚号码)
analogRead(A0)
读取模拟输入引脚数值,将0-5V的电压输入信号映射到数值0-1023
将5V分为1024份, 2.5V 对应数值 512
引脚输入范围可以使用analogReference()进行调整
2.10 等比映射
map(analogInputVal, 0 ,1023 , 0 , 255);
将0-1023映射到0-255
3. 模块学习
3. ESP8266入门
使用arduino研究esp8266