1.关于引脚
Arduino上每一个带有数字编号的引脚,都是数字引脚,使用这些引脚可以完成输入输出数字信号的功能
2.关于pinMode()函数:(数字 I/O)
在使用输入输出功能前,需要使用pinMode()函数引脚配置模式
pinMode(pin,mode); //mode可使用:输出模式(OUTPUT),输入模式(INPUT),输入上拉模式 (INPUT_PULLUP),pin为指定配置的引脚编号
//在Arduino核心库中,OUTPUT被定义成1,INPUT 被定义成0
//因此可以用1代替OUTPUT,用0代替INPUT
如pinMode(2,OUTPUT);即为把2号引脚配置为输出模式
3.关于digitalWrite()函数:(数字 I/O)
digitalWrite(pin,value); //pin为指定输出的引脚编号,value为指定输出的电平,高电平(HIGH),低电平(LOW)即为0v
//在Arduino核心库中,HIGH被定义成1,LOW 被定义成0
//因此可以用1代替HIGH,用0代替LOW
高电平 即为当前Arduino的工作电压,Arduino UNO的工作电压为5v,Arduino Due的工作电压为3.3v
4.关于digitalRead()函数:(数字 I/O)
int value=digitalRead(pin); //定义一个变量,使用digitalRead()函数读取引脚pin的电平, 以数字的方式返回给value
读取数字引脚的 HIGH(高电平)或 LOW(低电平)
5.数字信号与模拟信号:
数字信号:只有0和1,不是0就是1,没有其他数字
模拟信号:可以是任意一个值
6.关于数字电平:
数字是一种表示一位电压的方式:0或1
在Arduino上,当数字引脚配置为输出(OUTPUT)时,电平设置为0或5v,当数字引角配置为输入(INPUT)时,电压由外部设备提供,该电压可以在0~5v变化,并转换成数字表示(0或1),电压低于0.8v则视为0,高于2.0v时视为1,电压在阈值之间则不确定
7.关于串口通信:
Arduino与计算机最常用的方式是串口通信,使用串口通信时,需要先使用Serial.begin()函数来初始化Arduino的串口通信功能
Serial.begin(speed); //参数speed指串口通信波特率即串口通信速率的参数 ,常用波特率:300 600 1200 2400 4800 9600等(每秒传送比特的个数),串口通信协议中串口通信双方必须使用同样的波特率才能正常通信
8.串口输出:关于Serial.print()和 Serial.println()函数
Serial.print(value); //若有引号,则打印引号里面的内容(字符串)
Serial.println(value); //若打印变量的数值,则没有引号,区别是Serial.println()比Serial.print()多了换行的作用
9.关于random()和randomSeed()函数:
random(min, max); //在[min, max)区间内产生一个随机数,包括min本身不包括max本身
单独使用random()函数所产生的随机数在每次程序启动后都是同一组随机数
randomSeed(seedVal); //使用randomSeed函数可以在每次运行都产生不同的随机数
10.关于analogWrite()函数:(模拟 I/O)
analogWrite(ledPin, value);//模拟输入,其中ledPin是引脚编号,value是参数
//既可调节亮度,也可以调节电机的转速
//该函数每次对引脚执行指令,指令执行后,都会给引脚一个固定的PWM信号,大概为 490hz
//value:占空比,0到255之间,占空比的多少可表示亮度的大小
11.关于analogRead()函数:(模拟 I/O)
analogRead(pin);//读取模拟输入引脚pin的数值,读取的数值为0到1024之间的整数
12.关于map()函数:
map(value,fromLow,fromHigh,toLow,toHigh) //将一个数值从一个范围映射到另一个范围
//value: 要映射的值 fromLow: 原范围的下限 fromHigh: 原范围的上限
//toLow: 新范围的下限 toHigh: 新范围的上限
13. 关于attachInterrupt()函数:
attachInterrupt(interrupt, ISR, mode);
//interrupt:中断号,在Uno R3中有中断号0(即引脚2)、中断号1(即引脚3)
//ISR:中断处理函数
//mode:中断触发方式,LOW(低电平触发)、CHANGE(引脚状态改变触发)、RISING(上升沿触发)、FALLING(下降沿触发)
14.关于Serial.available()函数:
Serial.available(); //串口接收缓存中有多少字节的数据待处理,返回值即为多少
14.第一个Arduino程序(LED闪烁):
//项目一 ——LED闪烁灯
int pin = 13; //LED连接到引脚13
void setup()
{
pinMode(pin, OUTPUT); //将引脚13设置为OUTPUT模式
}
void loop()
{
digitalWrite(pin, HIGH); //将引脚13设置为高电平,此时LED灯亮
delay(1000); //保持灯亮状态1000毫秒即1秒
digitalWrite(pin, LOW); //将引脚13设置为低电平,此时LED灯暗
delay(1000); //保持灯暗状态1000毫秒即1秒
}
四个led灯轮流闪烁:
void setup()
{
for(int i=3; i<=9; i+=2) //引脚3、5、7、9设置为输出状态(OUTPUT)
{
pinMode(i, OUTPUT);
}
}
void loop() {
f1();
delay(1000); //转换方向之间间隔两秒
f2();
delay(1000);
}
void f1() //依次点亮led,后依次熄灭led
{
for(int i=3; i<=9; i+=2)
{
digitalWrite(i, HIGH);
delay(200); //两个灯点亮之间间隔200毫秒
}
for(int i=9; i>=3; i-=2)
{
digitalWrite(i, LOW);
delay(200); //两个灯熄灭之间间隔200毫秒
}
}
void f2() //反方向依次点亮led,后依次熄灭led
{
for(int i=9; i>=3; i-=2)
{
digitalWrite(i, HIGH);
delay(200); //两个灯点亮之间间隔200毫秒
}
for(int i=3; i<=9; i+=2)
{
digitalWrite(i, LOW); //两个灯熄灭之间间隔200毫秒
delay(200);
}
}
led分别由暗到明、由明到暗:
int ledPin = 9;
int brightness = 0;
void setup() {
pinMode(ledPin, OUTPUT); //设置9号引脚为输出摸式(OUTPUT)
Serial.begin(9600); //开启串口通讯,可在串口监视器监测led亮度变化
}
void loop() {
for(brightness = 0; brightness<=255; brightness+=5){ //led由暗到明
analogWrite(ledPin, brightness);
Serial.print("brightness = ");
Serial.println(brightness); //在串口监视器上检测亮度实时变化
}
delay(10);
for(brightness = 255; brightness>=0; brightness-=5){ //led由明到暗
analogWrite(ledPin, brightness);
Serial.print("brightness = ");
Serial.println(brightness); //在串口监视器上检测亮度实时变化
}
delay(10);
}
利用电位器调节led灯亮度:
int ledPin = 9;
int readValue = 0; //创建变量readValue储存读取的A0引脚的模拟信号值
int brightness = 0; //创建变量brghtness储存映射在新的占空比(PWM)范围
void setup(){
pinMode(ledPin, OUTPUT); //将9号引脚设置为输出模式
}
void loop(){
readValue = analogRead(A0); //读取模拟信号值
brightness = map(readValue, 0, 1024, 0, 255); //映射在新的占空比(PWM)范围
analogWrite(ledPin, brightness); //输出占空比控制亮度
}
光敏电阻 :
int ledPin = 9;
int readValue = 0; //创建变量readValue储存读取的A0引脚的模拟信号值
int ledBrightness = 0; //创建变量brghtness储存映射在新的占空比(PWM)范围
void setup(){
pinMode(ledPin, OUTPUT); //将9号引脚设置为输出模式
}
void loop(){
readValue = analogRead(A0); //读取A0引脚模拟信号值
ledBrightness = map(readValue, 100, 500, 0, 255); //映射在新的占空比(PWM)范围
analogWrite(ledPin, brightness); //输出占空比控制亮度
}
外部中断:
int sensorLed = 9;
int sensorINPUT = 2;
char state = LOW;
void setup() {
pinMode(sensorLed, OUTPUT);
pinMode(sensorINPUT, INPUT_PULLUP);
attachInterrupt(0, blink, FALLING);
}
void loop() {
if(state == HIGH)
{
state = LOW;
digitalWrite(sensorLed, HIGH);
delay(500);
}
else
{
digitalWrite(sensorLed, LOW);
}
}
void blink()
{
state = !state;
}
注: 学习资源来自太极创客和博主TonylOT