Arduino学习笔记
镇楼图
Pixiv:ATDAN-
〇、Arduino
软件下载地址:官方
然后准备好开发板(推荐UNO R3)
Arduino开发板分为主板和数据线。只要将数据线连接至电脑,然后从电脑使用Arduino IDE编程实现硬件功能即可
一、基本语法
程序上大体和C/C++相似,这里不做细致的介绍
开发板上端口分为三块区域
■数字输入/输出
■模拟输入
■电源/接地
define、include
#define pin 3
#include
注释
//注释
/*注释*/
程序结构
在刚打开IDE时会出现以下内容
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
setup()函数是指初始化时要执行的代码,即板子每次开机或是复位时要执行的。通常会写上引入库、设置针脚等
loop()函数是在板子开机或复位执行完setup()函数会如其名一样循环执行代码
数据类型
由于涉及到了硬件开发,很容易会发生内存不足的问题
需要根据实际问题灵活选择类型尽量减少占用空间
每个类型后我写明了占用多少字节以及值的范围
/* 整型 */
unsigned char a = 35;
//1B,推荐用byte类型 [0,255]
byte b = 100;
//1B [0,255]
word c = 100;
//2B [0,2^16-1]
short c = 15
//2B [-2^15,2^15-1]
int d = 18;
//2B [-2^15,2^15-1](在Due、SAMD板上占4B)
unsigned int e = 1000;
//2B [0,2^16-1](Due板上占4B)
long f = 32;
//4B [-2^31,2^31-1]
unsigned long g = 64;
//4B [0,2^32-1]
/* 浮点型 */
float a = 1.25;
//4B
double b = 1.35;
//4B (在Due板上占8B)与float一样
/* 布尔型 */
bool a = true;//1B true or false
boolean b = false;//1B true or false
/* 字符型 */
char a = 'A';
//1B 单个字符
char s1[] = "12345";
char s2[3] = {'1','2','3'};
char *string[] = {"123","456","789"};
//字符串,参考C
String stringOne = "Hello String";
String stringOne = String('a');
String stringTwo = String("This is a string");
String stringOne = String(stringTwo + " with more");
String stringOne = String(13);
String stringOne = String(analogRead(0), DEC);
String stringOne = String(45, HEX);
String stringOne = String(255, BIN);
String stringOne = String(millis(), DEC);
String stringOne = String(5.698, 3);
//String对象,参考C++
sizeof(x)
//sizeof返回占用字节数
语句
在Arduino中提供了如下关键字,由于C语言都有且语法一致这里不作介绍
if else
switch case
continue break
for
while do
goto
return//用于函数(不作介绍)返回
操作符
/* 计算 */
+ - *
/ % =
/* 比较 */
!= == >=
<= > <
/* 逻辑 */
! && ||
/* 位 */
& | ~
<< >>
/* 复合 */
++ -- +=
-= *= /=
%= &= |=
作用域
■const(略)
■static(略)
■volatile(后续会详细说明)
强制转换类型
(unsigned int) x
(unsigned long) x
(byte)x /*或*/ byte(x)
(word)x /*或*/ word(x)
(int)x /*或*/ int(x)
(long)x /*或*/ long(x)
(float)x /*或*/ float(x)
(char)x /*或*/ char(x)
二、数字I/O
开发板中有一栏数字信号的区域,这一块函数便是处理数字信号。可以简单的设置通过数字输出来点亮LED灯,加上延时的函数可以实现隔几秒闪烁的功能
至于模拟IO这里就不做介绍,可以查文档,我自己是用数字IO更多
HIGH、LOW常量
数字信号比起模拟信号而言简单太多了
只有HIGH和LOW两种电平信号
如果使用函数设置为HIGH此时针脚接着LED灯那么就会点亮,反之设为LOW便是熄灭
■5V板中,高于3V的电压认为是HIGH,低于1.5V的电压认为是LOW
■3.3V板中,高于2V的电压认为是HIGH,低于1V的电压认为是LOW
pinMode(pin, mode)函数
配置板子某一针脚用于输入输出
Arduino提供了几个常量用于设置mode
■INPUT输入模式
针脚为高阻抗(100MΩ)状态,用于读取信号
■INPUT_PULLUP输入上拉模式
启用板子内置的上拉电阻(详细请参考硬件方面其他知识)
■OUTPUT输出模式
针脚为低阻抗状态,用于输出信号
注:使用INPUT或INPUT_PULLUP模式与开关相连时,为了获得准确信号,一般会连上10KΩ左右的电阻。此外如果与过高的电压相连很可能会损坏板子
LED_BUILTIN
大多数板子上第13位(大概)引脚都内置一LED灯,可以通过常量LED_BUILTIN访问
void setup() {
pinMode(LED_BUILTIN,OUTPUT);
//表示板子上的LED灯设置为输出模式,用于输出信号
}
digitalWrite(pin, value)
作用:在pin针脚上输出信号(HIGH或LOW)
digitalWrite(LED_BUILTIN,HIGH);
//内置LED灯亮
digitalWrite(LED_BUILTIN,LOW);
//内置LED灯灭
digitalRead(pin, value)
作用:读取pin针脚的电压信息
返回:HIGH或LOW
比如现在有电路与按钮相连,当按下按钮时,输入针脚可以返回HIGH信号,此时通过程序使用简单的判断语句实现按下按钮灯亮
byte in = 1;
void setup() {
pinMode(LED_BUILTIN,OUTPUT);
pinMode(in,INPUT_PULLUP);
}
void loop() {
if(digitalRead(in) == LOW) {
digitalWrite(LED_BUILTIN,HIGH);
//当低电平即按下按钮时灯亮
} else {
digitalWrite(LED_BUILTIN,LOW);
//否则灯灭
}
}
三、数学
min(x, y)
作用:返回两者的最小值
max(x, y)
作用:返回两者的最大值
constrain(x,a,b)
作用:约束x于[a,b]内。若低于下限a,返回a;若高于上限b,返回b;若在区间内返回x
abs(x)
作用:返回x的绝对值
pow(base, e)
作用:返回以base为底数e为指数的结果(浮点数)
sqrt(x)
作用:返回x的平方根
map(x, in_min, in_max, out_min, out_max)
作用:等比映射
从一个区间以等比放缩的形式至另外的一个区间
原输入为x,输出=(x-in_min)*映射比
映射比=(in_max-in_min)/(out_max-out_min)
在某些时候等比映射会起到意想不到的效果
sin(x)、cos(x)、tan(x)
作用:三角函数
其他说明:注意是采用角度而非弧度
randomSeed(seed)
作用:初始化随机种子
randomSeed(analogRead(A0));
//一般是与置空的针脚进行初始化以产生随机种子
random(max)、random(min, max)
作用:根据随机种子产生随机整数(long)。不设置min的情况下默认为0,产生\([min, max-1]\)之间的某一整数
参考教程
Arduino语言参考
太极创客 零基础入门学用Arduino 第一部分
太极创客 零基础入门学用Arduino 第二部分
太极创客 零基础入门学用Arduino 第三部分
太极创客