(Arduino基础一文通)
此文旨在记录arduino的一些基本语法,以备自己后续查用,并没有任何的讲解和分析,
如果您是电子爱好者,想学习arduino,请寻找合适的教材学习; 如果您有编程基础,想短时间内粗略了解arduino,则完全可以。
第一部分 基础
一、Arduino程序结构
草图启动时会调用setup()函数。使用它来初始化变量,引脚模式,启用库等。setup函数只能在Arduino板的每次上电或复位后运行一次。
在创建了用于初始化并设置初始值的setup()函数后,loop()函数,正如它的名称所指,允许你的程序连续循环的更改和响应。可以使用它来主动控制Arduino板。
二、Arduino数据类型
三、Arduino 变量和常量
和C完全一样;
四、Arduino 运算符
和C完全一样;
五、Arduino 控制语句
注意其中一个:(三元运算符)
? :条件运算符语法
expression1 ? expression2 : expression3
max = ( a > b ) ? a : b;
六、Arduino 循环
和C完全一样
七、Arduino 函数
和C完全一样
注意:如果函数写在loop函数下面,则需要在前面声明,就像C语言里写在main函数下面一样
八、Arduino 字符串
Arduino字符串同样继承了C字符串的特点😭😭😭
char my_str1[] = “Hello”;
char my_str2[6];
my_str2[0] = ‘H’;
也可以用C的字符串函数
char str[] = “This is my string”;
num = strlen(str); //17
num = sizeof(str); //18
strcpy(out_str, str); //字符串复制
strcat(out_str, " sketch."); //字符串组合
九、Arduino 字符串对象
不一样的来了,arduino使用了一些C++的关于对象的概念
String my_str = “This is my string.”; //实例化一个String类的对象
1、将字符串转换为大写
my_str.toUpperCase();
2、获取字符串的长度
my_str.length()
3、替换字符串中的单词
my_str.replace(size_t pos, size_t len, const string& str)
十、Arduino 时间函数
1、delay()函数
2、delayMicroseconds()函数
3、millis()函数
此函数用于返回Arduino板开始运行当前程序时的毫秒数。这个数字在大约50天后溢出,即回到零。
4、micros()函数
micros()函数返回Arduino板开始运行当前程序时的微秒数。该数字在大约70分钟后溢出,即回到零。在16 MHz Arduino板(例如Duemilanove和Nano)上,此函数的分辨率为4微秒(即返回值总是4的倍数)。在8 MHz Arduino板(例如LilyPad)上,此函数的分辨率为8微秒。
十一、Arduino 数组
和C一样
int n[ 10 ] ;
int n[ 10 ] = { 32, 27, 64, 18, 95, 14, 90, 70, 60, 37 } ;
1、将数组传递给函数
要将数组参数传递给函数,请指定没有任何括号的数组的名称。
当将数组传递给函数时,通常也会传递数组大小,因此函数可以处理数组中特定数量的元素。
数组名称的值是数组第一个元素在计算机内存中的地址。由于数组的起始地址被传递,所以被调用的函数精确地知道数组存储在内存中的位置。
十二、Arduino 多维数组
和C一样
int b[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } };
二维数组可以用嵌套for来遍历。
十三、Arduino 随机数
要生成随机数,可以使用Arduino随机数函数。我们有两个函数:
randomSeed(seed)
random()
1、randomSeed(seed) 带随机源的随机数
randomSeed(seed)函数重置Arduino的伪随机数生成器。虽然random()返回的数字的分布本质上是随机的,但是顺序是可预测的。你应该将发生器重置为某个随机值。如果你有一个未连接的模拟引脚,它可能会从周围环境中拾取随机噪音。这些可能是无线电波,宇宙射线,手机的电磁干扰,荧光灯等。
randomSeed(analogRead(5)); // randomize using noise from analog pin 5
2、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
1
第二部分 Arduino内设和库函数
一、GPIO
Arduino引脚默认配置为输入,因此在使用它们作为输入时,不需要使用 pinMode()显式声明为输入。
1、配置引脚模式
pinMode()函数
pinMode(pin,mode)函数用于将特定引脚配置为输入或输出。可以使用INPUT_PULLUP模式启用内部上拉电阻。此外,INPUT模式显式禁止内部上拉。
pin - 你希望设置模式的引脚的编号
mode - INPUT,OUTPUT或INPUT_PULLUP。
2、digitalWrite()函数
digitalWrite(pin,value)函数用于向数字引脚写入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()将启用内部上拉电阻,这就像一个大的限流电阻。
pin - 你希望设置模式的引脚的编号
value - HIGH或LOW。
3.analogRead()函数
Arduino能够检测是否有一个电压施加到其引脚,并通过digitalRead()函数报告。开/关传感器(检测物体的存在)和模拟传感器之间存在一个差异,模拟传感器的值连续变化。为了读取这种类型的传感器,我们需要一个不同类型的引脚。
analogRead()函数语法
analogRead(pin);
4.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)用作参考
注意:对AREF引脚的外部参考电压,请勿使用小于0V或大于5V的任何值。如果在AREF引脚上使用外部参考,则必须在调用analogRead()函数之前将模拟参考设置为EXTERNAL。否则,将短路有效参考电压(内部产生的)和AREF引脚,可能会损坏Arduino板上的微控制器。
二、Arduino 中断
有两种类型的中断:
硬件中断 - 它们响应外部事件而发生,例如外部中断引脚变为高电平或低电平。
软件中断 - 它们响应于在软件中发送的指令而发生。“Arduino语言”支持的唯一类型的中断是attachInterrupt()函数。
一般情况下,ISR(中断服务程序)应尽可能短且快。如果你的草图使用多个ISR,则一次只能运行一个。其他中断将在当前完成之后执行,其顺序取决于它们的优先级。
通常,全局变量用于在ISR和主程序之间传递数据。为了确保在ISR和主程序之间共享的变量正确更新,请将它们声明为volatile
(volatile关键词影响编译器编译的结果,用volatile声明的变量表示该变量随时可能发生变化,与该变量有关的运算,不要进行编译优化,以免出错)。
attachInterrupt()
描述:外部中断配置函数。
函数原型:attachInterrupt(interrupt, ISR, mode)
参数:
interrupt: 中断号。不同Arduino开发板中断号不同。Uno R3有两个外部中断,分别为数字管脚2(中断0)和数字管脚3(中断1)。
ISR: 中断处理函数。此函数不带参数,没有返回值。
mode: 中断触发方式。
LOW: 低电平触发。
CHANGE:管脚状态改变触发。
RISING:上升沿触发。
FALLING:下降沿触发。
返回值:无。
#include “Arduino.h”
#include “esp32-hal-dac.h”
#define LED_BLUE 32
#define TouchA 2
#define SPEAKER_VON 25
bool isLED_on=0;
void phase_Handler()
{
digitalWrite(LED_BLUE,LOW);
Serial.println(“interrupt!”);
}
void setup() {
pinMode(34, INPUT);
Serial.begin(115200);
pinMode(LED_BLUE, OUTPUT);
attachInterrupt(34, phase_Handler, FALLING);
Serial.println(“OK!”);
}
void loop() {
digitalWrite(LED_BLUE,HIGH);
}
禁用中断:
detachInterrupt(interrupt);
interrupt:需要禁用的中断号
二、字符处理库
使用字符处理库中的函数时,请包含标题。
三、数学库
Arduino数学库(math.h)包含了许多用于操作浮点数的有用的数学函数。
以下是在标题math.h中定义的宏
math.h中定义的库函数
来源:CSDN
作者:finedayforu
链接:https://blog.csdn.net/finedayforu/article/details/103939470