您的位置 首页 > 数码极客

arduino如何输出脉冲、arduino脉冲计数…

近日对Arduino学习笔记进行梳理,整理了69个常用Arduino函数集合备查,分别是:pinMode()函数、digitalWrite()函数、analogWrite()函数、analogRead()函数、digitalRead()函数、analogReference()函数、11个Arduino字符函数、39个Arduino数学函数、6个Arduino三角函数、2个Arduino随机数函数(randomSeed(seed)、random())、tone()函数、noTone()函数、pulseIn()函数、min(x, y)函数、max(x, y)函数,希望对你有帮助。

Arduino IDE

一、pinMode()函数

pinMode()函数用于将特定引脚配置为输入或输出。可以使用INPUT_PULLUP模式启用内部上拉电阻。此外,INPUT模式显式禁止内部上拉。

(一)pinMode()函数语法

Void setup () { pinMode (pin , mode); }
  • pin - 你希望设置模式的引脚的编号
  • mode - INPUT,OUTPUT或INPUT_PULLUP。

(二)pinMode()函数程序示例

int button = 5 ; // button connected to pin 5 int LED = 6; // LED connected to pin 6 void setup () { pinMode(button , INPUT_PULLUP); // set the digital pin as input with pull-up resistor pinMode(button , OUTPUT); // set the digital pin as output } void setup () { If (digitalRead(button ) == LOW) // if button pressed { digitalWrite(LED,HIGH); // turn on led delay(500); // delay for 500 ms digitalWrite(LED,LOW); // turn off led delay(500); // delay for 500 ms } }

二、digitalWrite()函数

digitalWrite()函数用于向数字引脚写入HIGH或LOW值。如果该引脚已通过pinMode()配置为OUTPUT,则其电压将被设置为相应的值:HIGH为5V(或3.3V在3.3V板上),LOW为0V(接地)。如果引脚配置为INPUT,则digitalWrite()将启用(HIGH)或禁止(LOW)输入引脚的内部上拉。建议将pinMode()设置为INPUT_PULLUP,以启用 内部上拉电阻。

如果不将pinMode()设置为OUTPUT,而将LED连接到引脚,则在调用digitalWrite(HIGH)时,LED可能会变暗。在没有明确设置pinMode()时,digitalWrite()将启用内部上拉电阻,这就像一个大的限流电阻。

(一)digitalWrite()函数语法

Void loop() { digitalWrite (pin ,value); }
  • pin - 你希望设置模式的引脚的编号
  • value - HIGH或LOW。

(二)digitalWrite()函数程序示例

int LED = 6; // LED connected to pin 6 void setup () { pinMode(LED, OUTPUT); // set the digital pin as output } void setup () { digitalWrite(LED,HIGH); // turn on led delay(500); // delay for 500 ms digitalWrite(LED,LOW); // turn off led delay(500); // delay for 500 ms }

三、analogWrite()函数

analogWrite()函数将模拟值(PWM波)写入引脚。它可用于以不同的亮度点亮LED或以各种速度驱动电机。在调用analogWrite()函数之后,引脚将产生指定占空比的稳定方波,直到下一次调用analogWrite()或在相同引脚上调用digitalRead()或digitalWrite()。大多数引脚上的PWM信号频率约为490 Hz。在Uno和类似的板上,引脚5和6的频率约为980Hz。Leonardo上的引脚3和11也以980Hz运行。

在大多数Arduino板上(ATmega168或ATmega328),此功能在引脚3,5,6,9,10和11上工作。在Arduino Mega上,它在引脚2-13和44-46上工作。旧的Arduino ATmega8板仅支持引脚9,10和11上的analogWrite()。

Arduino Due支持引脚2至13以及引脚DAC0和DAC1上的 analogWrite()。与PWM引脚不同,DAC0和DAC1是数模转换器,用作真正的模拟输出。

