Arduino初级教程

1. Arduino概述

Arduino是一个基于易用硬件和软件的原型平台。由可编程电路板和Arduino IDE的软件组成,将计算机代码写入并上传到物理板。

特点:

  • 板卡读取来自传感器的模拟或者数字输入信号,转换为输出。
  • 通过IDE向板上的微控制器发送一组指令控制板功能。
  • 使用USB线将代码加载到电路板上。

2.Arduino板

板名称 工作电压 时钟速度 数字I/O 模拟输入 PWM UART 编程接口
Arduino UNO R3 5V 16MHZ 14 6 6 1 USB通过ATMega16U2

使用板如下:

组成部件

  • 电源USB:板卡使用PC机的USB线供电。
  • 电源(桶插座):板卡可以直接从交流电源供电。
  • 稳压器:控制提供给板卡的电压,稳定处理器和其他元件的直流电压。
  • 晶体振荡器:晶振协助处理时间问题,在晶体顶部打印的数字是FY16.0000,表明频率是16MHZ。
  • Arduino重置:通过板卡的复位按钮(红色)或者连接到RESET的Arduino引脚上,重置板卡。
  • 引脚(POWER):
  • 3.3V–提供3.3V输出电压
  • 5V–提供5V输出电压
  • GND–将电路接地
  • VVin–从外部电源为板卡供电
  • 模拟引脚
    六个模拟输入引脚,A0到A5。从传感器读取信号,转换为可由微控制器读取的数字值。
  • 微控制器
    是主板的大脑,在国产板卡上已经集成,与原型版略有不同。
  • ICSP引脚
    由MOSI,MISO,SCK,RESET,VCC,GND组成的Arduino的微型编程头。另称SPI(串行外设接口),是输出的扩展。
  • LED指示灯
    标记有“ON”的指示灯,仅仅当Arduino接入电源时亮起。
  • TX和RX LED
    TX(发送)和RX(接收),首先,在数字引脚0和1处,指示引脚负责串行通讯;当发送串行数据时,TX以不同速度闪烁,闪烁速度取决于板卡的波特率,RX在接收时闪烁。
  • 数字I/O
    该板卡有14个数字I/O引脚(6个标“~”的提供PWM(脉宽调制)输出),配置为数字输入引脚,读取逻辑值(0/1);或者作为数字输出引脚,驱动其他模块。
  • AREF
    代表模拟参考,作为设置外部参考电压为模拟输入引脚的上限。

3.Arduino安装

  • USB线
  • 下载Arduino IDE 软件,下载地址:Arduino软件(适用于window系统),其他版本参考官网。官网主界面
  • Arduino使用请参考官网教程。

4.Arduino程序结构

Arduino程序第一个命名为“Sketch”,软件结构包括两个函数:

  • setup()函数
 void setup(){

}

用来初始化变量,引脚模式,启用库。

  • Loop()函数
void loop(){

}

允许程序乱序循环的更改和响应。

5.Arduino数据类型

void Boolean char Unsigned char byte int Unsigned int word
long Unsigned long short float double array String char array String object
  • void
    函数声明,无返回值。
  • Boolean
    保存二值之一(true/false),占一个字节内存。
  • Char
    存储一个字符值,占一个字节内存。可以对ASCII值字符进行算术运算。
  • Unsigned char
    无符号数据类型,占一个字节内存,编码数字为0~255。
  • byte
    存储一个8位无符号数,占一个字节内存,0~255。
  • int
    存储16位值,占两个字节内存,编码-32768-32767的范围。
  • Unsigned int
    存储2字节,编码0~65535的范围。
  • Word
    存储16位无符号数。
  • long
    存储4字节数据,从-2147483648~2147483647.
  • Unsigned long
    存储4字节数据,范围0~4294967295.
  • short
    存储2字节数据,产生-32768~32767的范围。
  • float
    用于近似模拟值和连续值,取值范围为-3.4028235E+38~3.4028235E+38.
  • double
    占4个字节。精度无增益。

6.Arduino变量

  • 局部变量
    在函数或者代码块中声明的变量。只能由函数或者代码块中的语句使用。
  • 形式参数
    作为函数参数的定义。
  • 全局变量
    位于程序顶部,在程序的整个生命周期中保持使用价值,可以被任何函数使用。

7.Arduino运算符

  • 算术运算符
运算符名称 简写 描述
赋值运算符 = 将右值赋给左变量
加号 + 操作数相加
减号 - 第一操作数减去第二操作数
乘号 * 操作数相乘
除号 / 分母除分子
模数 % 求余数
  • 比较运算符
