arduino缺点,arduino开发stm32的缺点

首页 > 技术 > 作者:YD1662023-03-16 09:52:29

Arduino学习笔记arduino学习笔记1 - 什么是arduino?

要了解arduino就先要了解什么是单片机,arduino平台的基础就是AVR指令集的单片机。
1、什么是单片机?它与个人计算机有什么不同?
一台能够工作的计算机要有这样几个部份构成:中央处理单元CPU(进行运算、控制)、随机存储器RAM(数据存储)、存储器ROM(程序存储)、输入/输出设备I/O(串行口、并行输出口等)。在个人计算机(PC)上这些部份被分成若干块芯片,安装在一个被称之为主板的印刷线路板上。而在单片机中,这些部份全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如模拟量/数字量转换(A/D)和数字量/模拟量转换(D/A)等。
2、单片机有什么用?
实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能,一个控制电冰箱温度的计算机难道要用酷睿处理器吗?应用的关键是看是否够用,是否有很好的性能价格比。如果一台冰箱都需要用酷睿处理器来进行温度控制,那价格就是天价了。
单片机通常用于工业生产的控制、生活中与程序和控制有关(如:电子琴、冰箱、智能空调等)的场合。
下图就是一个Atmega328P-PU单片机,基于AVR指令集的8位处理器,频率20MHz,存储器空间32KB。

arduino缺点,arduino开发stm32的缺点(1)


什么是Arduino?
Arduino是一个能够用来感应和控制现实物理世界的一套工具。 它由一个基于单片机并且开放源码的硬件平台,和一套为Arduino板编写程序 的开发环境组成。
Arduino可以用来开发交互产品,比如它可以读取大量的开关和传感器信号,并且可以控制各式各样的电灯、电机和其他物理设备。Arduino项目可以是单独的,也可以在运行时和你电脑中运行的程序(例如:Flash,Processing,MaxMsP)进行通讯。Arduino板你可以选择自己去手动组装或是购买已经组装好的;Arduino开源的IDE可以免费下载得到。
Arduino的编程语言就像似在对一个类似于物理的计算平台进行相应的连线,它基于处理多媒体的编程环境。
为什么要使用Arduino?
有很多的单片机和单片机平台都适合用做交互式系统的设计。例如:Parallax Basic Stamp, Netmedia’s BX-24,Phidgets,MIT’s Handyboard 和其它能提供类似功能的。 所有这些工具,你都不需要去关心单片机编程繁琐的细节,提供给你的是一套容易使用的工具包。 Arduino同样也简化了同单片机工作的流程,但同其它系统相比Arduino在很多地方更具有优越性,特别适合老师,学生和一些业余爱好者们使用:


Arduino基于AVR平台,对AVR库进行了二次编译封装,把端口都打包好了,寄存器啦、地址指针之类的基本不用管。大大降低了软件开发难度,适宜非专业爱好者使用。优点和缺点并存,因为是二次编译封装,代码不如直接使用AVR代码编写精练,代码执行效率与代码体积都弱于AVR直接编译。
性能:
Digital I/O 数字输入/输出端口0—13。
Analog I/O 模拟输入/输出端口0-5。
支持ICSP下载,支持TX/RX。
输入电压:USB接口供电或者5V-12V外部电源供电。
输出电压:支持3.3V级5V DC输出。
处理器:使用Atmel Atmega168 328处理器,因其支持者众多,已有公司开发出来32位的MCU平台支持arduino。
目前arduino的控制板最新的为Arduino Uno,如下图:

国内使用比较多的为Arduino Duemilanove 2009,主要原因是Uno的usb控制芯片封装方式改变,制造成本上升,其他变化不大,性价比还是Arduino Duemilanove 2009比较好。

因其开源特性,生产arduino控制板的厂商众多,同样的Duemilanove 2009就有很多种颜色。

对于一些对电路板大小要求比较严格的地方,arduino团队提供了arduino Nano,此板体积做的非常小。如下图:


arduino板子上基本端口如图描述,对几个比较特殊的端口下面详细说明下:
VIN端口:VIN是input voltage的缩写,表示有外部电源时的输入端口。
AREF:Reference voltage for the analog inputs(模拟输入的基准电压)。使用analogReference()命令调用。
ICSP:也有称为ISP(In System Programmer),就是一种线上即时烧录,目前比较新的芯片都支持这种烧录模式,包括大家常听说的8051系列的芯片,也都慢慢采用这种简便的烧录方式。我们都知道传统的烧录方式,都是将被烧录的芯片,从线路板上拔起,有的焊死在线路板上的芯片,还得先把芯片焊接下来才能烧录。为了解决这种问题,发明了ICSP线上即时烧录方式。只需要准备一条R232线(连接烧录器),以及一条连接烧录器与烧录芯片针脚的连接线就可以。电源的 5V,GND,两条负责传输烧录信息的针脚,再加上一个烧录电压针脚,这样就可以烧录了。
arduino学习笔记2通过Arduino编译器查看串口数据最简单的例子:
void setup()
{
Serial.begin(9600); // 打开串口,设置波特率为9600 bps
}
void loop()
{
int val;
val=analogRead(5);//传感器接到模拟口5,数值根据自己的需要可变
Serial.println(val,DEC);//从串口发送字符串并换行
delay(100);
}
如果电路安装正确,按照示例代码运行、上传,然后点击编译器的Serial Monitor按钮,就可以看到从代码定义的输入口(这儿是模拟口5)获取的数据了。
arduino学习笔记3 arduino语言

