飘易博客(作者:Flymorn)
订阅《飘易博客》RSS,第一时间查看最新文章!
飘易首页 | 留言本 | 关于我 | 订阅Feed

Arduino单片机开发基础、编程语言及各开发板区别

Author:飘易 Source:飘易
Categories:物联网 PostTime:2019-8-27 16:50:03
正 文:

    提到Arduion板子,飘易首先要提的是Arduino UNO R3这款板子,Arduino / Genuino Uno是基于ATmega328P的单片机开发板。它有14个数字输入/输出引脚(其中6个可用作PWM输出),6个模拟输入脚,16 MHz晶振,USB连接,电源插孔,ICSP接头和复位按钮。 只需使用USB线将其连接到计算机,或者使用AC-to-DC适配器或电池为其供电即可开始使用。您可以修改您的UNO而不用担心做错任何事情,最糟糕的情况也只是您更换几元的芯片,重新开始。


    “Uno”是意大利语“一”的意思,并被选为Arduino软件(IDE)1.0的发布。Uno板和Arduino软件(IDE)的1.0版本是Arduino的最初版本,现在发展到更新的版本。Uno板是USB Arduino系列板中的第一个板,以及Arduino平台的参考模型。

优点:经典、适合入门。

缺点:性能中庸、上下相比各有不足,别的板子的优点就是这个板子的不足。


Arduion UNO R3 规格:

工作电压:5V

输入电压:接上USB时无须外部供电或外部7V~12V DC输入

输出电压:5V DC输出和3.3V DC输出 和外部电源输入

微处理器:ATmega328

Bootloader:Arduino Uno

时钟频率:16 MHz

输入电压(推荐)7-12V

输入电压(限制)6-20V

支持USB接口协议及供电(不需外接电源)

支持ISP下载功能。

数字I/O端口 14(4个PWM输出口)

数字I/O端口 14(4个PWM输出口)

模拟输入端口 6

直流电流 I/O端口 40mA

直流电流 3.3V端口 50mA

Flash 内存:32 KB (ATmega328) (0.5 KB用于引导程序)

SRAM 2 KB (ATmega328)

EEPROM 1 KB (ATmega328)

尺寸:75x55x15mm


Arduino Uno接线原理图


Arduino还有很多其他型号的板子,借一下其他开发者总结的图,感谢总结:

    

   开发板选型使用总结

    学习入门:推荐UNO。UNO几乎是作为Arduino开发板的形象代言板出现的,以至于有时一提Arduino开发板默认的认为是UNO(笔者很不赞同),各属性在arduino板系列中十分中庸,有大量的资源(如库和项目)是和UNO配套的,适合于学习、入门,会得到很多的帮助。


    物联网开发:推荐Mega2560。吹了半天,为啥不说Yun、Due、ethernet这些适合做Server的开发板呐?因为esp8266实在太强势了,正如Zigbee的没落一样,物联网硬件逐渐沉淀下来,推荐Mega2560也仅仅因为他适合做客户端或者客户端分发。


    可穿戴:推荐Arduino101或Nano/Micro。这是两套解决方案,101性能强大,已集成了BLE和IMU,问题是开发习惯和体积。而Nano/Micro+6050+BT/WIFI正好是体积小,却性能有限,兼容有坑。


    USB设备:推荐Micro。凡是32u4主控的,如leonardo都是可以作为模拟USB设备,推荐Micro纯粹是因为体积小,成本最低。


    PS:  Arduino及其logo是Arduino意大利官方所有的商标,并不是可以随意使用的。国内大多数写有Arduino的字样的控制器,均是侵权行为,开源不等于没有版权。建议大家购买Arduino还是找正规厂商,希望大家能够支持Seeed、OpenJumper等正规销售者。 正版的UNO大约100多块钱,国内模仿的板子大约不足30元,这里面差的不仅仅是质量,还有版权灯。


    Arduino语言

    Arduino使用C/C++编写程序,虽然C++兼容C语言,但这是两种语言,C语言是一种面向过程的编程语言,C++是一种面向对象的编程语言。早期的Arduino核心库使用C语言编写,后来引进了面向对象的思想,目前最新的Arduino核心库采用C与C++混合编写而成。


    通常我们说的Arduino语言,是指Arduino核心库文件提供的各种应用程序编程接口(Application Programming Interface,简称API)的集合。这些API是对更底层的单片机支持库进行二次封装所形成的。例如,使用AVR单片机的Arduino的核心库是对AVR-Libc(基于GCC的AVR支持库)的二次封装。


    传统开发方式中,你需要厘清每个寄存器的意义及之间的关系,然后通过配置多个寄存器来达到目的。而在Arduino中,使用了清楚明了的API替代繁杂的寄存器配置过程。