在调用analogWrite()之前,不需要调用pinMode()将引脚设置为输出。

(一)analogWrite()函数语法

analogWrite ( pin , value ) ; value − the duty cycle: between 0 (always off) and 255 (always on).

value - 占空比:0(始终导通)到255(始终关断)之间。

(二)analogWrite()函数程序示例

int ledPin = 9; // LED connected to digital pin 9 int analogPin = 3; // potentiometer connected to analog pin 3 int val = 0; // variable to store the read value void setup() { pinMode(ledPin, OUTPUT); // sets the pin as output } void loop() { val = analogRead(analogPin); // read the input pin analogWrite(ledPin, (val / 4)); // analogRead values go from 0 to 1023, // analogWrite values from 0 to 255 }

四、analogRead()函数

Arduino能够检测是否有一个电压施加到其引脚,并通过digitalRead()函数报告。开/关传感器(检测物体的存在)和模拟传感器之间存在一个差异,模拟传感器的值连续变化。为了读取这种类型的传感器,我们需要一个不同类型的引脚。

在Arduino板的右下角,你会看到6个标记为“Analog In”的引脚。这些特殊引脚不仅可以告知是否有电压施加给它们,还可以告知它们的值。通过使用analogRead()函数,我们可以读取施加到其中一个引脚的电压。

此函数返回0到1023之间的数字,表示0到5伏特之间的电压。例如,如果施加到编号0的引脚的电压为2.5V,则analogRead(0)返回512。

(一)analogRead()函数语法

analogRead(pin);
  • pin - 要读取的模拟输入引脚的编号(大多数电路板上为0至5,Mini和NaNo上为0至7,Mega上为0至15)

(二)analogRead()函数程序示例

int analogPin = 3;//potentiometer wiper (middle terminal) // connected to analog pin 3 int val = 0; // variable to store the value read void setup() { Serial.begin(9600); // setup serial } void loop() { val = analogRead(analogPin); // read the input pin Serial.println(val); // debug value }

五、digitalRead()函数

Reads the value from a specified digital pin, either HIGH or LOW.

(一)digitalRead()函数语法

digitalRead(pin)

Parameters

pin: the number of the digital pin you want to read

返回值

HIGH or LOW

(二)digitalRead()函数程序示例

Sets pin 13 to the same value as pin 7, declared as an input.

int ledPin = 13; // LED connected to digital pin 13 int inPin = 7; // pushbutton connected to digital pin 7 int val = 0; // variable to store the read value void setup() { pinMode(ledPin, OUTPUT); // sets the digital pin 13 as output pinMode(inPin, INPUT); // sets the digital pin 7 as input } void loop() { val = digitalRead(inPin); // read the input pin digitalWrite(ledPin, val); // sets the LED to the button's value }

Notes and Warnings

If the pin isn’t connected to anything, digitalRead() can return either HIGH or LOW (and this can change randomly).

The analog input pins can be used as digital pins, referred to as A0, A1, etc. The exception is the Arduino Nano, Pro Mini, and Mini’s A6 and A7 pins, which can only be used as analog inputs.

六、analogReference()函数

配置用于模拟输入的参考电压(即用作输入范围顶部的值)。选项是:

  • DEFAULT - 5伏(5V Arduino板)或3.3伏(3.3V Arduino板)的默认模拟参考值
  • INTERNAL - 内置参考,在ATmega168或ATmega328上等于1.1伏特,在ATmega8上等于2.56伏特(不适用于Arduino Mega)
  • INTERNAL1V1 - 内置1.1V参考(仅限Arduino Mega)
  • INTERNAL2V56 - 内置2.56V参考(仅限Arduino Mega)
  • EXTERNAL - 施加到AREF引脚的电压(仅限0到5V)用作参考

(一)analogReference()函数语法

analogReference (type);

type - 可以使用以下任何类型(DEFAULT,INTERNAL,INTERNAL1V1,INTERNAL2V56,EXTERNAL)