在与Arduino DIYER接触的这段时间里,发现有些朋友对Arduino语言还是比较难入手,那么这里我就简单的注释一下Arduino语言(本人也是半罐子水,有错的地方还请各位指正)。

/*************基础C语言*************/

关键字:语法符号:运算符:数据类型:数据类型转换:常量:

/******************************************/

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

/*************Arduino 语言*************/

结构功能

数字 I/O

模拟 I/O

扩展 I/O

时间函数

数学函数

三角函数

随机数函数

外部中断函数

中断使能函数

串口收发函数

/**********************************/

/************Arduino语言库文件*************/

官方库文件非官方库文件

/****************************************/

arduino学习笔记4 数据类型

有多种类型的变量,如下所述

boolean 布尔
char 字符
byte 字节
int 整数
unsigned int 无符号整数
long 长整数
unsigned long 无符号长整数
float 浮点
double 双字节浮点
string 字符串
array 数组

arduino学习笔记5 Arduuino复合运算符

= , -= , *= , /=
Description描述
Perform a mathematical operation on a variable with another constant or variable. The = (et al) operators are just a convenient shorthand for the expanded syntax, listed below.
对一个变量和另一个参数或变量完成一个数学运算。 =(以及其他)可以缩短语法长度。

Syntax语法
x = y; // equivalent to the expression x = x y; // 等价于 x = x y;
x -= y; // equivalent to the expression x = x - y; // 等价于 x = x - y;
x *= y; // equivalent to the expression x = x * y; // 等价于 x = x * y;
x /= y; // equivalent to the expression x = x / y; // 等价于 x = x / y;

Parameters参数
x: any variable type
x:任何变量类型

y: any variable type or constant
y:任何变量类型或常数

Examples范例
x = 2;
x = 4; // x now contains 6 // x现在为6
x -= 3; // x now contains 3 // x现在为3
x *= 10; // x now contains 30 // x现在为30
x /= 2; // x now contains 15 // x现在为15


Syntax语法
x ; // increment x by one and returns the old value of x
// 将x的值加1并返回原来的x的值。 x; // increment x by one and returns the new value of x // 将x的值加1并返回现在的x的值。
x-- ; // decrement x by one and returns the old value of x // 将x的值减1并返回原来的x的值。
--x ; // decrement x by one and returns the new value of x // 将x的值减1并返回现在的x的值。

Parameters参数
x: an integer or long (possibly unsigned)
x:一个整数或长整数(可以无符号)

Returns返回
The original or newly incremented / decremented value of the variable.
返回变量原始值或增加/消耗后的新值。

Examples范例
x = 2;
y = x; // x now contains 3, y contains 3 // x现在为3,y为3
y = x--; // x contains 2 again, y still contains 3 // x现在仍然为2,y将为3

arduino学习笔记6 Arduino基础

在学语言之间,还要做的一个功课就是要明白程序的构架,这个也同样简单,大体可分为几个部分。

1、声明变量及接口名称(int val;int ledPin=13;)。

2、setup()——函数在程序开始时使用,可以初始化变量、接口模式、启用库等(例如:pinMode(ledPin,OUTUPT);)。

3、loop()——在setup()函数之后,即初始化之后,loop() 让你的程序循环地被执行。使用它来运转Arduino。

接下来就开始学习一下几个基本函数。

1、pinMode(接口名称,OUTPUT或INPUT)将——接口定义为输入或输出接口,用在setup()函数里。

2、digitalWrite(接口名称, HIGH或LOW)——将数字接口值至高或低。

3、digitalRead(接口名称)——读出数字接口的值。

4、analogWrite(接口名称, 数值)——给一个接口写入模拟值(PWM波)。对于 ATmega168芯片的Arduino(包括Mini或BT),该函数可以工作于 3, 5, 6, 9, 10和 11号接口。老的 ATmega8芯片的USB和 serial Arduino仅仅支持 9, 10和11号接口。