关键字:

if
if...else
for
switch case
while
do... while
break
continue
return
goto


语法符号:

;
{}
//


运算符:

=
+
-
*
/
%
==
!=
<
>
<=
>=
&&
||
!
++
--
+=
-=
*=
/=


数据类型:

boolean  布尔类型
char
byte  字节类型
int
unsigned int
long
unsigned long
float
double
string
array
void


数据类型转换:

char()
byte()
int()
long()
float()


常量:

HIGH | LOW     表示数字IO口的电平,HIGH 表示高电平(1),LOW 表示低电平(0)。
INPUT | OUTPUT   表示数字IO口的方向,INPUT 表示输入(高阻态),OUTPUT  表示输出(AVR能提供5V电压 40mA电流)。
true | false    true 表示真(1),false表示假(0)。


       以上为基础c语言的关键字和符号,有c语言基础的都应该了解其含义,这里也不作过多的解释。


 

结构

void setup()   初始化变量,管脚模式,调用库函数等
void loop()  连续执行函数内的语句功能


数字 I/O

pinMode(pin, mode)    数字IO口输入输出模式定义函数,pin表示为0~13, mode表示为INPUT或OUTPUT。
digitalWrite(pin, value)    数字IO口输出电平定义函数,pin表示为0~13,value表示为HIGH或LOW。比如定义HIGH可以驱动LED。
int digitalRead(pin)    数字IO口读输入电平函数,pin表示为0~13,value表示为HIGH或LOW。比如可以读数字传感器。


模拟 I/O

int analogRead(pin)    模拟IO口读函数,pin表示为0~5(Arduino Diecimila为0~5,Arduino nano为0~7)。比如可以读模拟传感器(10位AD,0~5V表示为0~1023)。
analogWrite(pin, value) - PWM     数字IO口PWM输出函数,Arduino数字IO口标注了PWM的IO口可使用该函数,pin表示3, 5, 6, 9, 10, 11,value表示为0~255。比如可用于电机PWM调速或音乐播放。


扩展 I/O

shiftOut(dataPin, clockPin, bitOrder, value)    SPI外部IO扩展函数,通常使用带SPI接口的74HC595做8个IO扩展,dataPin为数据口,clockPin为时钟口,bitOrder为数据传输方向(MSBFIRST高位在前,LSBFIRST低位在前),value表示所要传送的数据(0~255),另外还需要一个IO口做74HC595的使能控制。
unsigned long pulseIn(pin, value)    脉冲长度记录函数,返回时间参数(us),pin表示为0~13,value为HIGH或LOW。比如value为HIGH,那么当pin输入为高电平时,开始计时,当pin输入为低电平时,停止计时,然后返回该时间。


时间函数

unsigned long millis()   返回时间函数(单位ms),该函数是指,当程序运行就开始计时并返回记录的参数,该参数溢出大概需要50天时间。
delay(ms)    延时函数(单位ms)。
delayMicroseconds(us)    延时函数(单位us)。


数学函数

min(x, y)  求最小值
max(x, y)  求最大值
abs(x)   计算绝对值
constrain(x, a, b)  约束函数,下限a,上限b,x必须在ab之间才能返回。
map(value, fromLow, fromHigh, toLow, toHigh)    约束函数,value必须在fromLow与toLow之间和fromHigh与toHigh之间。
pow(base, exponent)  开方函数,base的exponent次方。
sq(x)     平方
sqrt(x)   开根号


