Arduino学习日志(day1)

声明:本文均为作者自己在学习Arduino过程中随手所记笔记,笔记顺序是按照自己的习惯来的,有问题的话欢迎提问哦

《基于Arduino IDE的学习》

一、Arduino初始界面

二、基本代码框架

// 复位一次执行一次
//setup只执行一次
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
pinMode设置引脚状态后才能用digitalWrtie函数对该引脚进行操作
若无pinMode则digitalWrtie无意义

  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
//相当于while,永久执行
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

HIGH:5V
LOW:0

LED:20mA,2V

三、数字IO口

/********************************数字I/O口******************************/
pinMode() :配置Arduino的引脚的三种模式
1.输出(OUTPUT)

当引脚设置为输出(OUTPUT)模式时,引脚为低阻抗状态。这意味着Arduino可以向其它电路元器件提供电流。也就是说,Arduino引脚在输出(OUTPUT)模式下可以点亮LED或者驱动电机。(如果被驱动的电机需要超过40mA的电流,Arduino将需要三极管或其它辅助元件来驱动他们。)

注意:Arduino引脚不能直接接地或直接与Arduino+5V/+3.3V引脚相连,否则可能损坏Arduino控制器。Arduino需要配合使用上拉电阻或者下拉电阻方能进行上述操作。

2.输入(INPUT)

当引脚设置为输入(INPUT)模式时,引脚为高阻抗状态(100兆欧)。此时该引脚可用于读取传感器信号或开关信号。

注意:当Arduino引脚设置为输入(INPUT)模式或者输入上拉(INPUT_PULLUP)模式,请勿将该引脚与负压或者高于5V的电压相连,否则可能会损坏Arduino控制器。

3.输入上拉(INPUT_PULLUP)

Arduino 微控制器自带内部上拉电阻。如果你需要使用该内部上拉电阻,可以通过pinMode()将引脚设置为输入上拉(INPUT_PULLUP)模式。

注意:当Arduino引脚设置为输入(INPUT)模式或者输入上拉(INPUT_PULLUP)模式,请勿将该引脚与负压或者高于5V的电压相连,否则可能会损坏Arduino控制器。

在输入上拉(INPUT_PULLUP)模式中,Arduino将开启引脚的内部上拉电阻,实现上拉输入功能。一旦将引脚设置为输入(INPUT)模式,Arduino内部上拉电阻将被禁用。

 

四、基本函数,语法知识
1. digitalRead()
读取数字引脚的 HIGH(高电平)或 LOW(低电平)
digitalRead(pin),pin:被读取的引脚编号,返回HIGH或LOW

2. digitalWrite()
digitalWrite(pin, value)
将数字引脚写HIGH(高电平)或LOW(低电平)

如果该引脚通过pinMode()设置为输出模式(OUTPUT),您可以通过digitalWrite()语句将该引脚设置为HIGH(5伏特)或LOW(0伏特/GND)。
//输入加HIGH=输入上拉
如果该引脚通过pinMode()设置为输入模式(INPUT),当您通过digitalWrite()语句将该引脚设置为HIGH时,
这与将该引脚将被设置为输入上拉(INPUT_PULLUP)模式相同。

先确定模式再执行输入输出


3. false :被定义为数值0

true :通常被定义为数值1.
在布尔含义(boolean sense)里任何非0整数都是true.所以在布尔含义内 -1,2 和 -200 等非零数值都被定义为ture。
boolean 如果在表达式中使用了布尔型变量,那么将根据变量值的真假而赋予整型值1或0。

4. 数据类型转换
byte():将一个值转换为byte字节型数值。byte(x)
byte类型变量可存储8位无符号数,其存储数值范围是 0 – 255。
byte类型变量在控制LED时显得格外有用,因为Arduino控制LED亮度或色彩时常常使用的数值是在0-255之间。

5. int():将一个值转换为int整数型。int(x)
整数是基本数据类型。整数数据类型占用2字节。整数的范围为-32,768到32,767( -2^15 ~(2^15)-1)。

6. word():把一个值转换为word字型的值,或由两个字节行数据创建一个字符。
一个存储一个16位无符号数的字符,取值范围从0到65535。
word(x)
word(h,L)
h:高阶(最左边) 字节
L:   低序(最右边) 字节

7. long():将一个值转换为long长整型数据类型。长整数型变量是扩展的数字存储变量,它可以存储32位(4字节)大小的变量,数值从-2,147,483,648到2,147,483,647。

 

四、
/************************************变量范围与限定符:**************************************/

静态变量:static只会在函数第一次调用的时候被创建和初始化

volatile :易变变量
变量修饰符,常用在变量类型的前面,以告诉编译器和接下来的程序怎么对待这个变量。
声明一个volatile变量是编译器的一个指令,该指令指示编译器从RAM而非存储寄存器中读取变量

