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 第三部分

太极创客