运算符名称 等于 不等于 小于 大于 小于或等于 大于或等于
运算符简写 = != < > <= >=
  • 布尔运算符
运算符名称 and or not
运算符简写 && || !
  • 位运算符
运算符名称 and or xor not shift left shift right
运算符简写 & | ^ ~ << >>
  • 复合运算符
运算符名称 自增 自减 复合加 复合减 复合乘 复合除 复合模数 复合按位或 复合按位与
运算符简写 ++ - - += -= *= /= %= |= &=

8.Arduino控制语句

控制程序执行流程

1 2 3 4 5
if 语句 if…else 语句 if…else if…else 语句 switch case语句 条件运算符?:

9.Arduino循环

1 2 3 4 5
while循环 do…while循环 for循环 嵌套循环 无限循环

10.Arduino函数

定义函数语法:

Return type function name(argument1,...)
{
	staments;
}

11.Arduino字符串及字符串对象

字符串类型:

  • 字符数组,与C语言中的字符串相同。
  • 字符串,允许在草图中使用字符串对象。
    字符串字符数组示例:
void setup(){
	char my_str[]="Hello";
	Serial.begin(9600);
	Seral.println(my_str);
}
void loop(){

}

字符串对象:是一个包含数据和函数的构造,它可以和变量一样被创建并分配一个值或字符串。

  • 创建字符串对象,分配一个值。
String my_str="This is my string.";
Serial.begin(9600);
  • 打印字符串
Serial.println(my_str);
  • 字符串转换
my_str.toUpperCase();
  • 覆盖字符串
my_str = "My new string.";
  • 替换字符串
my_str.replace("string","sketch");
  • 获取字符串长度
Serial.println(my_str.length());

12.Arduino时间函数

1 2 3 4
delay()函数,接收整数参数,是以毫秒为单位的时间 delayMicroseconds()函数,接收单个整数参数(微秒) millis()函数,返回程序运行时的毫秒数 micros()函数,返回运行时间的毫秒数,在70分钟后溢出

13.Arduino数组

数组是连续的相同类型的内存位置,若应用数组中的特定位置或元素,需指定数组名称和数组中特定元素的位置编号。

  • 声明数组
	type arrayName[arraySize];
  • 数组传递给函数
    这个过程中,会传递数组大小,函数可以处理数组中特定数量的元素;数组名称的值是数组第一个元素在内存的地址,被调函数知道数组存储在内存中的位置;整个数组引用传递,单个数组元素按照简单变量的值传递。
    自定义函数头:
void modifyArray(int b[],int arraySize)

函数原型
告诉编译器参数的数量以及参数预期出现的顺序中的每个参数的类型。

void modifyArray(int [], int );
  • 多维数组
    关键特性:指定两个下标,行列分明。其他详见C语言。

14.Arduino函数库

(1)Arduino I/O函数

  • 引脚配置为INPUT
    Arduino引脚默认为输入,不需显示声明为输入,此类引脚为高阻抗状态;输入引脚<=>引脚前面的100兆欧的串联电阻,切换到其他状态非常容易。
	pinMode(pin,INPUT);
  • 上拉电阻(INPUT_PULLUP)
    无输入状态,如果在输入端添加上拉电阻(到5V)或者下拉电阻(接地电阻),则会将输入引脚引导到已知状态。
    传感器连接到配置为INPUT_PULLUP的引脚,一端接地,HIGH表示传感器关闭,LOW表示传感器开启,引脚处于INPUT模式,配置为上拉电阻导通的引脚被开启,若引脚通过PinMode()切换到OUTPUT模式,引脚配置为高电平;若切换到输入,处于高电平的输出引脚将设置上拉电阻。
  • 引脚配置为OUTPUT
    通过PinMode()配置的引脚处于低阻抗状态,它们可以向其他电路提供大量电流。
  • pinMode()函数
void setup(){
	pinMode(pin,mode);
}

pin - 引脚编号
mode - INPUT / OUTPUT / INPUT_PULLUP

  • digitalWrite()函数
    用于向数字引脚写入HIGH/LOW值。未明确设置PinMode()时,将启用内部上拉电阻。
    如果引脚被设置为OUTPUT,则电压被设置为相应的值:HIGH为5V/3.3V,LOW为0V(接地).
    如果引脚被设置为INPUT,则函数启用(HIGH)或者禁用(LOW)内部上拉电阻。