5、analogRead(接口名称)——从指定的模拟接口读取值,Arduino对该模拟值进行10-bit的数字转换,这个方法将输入的0-5电压值转换为 0到1023间的整数值。

6、delay()——延时一段时间,delay(1000)为一秒。

7、Serial.begin(波特率)——设置串行每秒传输数据的速率(波特率)。在同计算机通讯时,使用下面这些值:300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600或 115200。你也可以在任何时候使用其它的值,比如,与0号或1号插口通信就要求特殊的波特率。用在setup()函数里

8、Serial.read()——读取持续输入的数据。

9、Serial.print(数据,数据的进制)——从串行端口输出数据。Serial.print(数据)默认为十进制等于Serial.print(数据,DEC)。

10、Serial.println(数据,数据的进制)——从串行端口输出数据,跟随一个回车和一个换行符。这个函数所取得的值与 Serial.print()一样。

以上几个函数是常用基本函数,还有很多以后会慢慢学习

arduino学习笔记7函数

输入输出函数

Arduino 内含了一些处理输出与输入的切换功能,相信已经从书中程式范例略知一二。

pinMode(pin, mode)

将数位脚位(digital pin)指定为输入或输出。

范例 :

pinMode(7,INPUT); // 将脚位 7 设定为输入模式

digitalWrite(pin, value)

将数位脚位指定为开或关。脚位必须先透过pinMode明示为输入或输出模式digitalWrite才能生效。

范例 :

digitalWrite(8,HIGH); //将脚位 8设定输出高电位

int digitalRead(pin)

将输入脚位的值读出,当感测到脚位处于高电位时时回传HIGH,否则回传LOW。

范例 :

val = digitalRead(7); // 读出脚位 7 的值并指定给 val

int analogRead(pin)

读出类比脚位的电压并回传一个 0到1023 的数值表示相对应的0到5的电压值。

范例 :

val = analogRead(0); //读出类比脚位 0 的值并指定给 val变数

analogWrite(pin, value)

改变PWM脚位的输出电压值,脚位通常会在3、5、6、9、10与11。Value变数范围0-255,例如:输出电压2.5伏特(V),该值大约是128。

范例 :

analogWrite(9,128); // 输出电压约2.5伏特(V)

unsigned long pulseIn(pin, value)

设定读取脚位状态的持续时间,例如使用红外线、加速度感测器测得某一项数值时,在时间单位内不会改变状态。

范例 :

time = pulsein(7,HIGH); // 设定脚位7的状态在时间单位内保持为HIGH

shiftOut(dataPin, clockPin, bitOrder, value)

把资料传给用来延伸数位输出的暂存器,函式使用一个脚位表示资料、一个脚位表示时脉。bitOrder用来表示位元间移动的方式(LSBFIRST最低有效位元或是MSBFIRST最高有效位元),最后value会以byte形式输出。此函式通常使用在延伸数位的输出。

范例 :

shiftOut(dataPin, clockPin, LSBFIRST, 255);

时间函数

控制与计算晶片执行期间的时间

unsigned long millis()

回传晶片开始执行到目前的毫秒

范例:

duration = millis()-lastTime; // 表示自"lastTime"至当下的时间

delay(ms)

暂停晶片执行多少毫秒

范例:

delay(500); //暂停半秒(500毫秒)

delay Microseconds(us)

暂停晶片执行多少微秒

范例:

delayMicroseconds(1000); //暂停1豪秒

数学函式

三角函数以及基本的数学运算

min(x, y)

回传两数之间较小者

范例:

val = min(10,20); // 回传10

max(x, y)

回传两数之间较大者

范例:

val = max(10,20); // 回传20

abs(x)

回传该数的绝对值,可以将负数转正数。

范例:

val = abs(-5); // 回传5

constrain(x, a, b)

判断x变数位于a与b之间的状态。x若小于a回传a;介于a与b之间回传x本身;大于b回传b

范例:

val = constrain(analogRead(0), 0, 255); // 忽略大于255的数

map(value, fromLow, fromHigh, toLow, toHigh)

将value变数依照fromLow与fromHigh范围,对等转换至toLow与toHigh范围。时常使用于读取类比讯号,转换至程式所需要的范围值。

例如:

val = map(analogRead(0),0,1023,100, 200); // 将analog0 所读取到的讯号对等转换至100 – 200之间的数值。

double pow(base, exponent)

回传一个数(base)的指数(exponent)值。

范例:

double x = pow(y, 32); // 设定x为y的32次方

double sqrt(x)

回传double型态的取平方根值。

范例:

double a = sqrt(1138); // 回传1138平方根的近似值 33.73425674438

double sin(rad)

回传角度(radians)的三角函数sine值。

范例:

double sine = sin(2); // 近似值 0.90929737091