对AREF引脚的外部参考电压,请勿使用小于0V或大于5V的任何值。如果在AREF引脚上使用外部参考,则必须在调用 analogRead()函数之前将模拟参考设置为EXTERNAL。否则,将短路有效参考电压(内部产生的)和AREF引脚,可能会损坏Arduino板上的微控制器。

或者,你可以通过5K电阻将外部参考电压连接到AREF引脚,从而允许在外部和内部参考电压之间切换。

注意,电阻将改变用作参考的电压,因为AREF引脚上有一个内部32K电阻。两者用作分压器。例如,通过电阻器施加的2.5V将在AREF引脚处产生2.5*32/(32+5)=〜2.2V电压。

(二)analogReference()程序示例

int analogPin = 3;// potentiometer wiper (middle terminal) connected to analog pin 3 int val = 0; // variable to store the read value void setup() { Serial.begin(9600); // setup serial analogReference(EXTERNAL); // the voltage applied to the AREF pin (0 to 5V only) // is used as the reference. } void loop() { val = analogRead(analogPin); // read the input pin Serial.println(val); // debug value }

七、Arduino字符函数

1、int isdigit(int c)

如果c是数字,则返回1,否则返回0。

2、int isalpha(int c)

如果c是字母,则返回1,否则返回0。

3、int isalnum(int c)

如果c是数字或字母,则返回1,否则返回0。

4、int isxdigit(int c)

如果c是十六进制数字字符,则返回1,否则返回0。

5、int islower(int c)

如果c是小写字母,则返回1,否则返回0。

6、int isupper(int c)

如果c是大写字母,则返回1;否则返回0。

7、int isspace(int c)

如果c是空白字符:换行符('\n')、空格符(' ')、换页符('\f')、回车符('\r')、水平制表符('\t')或垂直制表符('\v'),则返回1,否则返回0。

8、int iscntrl(int c)