void loop(){
	digitalWrite(pin,value);
}
  • analogRead()函数
    检测是否有一个电压施加到引脚,通过该函数报告。函数返回0~1023的数字,表示0-5伏特的电压。
	analogRead(pin);

pin - 模拟输入引脚编号,0~5.

  • analogReference()函数
    配置用于模拟输入的参考电压。
	analogReference(type);

type - 可选参数:

  • DEFAULT - 5/3.3V的模拟参考值。
  • INTERNAL - 内置参考
  • INTERNAL1V1 - 内置1.1V参考
  • INTERNAL2V56 - 内置2.56V参考
  • EXTERNAL - 施加到AREF的电压做参考(0~5V),使用前,将模拟参考设置为EXTERNAL.或者通过5K电阻将外部参考电压连接到AREF引脚,允许在外部和内部参考电压之间切换。

(2)Arduino字符函数

1 2 3 4 5 6 7 8 9 10 11
int isdigit(int c)是数字返回1 int isalpha(int c)是字母返回1 int isalnum(int c)是数字或字母返回1 int isxdigit(int c)是十六进制数字字符,返回1 int islower(int c)是小写字母,返回1 int isupper(int c)是大写字母,返回1 int isspace(int c)是空白字符,返回1 int iscntrl(int c)是控制字符,返回1 int ispunct(int c)是打印字符,返回1 int isprint(int c)是包含空格的打印字符,返回1 int isgraph(int c)是不包含空格的打印字符,返回1

(3)Arduino数学库

  • 库函数
库函数 描述
double acos(double_x) acos()函数计算x的反余弦值,取值[0,pi]
double asin(double_ x) asin()函数计算x的反正弦值,取值[-Pi/2,pi/2]
double atan(double_ x) atan()函数计算x的反正切值,取值[-pi/2,pi/2]
double atan2(double_ y,double_ x) atan2()函数计算y/x的反正切值
double cbrt(double_ x) cbrt()函数返回x的立方根
double ceil(double _x) ceil函数返回大于等于x的最小整数值
static double copysign(double _x,double_y) copysign()函数返回x,带有y的符号。
double cos(double _x) cos()函数返回余弦值
double cosh(double _x) cosh()函数返回x的双曲余弦
double exp(double _x) exp()函数返回e的x次幂值
double fabs(double _x) fabs()函数计算浮点数绝对值
double fdim(double _x,double ) fdim()函数返回max(x - y,0)
double floor(double _x) floor()函数返回小于或等于x的最大整数值
double fma(double _x,double _y,double _z) fma()函数执行浮点乘加,即(x*y)+z
double fmax(double _x,double_y) fmax()函数返回x和y的较大值
double fmin (double_x,double_y) fmin()函数返回x和y的较小值
double fmod(double _x),double_y fmod()函数返回x/y的余数
double frexp(double _x,int *_prexp) frexp()函数将浮点数分解为规格化分数和2的整次幂
double hypot(double _x,double_y) hypot(0函数返回sqrt(x × \times x+y × \times y)
int isinf(double _x) x若为正无穷大,返回1;若为负无穷大,返回-1;反之为0
static int isfinite(double_x) x有限,返回非零值。
int isnan(double _x) x为“非数字对象”,返回1
double ldexp(double_x,int_exp) 返回x乘以2的exp次幂的值
double log(double _x ) -
double log10(double_x) log10(x)
long lrint(double _x) -
long lround(double_x) 返回四舍五入的长整数值
double modf(double_x,double*_iptr) -
double pow(double_x,double_y) -
double round(double_x) -
int signbit(double_x) x的值设置符号位后,返回一个非零值
double sin(double_x) -
double sinh(double _x) -
double sqrt(double _x) -
double square(double _x) -
double tan(double _x) -
double tanh(double _x) 返回x的双曲正切
double trunc(double _x) 将x四舍五入为最近的整数
  • 库中的宏
描述
M_E 2.71828 常数e
M_SQRT2 1.414 sqrt(2)
M_PI 3.1415926 常数π
M_LN2 0.69314 ln2

(4)Arduino三角函数

用于计算移动物体的距离或者角度

double sin(double x);
double cos(double y);
double tan(double x);
double acos(double x);
double asin(double x);
double atan(double x);
发布了25 篇原创文章 · 获赞 4 · 访问量 775

猜你喜欢

转载自blog.csdn.net/qq_45416295/article/details/103986010