double cos(rad)

回传角度(radians)的三角函数cosine值。

范例:

double cosine = cos(2); //近似值-0.41614685058

double tan(rad)

回传角度(radians)的三角函数tangent值。

范例:

double tangent = tan(2); //近似值-2.18503975868

乱数函式

产生乱数

randomSeed(seed)

事实上在Arduino里的乱数是可以被预知的。所以如果需要一个真正的乱数,可以呼叫此函式重新设定产生乱数种子。你可以使用乱数当作乱数的种子,以确保数字以随机的方式出现,通常会使用类比输入当作乱数种子,藉此可以产生与环境有关的乱数(例如:无线电波、宇宙雷射线、电话和萤光灯发出的电磁波等)。

范例:

randomSeed(analogRead(5)); // 使用类比输入当作乱数种子

long random(max)

long random(min, max)

回传指定区间的乱数,型态为long。如果没有指定最小值,预设为0。

范例:

long randnum = random(0, 100); // 回传0 – 99 之间的数字

long randnum = random(11); // 回传 0 -10之间的数字

序列通讯

你可以在第五章看见一些使用序列埠与电脑交换讯息的范例,以下是函式解释。

Serial.begin(speed)

你可以指定Arduino从电脑交换讯息的速率,通常我们使用9600 bps。当然也可以使用其他的速度,但是通常不会超过115,200 bps(每秒位元组)。

范例:

Serial.begin(9600);

Serial.print(data)

Serial.print(data, encoding)

经序列埠传送资料,提供编码方式的选项。如果没有指定,预设以一般文字传送。

范例:

Serial.print(75); // 列印出 "75"

Serial.print(75, DEC); //列印出 "75"

Serial.print(75, HEX); // "4B" (75 的十六进位)

Serial.print(75, OCT); // "113" (75 in的八进位)

Serial.print(75, BIN); // "1001011" (75的二进位)

Serial.print(75, BYTE); // "K" (以byte进行传送,显示以ASCII编码方式)

Serial.println(data)

Serial.println(data, encoding)

与Serial.print()相同,但会在资料尾端加上换行字元( )。意思如同你在键盘上打了一些资料后按下Enter。

范例:

Serial.println(75); //列印出"75 "

Serial.println(75, DEC); //列印出"75 "

Serial.println(75, HEX); // "4B "

Serial.println(75, OCT); // "113 "

Serial.println(75, BIN); // "1001011 "

Serial.println(75, BYTE); // "K "

int Serial.available()

回传有多少位元组(bytes)的资料尚未被read()函式读取,如果回传值是0代表所有序列埠上资料都已经被read()函式读取。

范例:

int count = Serial.available();

int Serial.read()

读取1byte的序列资料

范例:

int data = Serial.read();

Serial.flush()

有时候因为资料速度太快,超过程式处理资料的速度,你可以使用此函式清除缓冲区内的资料。经过此函式可以确保缓冲区(buffer)内的资料都是最新的。

范例:

Serial.flush();

arduino学习笔记8数字输入

在数字电路中开关(switch)是一种基本的输入形式,它的作用是保持电路的连接或者断开。Arduino从数字I/O管脚上只能读出高电平(5V)或者低电平(0V),因此我们首先面临到的一个问题就是如何将开关的开/断状态转变成Arduino能够读取的高/低电平。解决的办法是通过上 /下拉电阻,按照电路的不同通常又可以分为正逻辑(Positive Logic)和负逻辑(Inverted Logic)两种。

在正逻辑电路中,开关一端接电源,另一端则通过一个10K的下拉电阻接地,输入信号从开关和电阻间引出。当开关断开的时候,输入信号被电阻“拉”向地,形成低电平(0V);当开关接通的时候,输入信号直接与电源相连,形成高电平。对于经常用到的按压式开关来讲,就是按下为高,抬起为低。

arduino缺点,arduino开发stm32的缺点(2)

在负逻辑电路中,开关一端接地,另一端则通过一个10K的上拉电阻接电源,输入信号同样也是从开关和电阻间引出。当开关断开时,输入信号被电阻“拉”向电源,形成高电平(5V);当开关接通的时候,输入信号直接与地相连,形成低电平。对于经常用到的按压式开关来讲,就是按下为低,抬起为高。

arduino缺点,arduino开发stm32的缺点(3)

为了验证Arduino数字I/O的输入功能,我们可以将开关接在Arduino的任意一个数字I/O管脚上(13除外),并通过读取它的接通或者断开状态,来控制其它数字I/O管脚的高低。本实验采用的原理图如下所示,其中开关接在数字I/O的7号管脚上,被控的发光二极管接在数字I/O的13号 管脚上:

arduino缺点,arduino开发stm32的缺点(4)

首页 12345下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.