三角函数

sin(rad)
cos(rad)
tan(rad)


随机数函数

randomSeed(seed)   随机数端口定义函数,seed表示读模拟口analogRead(pin)函数 。
long random(max)   随机数函数,返回数据大于等于0,小于max。
long random(min, max)   随机数函数,返回数据大于等于min,小于max。


外部中断函数

attachInterrupt(interrupt, ISR, mode)  外部中断只能用到数字IO口2和3,interrupt表示中断口初始0或1,表示一个功能函数;ISR 中断发生时的中断服务程序,这个函数必须没有参数没有返回值;mode:LOW低电平中断,CHANGE有变化就中断,RISING上升沿中断,FALLING 下降沿中断。
detachInterrupt(interrupt)  中断开关,interrupt=1 开,interrupt=0 关。


中断使能函数

interrupts()  使能中断
noInterrupts()  禁止中断


串口收发函数

Serial.begin(speed)  串口定义波特率函数,speed表示波特率,如9600,19200等。
int Serial.available()  判断缓冲器状态。
int Serial.read()   读串口并返回收到参数。
Serial.flush()    清空缓冲器。
Serial.print(data)  串口输出数据。
Serial.println(data)   串口输出数据并带回车符。


官方库文件

EEPROM - EEPROM读写程序库

Ethernet - 以太网控制器程序库

LiquidCrystal - LCD控制程序库

Servo - 舵机控制程序库

SoftwareSerial - 任何数字IO口模拟串口程序库

Stepper - 步进电机控制程序库

Wire - TWI/I2C总线程序库

Matrix - LED矩阵控制程序库

Sprite - LED矩阵图象处理控制程序库


非官方库文件

DateTime - a library for keeping track of the current date and time in software.

Debounce - for reading noisy digital inputs (e.g. from buttons)

Firmata - for communicating with applications on the computer using a standard serial protocol.

GLCD - graphics routines for LCD based on the KS0108 or equivalent chipset.

LCD - control LCDs (using 8 data lines)

LCD 4 Bit - control LCDs (using 4 data lines)

LedControl - for controlling LED matrices or seven-segment displays with a MAX7221 or MAX7219.

LedControl - an alternative to the Matrix library for driving multiple LEDs with Maxim chips.

Messenger - for processing text-based messages from the computer

Metro - help you time actions at regular intervals

MsTimer2 - uses the timer 2 interrupt to trigger an action every N milliseconds.

OneWire - control devices (from Dallas Semiconductor) that use the One Wire protocol.

PS2Keyboard - read characters from a PS2 keyboard.

Servo - provides software support for Servo motors on any pins.

Servotimer1 - provides hardware support for Servo motors on pins 9 and 10

Simple Message System - send messages between Arduino and the computer

SSerial2Mobile - send text messages or emails using a cell phone (via AT commands over software serial)

TextString - handle strings

TLC5940 - 16 channel 12 bit PWM controller.

X10 - Sending X10 signals over AC power lines


以上库文件都需要下载到编译环境(例如下目录:arduino\hardware\libraries)中才能使用。



一般我们编写程序用到的IDE是官方出品的Arduino IDE,目前最新的版本号是 :1.8.9 ,下载地址:

https://www.arduino.cc/en/main/software


【参考】:

1、Arduion各开发板的比较

2、Arduino开发板的针脚定义图


作者:飘易
来源:飘易
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
Tag:Arduino 浏览(次) 我要评论(0条)
上一篇:没有了
下一篇:Arduion使用ULN2003APG驱动直流电机实现转速控制
0条评论 “Arduino单片机开发基础、编程语言及各开发板区别”
No Comment .
发表评论
名称(*必填)
邮件(选填)
网站(选填)

记住我,下次回复时不用重新输入个人信息
© 2007-2019 飘易博客 Www.Piaoyi.Org 原创文章版权由飘易所有