如果c是控制字符,如换行符('\n')、换页符('\f')、回车符('\r')、水平制表符 (\v')、垂直制表符('\v')、alert('\a')或退格('\b'),则返回1,否则返回0。

9、int ispunct(int c)

如果c是除空格,数字或字母以外的打印字符,则返回1,否则返回0。

10、int isprint(int c)

如果c是包含空格(' ')的打印字符,则返回1,否则返回0。

11、int isgraph(int c)

如果c是除空格(' ')之外的打印字符,则返回1,否则返回0。

八、Arduino数学函数

1、double acos (double __x)

acos()函数计算x的反余弦的主值。返回值在[0, pi]弧度的范围内。不在[-1, +1]范围内的参数会发生域错误。

2、double asin (double __x)

asin()函数计算x的反正弦的主值。返回值在[-pi/2, pi/2]弧度的范围内。不在[-1, +1]范围内的参数会发生域错误。

3、double atan (double __x)

atan()函数计算x的反正切的主值。返回值在[-pi/2, pi/2]弧度的范围内。

4、double atan2 (double __y, double __x)

atan2()函数计算y/x的反正切的主值,使用两个参数的符号来确定返回值的象限。返回值在[-pi, +pi]弧度的范围内。

5、double cbrt (double __x)

cbrt()函数返回x的立方根值。

6、double ceil (double __x)

ceil()函数返回大于或等于x的最小整数值,以浮点数表示。

7、static double copysign (double __x, double __y)

copysign()函数返回x,但带有y的符号。即使x或y是NaN或零,他们也可以工作。

8、double cos(double __x)

cos()函数返回x的余弦,以弧度为单位。

9、double cosh (double __x)

cosh()函数返回x的双曲余弦。

10、double exp (double __x)

exp()返回e的x次幂的值。

11、double fabs (double __x)

fabs()函数计算浮点数x的绝对值。

12、double fdim (double __x, double __y)

fdim()函数返回max(x - y, 0)。如果x或y或者两者都是NaN,则返回NaN。

13、double floor (double __x)

floor()函数返回小于或等于x的最大整数值,以浮点数表示。

14、double fma (double __x, double __y, double __z)

fma()函数执行浮点乘加,即运算(x * y) + z,但是中间结果不会四舍五入到目标类型。这有时可以提高计算的精度。

15、double fmax (double __x, double __y)

fmax()函数返回两个值x和y中较大的一个。如果一个参数是NaN,则返回另一个参数。如果两个参数都是NaN,则返回NaN。

16、double fmin (double __x, double __y)

fmin()函数返回两个值x和y中较小的一个。如果一个参数是NaN,则返回另一个参数。如果两个参数都是NaN,则返回NaN。

17、double fmod (double __x, double__y)

fmod()函数返回x / y的余数。

18、double frexp (double __x, int * __pexp)

frexp()函数将浮点数分解为规格化分数和2的整次幂。它将整数存储在pexp指向的int对象中。如果x是一个正常的浮点数,则frexp()函数返回值v,使得v具有区间[1/2, 1)或零的量值,而x等于v乘以2的pexp次幂。如果x是零,那么结果的两个部分都是零。如果x不是有限数字,frexp()将按原样返回x,并通过pexp存储0。

注意 − 这个实现允许一个零指针作为指令来跳过存储指数。

19、double hypot (double __x, double__y)

hypot()函数返回sqrt(x*x + y*y)。这是一个边长为x和y的直角三角形的斜边的长度,或点(x, y)距离原点的距离。使用这个函数而不是直接使用公式是比较明智的,因为误差要小得多。x和y没有下溢。如果结果在范围内,则不会溢出。

20、static int isfinite (double __x)

如果x是有限的,isfinite()函数返回一个非零值:不是正或负无穷,也不是NaN。

21、int isinf (double __x)

如果参数x是正无穷大,则函数isinf()返回1;如果x是负无穷大,则返回-1,否则返回0。

注意 − GCC 4.3可以用内联代码替换这个函数,这个代码对两个无穷大返回1值(gcc bug #35509)。

22、int isnan (double __x)

如果参数x表示“非数字”(NaN)对象,则函数isnan()返回1,否则返回0。

23、double ldexp (double __x, int __exp )

ldexp()函数将浮点数乘以2的整数次幂。它返回x乘以2的exp次幂的值。

24、double log (double __x)

log()函数返回参数x的自然对数。

25、double log10(double __x)

log10()函数返回参数x的对数,以10为基数。

26、long lrint (double __x)

lrint()函数将x四舍五入到最近的整数,将中间情况舍入到偶数整数方向(例如,1.5和2.5的值都舍入到2)。这个函数类似于rint()函数,但是它的返回值类型不同,并且有可能溢出。

返回四舍五入的长整数值。如果x不是有限数字或者溢出,则此实现返回LONG_MIN值(0x80000000)。

27、long lround (double __x)

lround()将函数将x四舍五入到最近的整数,但中间情况不舍入到0(不是到最近的偶数整数)。这个函数类似于round()函数,但是它的返回值的类型是不同的,并且有可能溢出。

返回四舍五入的长整数值。如果x不是有限数字或者溢出,则此实现返回LONG_MIN值(0x80000000)。

28、double modf (double __x, double * __iptr )

modf()函数将参数x分解为整数部分和小数部分,每个部分都与参数具有相同的符号。它在iptr指向的对象中将整数部分存储为double。

modf()函数返回x的有符号小数部分。

注意 − 这个实现跳过零指针的写入。但是,GCC 4.3可以用内联代码替换这个函数,不允许使用NULL地址来避免存储。

29、float modff (float __x, float * __iptr)

modf()函数的别名。

30、double pow (double __x, double __y)

pow()函数返回x的y次幂。

31、double round (double __x)

round()函数将x四舍五入到最近的整数,但中间情况不舍入到0(不是到最近的偶数整数)。不可能会溢出。

返回四舍五入的值。如果x是整数或无穷大,则返回x本身。如果x是NaN,则返回NaN。

32、int signbit (double __x)

如果x的值设置了符号位,signbit()函数将返回一个非零值。这与“x < 0.0”不同,因为IEEE 754浮点允许零署名。比较“-0.0 < 0.0”是错的,但“signbit )”会返回一个非零值。

33、double sin (double __x)

sin()函数返回x的正弦值,以弧度为单位。

34、double sinh (double __x)

sinh()函数返回x的双曲正弦。

35、double sqrt (double __x)

sqrt()函数返回x的非负平方根。

36、double square (double __x)

square()函数返回x * x。

注意 − 此函数不属于C标准定义。

37、double tan (double __x)

tan()函数返回x的正切值,以弧度为单位。

38、double tanh ( double __x)

tanh()函数返回x的双曲正切。

39、double trunc (double __x)

trunc()函数将x四舍五入为最近的整数,不大于绝对值。

九、Arduino三角函数

你需要使用三角几何来计算移动物体的距离或角速度。Arduino提供了传统的三角函数(sin,cos,tan,asin,acos,atan),可以通过编写它们的原型来概括。Ma包含三角函数的原型。

(一)三角函数语法

double sin(double x); //returns sine of x radians double cos(double y); //returns cosine of y radians double tan(double x); //returns the tangent of x radians double acos(double x); //returns A, the angle corresponding to cos (A) = x double asin(double x); //returns A, the angle corresponding to sin (A) = x double atan(double x); //returns A, the angle corresponding to tan (A) = x

(二)三角函数程序示例

double sine = sin(2); // approximately 0.90929737091 double cosine = cos(2); // approximately -0.41614685058 double tangent = tan(2); // approximately -2.

十、Arduino随机数函数:randomSeed(seed)

randomSeed(seed)函数重置Arduino的伪随机数生成器。虽然random()返回的数字的分布本质上是随机的,但是顺序是可预测的。你应该将发生器重置为某个随机值。如果你有一个未连接的模拟引脚,它可能会从周围环境中拾取随机噪音。这些可能是无线电波,宇宙射线,手机的电磁干扰,荧光灯等。

例子

randomSeed(analogRead(5)); // randomize using noise from analog pin 5

十一、Arduino随机数函数:random()

random函数生成伪随机数。以下是语法。

(一)random()语法

long random(max) // it generate random numbers from 0 to max long random(min, max) // it generate random numbers from min to max

(二)random()程序示例

long randNumber; void setup() { Serial.begin(9600); // if analog input pin 0 is unconnected, random analog // noise will cause the call to randomSeed() to generate // different seed numbers each time the sketch runs. // randomSeed() will then shuffle the random function. randomSeed(analogRead(0)); } void loop() { // print a random number from 0 to 299 Serial.print("random1="); randNumber = random(300); Serial.println(randNumber); // print a random number from 0to 299 Serial.print("random2="); randNumber = random(10, 20);// print a random number from 10 to 19 Serial.println (randNumber); delay(50); }

十二、tone()函数

(一)tone()函数简介

tone()函数可以产生固定频率的PWM信号来驱动扬声器发声。发声时间长度和声调都可以通过参数控制。定义发声时间长度有两种方法,第一种是通过tone()函数的参数来定义发声时长,另一种是使用noTone()函数来停止发声。如果您在使用tone()函数时没有定义发声时间长度,那么除非您通过noTone()函数来停止声音,否则Arduino将会一直通过tone()函数产生声音信号。

Arduino一次只能产生一个声音。假如Arduino的某一个引脚正在通过tone()函数产生发声信号,那么此时让Arduino使用另外一个引脚通过tone()函数发声是不行的。

请注意:

1. 对于Arduino Mega以外的控制器,使用tone()函数时会影响引脚3和引脚11的PWM信号输出。

2. 如果你想要使用不同的引脚产生不同的声音音调,每一次更换发声引脚以前都要使用noTone函数停止上一个引脚发声。Arduino是不支持两个引脚同时发声的。

(二)tone()函数语法

tone(pin, frequency)

tone(pin, frequency, duration)

参数

pin: 发声引脚(该引脚需要连接扬声器)

frequency: 发声频率(单位:赫兹) – 无符号整数型

duration: 发声时长(单位:微秒,此参数为可选参数) – 无符号长整型

(三)tone()函数返回值

(四)tone()函数示例程序

多音调发声

void setup() {

}

void loop() {

noTone(8); //停止8号引脚发声

tone(6, 440, 200); //6号引脚发声200毫秒

delay(200);

noTone(6); //停止6号引脚发声

tone(7, 494, 500); //7号引脚发声500毫秒

delay(500);

noTone(7); //停止7号引脚发声

tone(8, 523, 300); //8号引脚发声300毫秒

delay(300);

}

十三、noTone()函数

(一)noTone()函数说明

noTone()函数用来停止tone()函数发声。

注:如您需要使用多个Arduino引脚发声,要在每个引脚输出声音信号前调用noTone()函数来停止当前的声音信号。

(二)noTone()函数语法

noTone(pin)

参数

pin: 停止发声引脚

(三)noTone()函数返回值

(四)noTone()函数示例程序

请见Tone()函数

十四、pulseIn()函数

(一)pulseIn()函数说明

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

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

(二)pulseIn()函数语法

pulseIn(pin, value)

pulseIn(pin, value, timeout)

参数

pin 引脚编号

state 脉冲状态

timeout 超时时间(单位:微秒)

如果Arduino在超时时间(timeout)内没有读到脉冲信号的话, 该函数将返回0.超时时间参数是可选参数,其默认值为1秒。

(三)pulseIn()函数返回值

脉冲持续时长。

如果在超时时间内没有读到脉冲信号, 将返回0.

(四)pulseIn()函数示例程序

int pin = 7;

unsigned long duration;

void setup()

{

pinMode(pin, INPUT);

}

void loop()

{

duration = pulseIn(pin, HIGH);

}

十五、min(x, y)函数

(一)min(x,y)函数说明

取两者之间最小值

参数

x: 第一个数字(可以是任何数据类型)

y: 第二个数字(可以是任何数据类型)

(二)min(x,y)函数返回值

两个数字中较小的数值。

(三)min(x,y)函数程序示例

sensVal = min(sensVal, 100); // 将 sensVal 或 100 中更小的数值赋给sensVal

// 这么做可以确保sensVal数值永远不超过100

十六、max(x, y)函数

(一)max(x,y)函数说明

取两者之间最大值

参数

x: 第一个数字(可以是任何数据类型)

y: 第二个数字(可以是任何数据类型)

(二)max(x,y)函数返回值

两个数字中较大的数值。

(三)max(x,y)函数程序示例

sensVal = max(senVal, 20); // 将 sensVal 或 20 中更大的数值赋给sensVal

// 这么做可以确保sensVal数值永远不小于20

注意

max()的括号中参数不能使用函数。

max(a–, 0); //a++不能在这里使用。否则会产生错误结果

max(a, 0); //要实现以上语句功能应该使用这种方法。

a–; //所有数学计算都应在max()函数外进行。

备注:以上资料来源于网络整理,特别感谢w3cschool和太极创客,仅供大家学习使用。

初始化工作室专注于“Arduino、Scratch、乐高的学习以及STEAM教育的实施”,如果需要更多相关课程,请关注我,谢谢。

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“arduino如何输出脉冲,arduino脉冲计数,arduino如何控制输出的脉冲数量,arduino输出脉冲信号,arduino高速脉冲输出”边界阅读