Arduino基础入门语法学习

原文链接: https://blog.csdn.net/qq_26565435/article/details/89111858

和STM32比起来,Arduino相对好学多了,直接使用库函数就行了,不用涉及到寄存器底层配置和开发;和STM32库函数方式比起来,它应该也会好学很多(我现在也是刚开始)。我学习Arduino的主要原因就是自己买了个机械臂,控制板子是某宝买的基于arduino mega328的舵机控制板,想让臂和ros系统进行通讯,以便进行后续的扩展学习。下面记录一下自己学习arduino的过程。

Arduino程序结构

居然没有main函数,厉害厉害!
这就是我的第一感受。
其实并不是Arduino没有main函数,而是main函数的定义隐藏在了Arduino的核心库文件中。Arduino开发一般不直接操作main函数,而是使用Setup和loop这个两个函数。基本结构如下:

void setup()
{
  // 在这里加入你的setup代码,它只会运行一次:
}
 
void loop() 
{
  // 在这里加入你的loop代码,它会不断重复运行:
}
1
2
3
4
5
6
7
8
9
setup():
Arduino控制器通电或复位后,即会开始执行setup() 函数中的程序,该部分只会执行一次。通常我们会在setup() 函数中完成Arduino的初始化设置,如配置I/O口状态,初始化串口等操作。
loop():
在setup() 函数中的程序执行完后,Arduino会接着执行loop() 函数中的程序。而loop()函数是一个死循环,其中的程序会不断的重复运行。通常我们会在loop() 函数中完成程序的主要功能,如驱动各种模块,采集数据等。

数字I/O的使用

数字信号是以0、1表示的电平不连续变化的信号,也就是以二进制的形式表示的信号。 在Arduino中数字信号通过高低电平来表示,高电平则为数字信号1,低电平则为数字信号0 。
Arduino上每一个带有数字编号的引脚,都是数字引脚,包括写有“A”编号的模拟输入引脚。使用这些引脚,可以完成输入输出数字信号的功能。在使用输入或输出功能前,你需要先通过pinMode()函数配置引脚的模式为输入模式或输出模式。
pinMode(pin, mode)
其中,参数pin为指定配置的引脚编号;参数mode为指定的配置模式。
mode有三种模式供选择:

INPUT        输入模式
OUTPUT        输出模式
INPUT_PULLUP        输入上拉模式
1
2
3
三种模式的具体含义见DigitalPins
例子:


int ledPin = 13;                 // LED connected to digital pin 13

void setup()
{
  pinMode(ledPin, OUTPUT);      // 把13号引脚配置为输出模式
}

void loop()
{
  digitalWrite(ledPin, HIGH);   // 让13号引脚输出高电平
  delay(1000);                  // waits for a second
  digitalWrite(ledPin, LOW);    // 让13号引脚输出低电平
  delay(1000);                  // waits for a second
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
数字引脚除了用于输出信号外,还可以用digitalRead() 函数读取外部输入的数字信号,其调用形式为:val = digitalRead(inPin);
其中,参数inPin为指定读取状态的引脚编号;返回值value为获取到的信号状态,1为高电平,0为低电平。
例子如下:

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
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
模拟I/O的使用

模拟信号就是指声音、温度等信号,是用连续变化的物理量表示的信息,信息随时间连续变化。模拟输入功能需要使用analogRead()函数。其调用形式为:value = analogRead(pin);
例子(电压检测及报警):

#define  BEEP_PIN  12
#define  VOLTAGE_THRESHOLD   7 //电压阈值,测量值低于实际值0.3V------二极管压降导致
/*========================================低压报警功能=======================================
函数名:handleVoltage()
功能介绍:检测控制器输入电源是否小于8,小于则报警
函数参数:无
返回值:  无
===============================================================================================*/
void handleVoltage() {
    if((analogRead(A7)/(1024.0)*5*4+0.3) < VOLTAGE_THRESHOLD){ 
        digitalWrite(BEEP_PIN, LOW);
        delay(500);
        digitalWrite(BEEP_PIN, HIGH);
        delay(500);
        Serial.println((analogRead(A7)/(1024.0)*5*4+0.3));//打印实际电压值,计算方法:采集值/总量程*参考电压值*四分之一分压值+压降
    }           
}
void setup() {
    //put your setup code here, to run once: 
    pinMode(BEEP_PIN,OUTPUT);
    digitalWrite(BEEP_PIN, HIGH);//默认状态下蜂鸣器高电平不响
    Serial.begin(115200);//串口初始化
}
void loop() {
    //put your main code here, to run repeatedly:
    handleVoltage();
 
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
串口的使用

概念啥的就不用解释了,stm32中很详细了,而且和stm32中的串口相比,Arduino串口初始化太简单,不需要另外写初始化函数、串口中断服务子函数等。Arduino串口常用函数如下:
Serial.begin(speed);//串口初始化函数
其中,参数speed是指串口通信波特率,这是设定串口通信速率的参数。

Serial.print(val);//串口输出
其中,参数val是你要输出的数据,各种类型的数据均可。

Serial.println(val);//串口输出
该语句也是串口输出函数,同的是println() 函数会在输出完指定数据后,再输出一组回车换行符。

Serial.read();//串口输入函数
如果单独使用该函数,串口打印会有乱码出现,这是因为串口缓冲区中没有可读数据。当缓冲区中没有可读数据时,read()函数会返回int型值-1,而int型-1对应的char型数据便是乱码。在使用串口时,Arduino Uno会在SRAM中开辟一段大小为256 bytes的空间,串口接收到的数据都会被暂时存放进这个空间中,这个存储空间,我们称之为缓冲区。当你调用Serial.read()语句时,Arduino便会从缓冲区取出一个字节的数据。
因此,需要搭配Serial.available();,该函数返回值为当前缓冲区中接收到的数据字节数。
例子如下:

void setup() {
  // 初始化串口
  Serial.begin(115200);
}
 
void loop() {
// 如果缓冲区中有数据,则读取并输出
if(Serial.available()>0)
  {
    char ch=Serial.read();
    Serial.print(ch);
  }
}
————————————————
版权声明:本文为CSDN博主「xuuyann」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_26565435/article/details/89111858

猜你喜欢

转载自blog.csdn.net/yelin042/article/details/102738793