当一个变量的控制和改变可能来自程序代码以外的环境,比如在使用Arduino的中断功能时。ISR(中断服务程序)中所涉及的变量需要被声明为volatile易变变量。

attachInterrupt();设置中断
attachInterrupt()函数是用于为Arduino开发板设置和执行ISR(中断服务程序)用的
在ISR(中断服务程序)函数中,delay()函数是不工作的,而且millis()函数返回值也不再增长。在ISR(中断服务程序)运行期间Arduino开发板接收到的串口数据也可能丢失。另外ISR函数里所使用的变量应声明为volatile类型。

const——常量
修改变量性质,使其变为只读状态

宏定义#define
在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。
#define M(y) y*y+3*y
k=M(5)=5*5+3*5

pinMode()
digitalWrite()
digitalRead()

delayMicroseconds()//暂停微秒单位


//获取随机数
random(minNumber,maxNumber);

//随机种子
randomSeed(analogRead(A0))
通过调用analogRead()函数读取一个空引脚,作为随机种子数值

五、
/****************高级IO口****************/
1. tone()
可以产生固定频率的PWM信号来驱动扬声器发声,并设置发声时间和长度
但若没有设置发声长度,则直到noNone()函数发声才会停止
一次只能产生一个声音,不能两个引脚同时使用该函数

tone(pin, frequency)
tone(pin, frequency, duration)

pin: 发声引脚(该引脚需要连接扬声器)
frequency: 发声频率(单位:赫兹) – 无符号整数型
duration: 发声时长(单位:微秒,此参数为可选参数) – 无符号长整型

请注意:
1. 对于Arduino Mega以外的控制器,使用tone()函数时会影响引脚3和引脚11的PWM信号输出。
2. 如果你想要使用不同的引脚产生不同的声音音调,每一次更换发声引脚以前都要使用noTone函数停止上一个引脚发声。Arduino是不支持两个引脚同时发声的。

noTone()
停止tone()函数的发声


2. shiftOut()
将一个字节的数据通过移位输出的方式逐位输出。
数据可以从最高位(最左位)或从最低位(最右位)输出。在输出数据时,当一位数据写入数据输出引脚时,时钟引脚将输出脉冲信号,指示该位数据已被写入数据输出引脚等待读取。

如果读取数据的设备是在Arduino的时钟引脚脉冲信号上升沿读取Arduino的输出数据,请确保在调用shiftOut()输出数据前,应先通过digitalWrite(clockPin, LOW)语句,将时钟引脚设置为LOW。这样做是为了确保数据读取准确无误。

shiftOut(dataPin, clockPin, bitOrder, value)

dataPin – 数据引脚
clockPin – 时钟引脚
bitOrder – 移位顺序 ( 高位先出 或 低位先出)
val – 数据

3. shiftIn()

将一个字节的数据通过移位的方式逐位输入。数据可以从最高位(最左位)或从最低位(最右位)输入。在输入数据时,Arduino首先在时钟引脚输出高电平,然后通过数据输入引脚读取一位数据,读取结束后时钟引脚将被Arduino设置为低电平。

如果与Arduino进行数据通讯的设备是在时钟引脚脉冲信号上升沿发送数据,请确保在调用shiftIn()前,应先通过digitalWrite(clockPin, LOW)语句,将时钟引脚设置为LOW。这样做是为了确保数据读取准确无误。

byte incoming = shiftIn(dataPin, clockPin, bitOrder)

dataPin – 数据引脚
clockPin – 时钟引脚
bitOrder – 移位顺序 ( 高位先入 或 低位先入)

4. pulseIn()

读引脚的脉冲信号, 被读取的脉冲信号可以是 HIGH 或 LOW. 例如我们要检测HIGH脉冲信号, Arduino将在引脚变为高电平时开始计时, 当引脚变为低电平时停止记时,并返回脉冲持续时长(时间单位:微秒)。如果在超时时间内没有读到脉冲信号的话, 将返回0.

根据经验发现,pulseIn()函数在检测脉冲间隔过短的信号时会产生错误。Arduino可检测的脉冲间隔时间范围是10微秒到3分钟。请留意假如调用pulseIn()函数时读取信号的引脚上已经为高电平,此时Arduino将等待该引脚变为低电平以后再开始检测脉冲信号。另外只有Arduino的中断是开启时,才能使用pulseIn()。

pulseIn(pin, value)
pulseIn(pin, value, timeout)

pin 引脚编号
state 脉冲状态
timeout 超时时间(单位:微秒)
如果Arduino在超时时间(timeout)内没有读到脉冲信号的话, 该函数将返回0.超时时间参数是可选参数,其默认值为1秒。

参考:太极创客 – Arduino,人工智能,物联网的应用、开发和学习资料 (taichi-maker.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值