序言
开新坑,因为某个项目要用到,又要重新捡回以前的技术了
教程可以看这个
arduino教程汇总
首先要声明的是本人使用的IDE版本是1.5.2
,过了这么久了肯定有新的IDE了,因此有些示范程序可能会有跟新版出入,本人将会尽可能标注
本文大部分内容摘抄自Arduino中文社区 奈何col
写的编程基础
Arduino Uno
- 工作电压 5V
- 推荐输入电压 7~12V
- 极限输入电压 6~20V
- 数字I/O引脚 14个
- PWM通道 6个
- ADC模拟输入通道 6个
电源
- Vin:电源输入引脚
- 5V:5V电源引脚
- 3V3: 3.3V 电源引脚
- GND:接地引脚
ATmega328 有 32KB Flash存储空间, 2KB SRAM和1KB EEPROM
从Blink开始
首先就是第一个示范代码
/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
This example code is in the public domain.
*/
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
需要注意的是
新版IDE的该历程使用的是宏LED_BUILTIN
,其实在大部分开发板上该宏定义对应的就是13引脚
- setup部分的程序在板子启动或者复位重启后只运行一次
- loop部分的程序在setup部分程序运行完后将会不断重复运行
点击左上角打钩按钮编译程序,点击箭头按钮 上传代码到开发板
此时Arduino uno标有TX,RX的两个LED灯会快速闪烁,如果显示“上传成功”,说明该程序已经被写入arduino
Arduino语言
Arduino使用C/C++
编写程序,早期Arduino核心库采用C语言编写,后来引进了面向对象思想,目前最新的arduino采用C和C++混合编写而成
其实我们要学习的是如何调用这些API
main函数?
既然是用C/C++语言开发的,那么main函数何在?
其实main函数存在于Arduino核心库中,仍然是程序的入口
Adruino程序中编写的setup和loop函数都在main函数中调用了
loop函数循环执行是通过for循环实现的,并且每次loop结束后都会进行串口实践判断,因此串口事件不能实时响应
pinMode(pin,mode)
在使用输入输出功能前,先通过上述函数设置引脚的模式为输入模式或者输出模式
参数
- 参数pin为指定配置的引脚号
- 参数mode为指定的配置模式
- INPUT 输入模式
- OUTPUT 输出模式
- INPUT_PULLUP 输入上拉模式
一般来说该函数都设置在setup程序段内
digitalWrite(pin,value)
- 参数pin为指定输出的电平
- 参数value为你要指定输出的电平
- 使用HIGH输出高电平
- 使用LOW输出低电平
范例
digitalWrite(led, LOW);
注意
Arduino中输出的低电平为0V,输出的高电平为当前Arduino的工作电压
比如说
- Arduino UNO 工作电压为 5V,也就是高电平就是5V
- Arduino Uno 工作电压为3.3V,也也就是说高电平就是5V
digitalRead(pin)
在使用输入或者输出功能前,要通过pinMode()来设置引脚的模式为输入模式或者输出模式
参数
参数Pin为指定读取状态的引脚编号
返回值
1为高电平,0位低电平
范例
buttonState = digitalRead(buttonPin);
analogRead(pin)
模拟输入引脚是带有ADC(Analog-to-Digital Converter,模数转换器)的引脚
可以将外部输入的模拟信号转换为芯片运算的时候可以识别的数字信号
- pin是指定要读取模拟值的引脚,被指定的引脚必须是模拟输入引脚
- 可以将
0~5V
的电压信号转换为0~1023的整数形式表示
范例
int sensorValue = analogRead(A0);
analogWrite(pin,value)
使用该函数可以实现PWM输出功能
在Ariduno Uno 中提供的引脚为3,5,6,9,10,11
因为在analogWrite和analogRead函数内部已经完成了引脚的初始化,因此不用在Setup()函数中进行初始化操作
- 参数pin是指定要输出PWM波的引脚
- 参数alue指定是PWM的脉冲宽度,范围为
0~255
tone()
tone()主要用于Arduino连接蜂鸣器或者扬声器发声
可以让指定引脚产生一个占空比为百分之50的指定频率方波
语法
- tone(pin,frequency)
- tone(pin,frequency,duration)
- pin是需要输出方波的引脚
- frequency是输出的频率
- duration是方波持续的时间,如果没有该参数,Arduino将持续发出设定的音调
noTone(pin)
可以用来停止指定引脚上的方波输出
- pin就是需要停止方波输出的引脚
pulseln()
检测指定引脚上的脉冲信号宽度
exm:检测高电平脉冲时,pulseln()会等待指定引脚输入的电平变高,当变高之后开始计时,直到输入电平变低,停止计时
pulseln()函数会返回这个脉冲信号持续的时间,也就是该脉冲的宽度
函数可以设定超时时间,如果超过设定实际爱你,仍然没检测到脉冲,返回0
当没有设定超时时间时,pulseln()会默认1秒钟的超时时间
语法
- pulseln(pin,value)
- pulseln(pin,value,timeout)
- pin需要读取脉冲的引脚
- value是需要读取的脉冲类型
- HIGH
- LOW
- timeout是超时时间,单位为毫秒,数据类型为无符号长整型
范例
distance = pulseIn(EchoPin, HIGH)/ 58.00;
millis()
获取Arduino通电后(复位后)到现在的时间,单位为毫秒ms
大概运行50天后运行时间会溢出
micros()
获取Arduino通电后(复位后)到现在的时间,单位为us
delay(ms)
毫秒级延时,参数类型为unsigned long
delayMicroseconds(us)
微秒级延时,参数类型为unsigned int
外部程序
attachInterrupt(pin,ISR,mode)
对中断引脚进行初始化配置,来开启Arduino的外部中断功能
- pin中断引脚
- ISR为中断函数名
- mode为中断模式
用法
attachInterrupt(2, Hello, LOW);
该语句会开启Arduino Uno的2号引脚(中断编号0)的外部中断功能
detachInterrupt(pin)
就是用来关闭特定引脚的中断功能
串口通信
Serial.begin(speed, config)
初始化串口,可配置串口的各项参数
语法
- Serial.begin(speed)
- Serial.begin(speed,config)
- speed为波特率
- config为数据位,校验位,停止位配置
详情参考以下链接
begin函数详情
Serial.print(val) 与 Serial.println(val)
串口初始化完成后,就可以使用上述函数向计算机发送信息
println函数会在输出完指定数据后再输出一组回车换行符
范例
Serial.println("Hellow World");
Serial.read()
调用该语句,每次都会返回一个字节的数据,这个返回值就是当前串口读取到的数据
其他函数
太多了这里放个链接
其他函数链接
软串口
目前本人没咋用,因此也只能放出链接
软串口教程传送门
常见配件
面包板
好吃(划掉)
面包板是专门进行各种电子实验设计的工具,可以根据自己的想法在上面搭建各种电路,众多电子元器件都可以根据需要随意插入或者拔出,免去了焊接节省了时间
- 两边的插孔,横向插孔均连通,纵向插孔不连通
- 中间的插孔,纵向的5个插口相互连通,横向的都不连通
电阻
对电流起阻碍作用
电容
装点的容器,可起到去耦,滤波,储能作用
二极管
整流,稳压,电路保护
LED发光二极管
偶正负两极,短脚为负极,长脚为正级
三极管
可以起到方法,开关等作用
有发射极(emitter,E)、 基级(base,B)、 集电极(collector,C)三级
总结
目前就整了这么多,没啥时间深入了
Q.E.D.
Comments | 0 条评论