Arduino学习笔记

一、初识Arduino

1、通过51认识Arduino

认识单片机,决定学习单片机是个很偶然的决定。爱好计算机,喜欢编程有很多年了,一直对计算机底层的东西不太了解,尤其是计算机硬件更是知之甚少。一次偶然的机会获得了两个月的静下心来学习的时间(实际是受伤了哪都去不了),学点啥呢?学点单片机吧,于是买了本 郭天祥 的《51单片机C语言教程》,于是开启了单片机的学习之路……从什么是单片机,什么是寄存器,什么是中断,按键防抖,串口通信UART,I2C总线,SPI总线,看门狗等等,杂七杂八学了不少,了解了很多,但还是不系统,学了一段时间,51开发板就放到角落里吃灰了,哎,算是学着玩吧。
有一天看朋友在朋友圈发的用Arduino做的感应垃圾箱的视频,眼前一亮,这不就是单片机吗?这又燃起了我学习Arduino的欲望(好吧,我就是这么喜新厌旧),那就一点一点学吧,以后儿子参加个机器人比赛啥的我也能胡拉两下。

我的引路人:Arduino中文社区
几个好点的学习网站:
1.极客工坊
2.21世纪IC

2、Arduino是个啥

Arduino数据手册

Arduino UNO开发板
Arduino就是个单片机,比51牛逼点,它的牛逼之处不是处理器多快,内存多大,而是它对初学者友好,有很多开源库供人调用,能够买到现成的传感器模块和对应的调用库。
Arduino有很多类型的开发板,对应不同的板载cpu和引出管脚,有
Arduino Uno
Arduino Nano
Arduino Nano
Arduino Nano
Arduino LilyPad
Arduino Mega 2560
Arduino Ethernet
Arduino Due
Arduino Leonardo
等等
还有这种最小系统,个子小

3、Arduino UNO 引脚分布图

Arduino UNO引脚分布图

二、开发环境搭建

1、官方IDE搭建

(1)下载官方IDE
Arduino官方网站(有时打不开) / 百度网盘 提取码 6ust
一般情况下ArduinoIDE安装完成,所需要的驱动就安装好了,USB转串口的驱动也应该安装好了。 这样就可以进行开发了。
Arduino官方IDE
可是官方的IDE没有代码提示,界面比较刺眼,不如VScode开发着顺手,下面引用一篇文章https://blog.csdn.net/wowocpp/article/details/81175478,介绍vscode开发环境的搭建。

2、利用vscode和PlatformIO搭建开发环境

  • 安装vscode
  • 安装中文语言包安装中文语言包
  • 安装Arduino扩展安装Arduino扩展
  • 配置Arduino路径在这里插入图片描述
    在这里插入图片描述
  • 安装platformIO IDE
    在这里插入图片描述 小插头是串口监视窗口
    第一次用可慢可慢了,得耐心等一段时间,别着急啊。

三、开始写程序

常用函数文档

1、main函数

在进行Arduino开发时,没有像传统C/C++程序使用入口函数main。实际上main函数存在于Arduino核心库中,且仍然是程序的入口。
在Arduino核心库中可见main.cpp文件,其内容如下:

#include <Arduino.h>

// Declared weak in Arduino.h to allow user redefinitions.
int atexit(void (* /*func*/ )()) { return 0; }

// Weak empty variant initialization function.
// May be redefined by variant files.
void initVariant() __attribute__((weak));
void initVariant() { }

void setupUSB() __attribute__((weak));
void setupUSB() { }

int main(void)
{
    init();

    initVariant();

#if defined(USBCON)
    USBDevice.attach();
#endif

    setup();

    for (;;) {
        loop();
        if (serialEventRun) serialEventRun();
    }

    return 0;
}

通过以上程序可见,Arduino程序中编写的setup和loop函数,都在main函数中调用了。
loop的循环执行,是通过for循环实现的,且每次loop结束后,都会进行串口事件判断,也正是因为这种设计,串口事件不能实时响应。

2、Blink-setup()、loop()函数

/*	
Blink	
等待一秒钟,点亮LED,再等待一秒钟,熄灭LED,如此循环	
*/	
// 在大多数Arduino控制板上 13号引脚都连接了一个标有“L”的LED灯
// 给13号引脚连接的设备设置一个别名“led”	
int led = 13;	
// 在板子启动或者复位重启后, setup部分的程序只会运行一次
	
void setup(){	//只运行一次
  // 将“led”引脚设置为输出状态	
  pinMode(led, OUTPUT);   	
}	
// setup部分程序运行完后,loop部分的程序会不断重复运行
void loop() 
{	
  digitalWrite(led, HIGH);   // 点亮LED	
  delay(1000);           // 等待一秒钟	
  digitalWrite(led, LOW);   // 通过将引脚电平拉低,关闭LED	
  delay(1000);           // 等待一秒钟	
}

3、常用函数

常用函数参考

  • 数字输入输出
pinMode(pin,mode);//pin为引脚,mode为模式(INPUT 输入模式;OUTPUT 输出模式;INPUT_PULLUP 输入上拉模式 )
digitalWrite(pin, value);//value=HIHG或者LOW
digitalRead(pin);//返回值为0或1
  • 模拟输入输出
    模拟引脚为A0-A5
    PWM功能的引脚为3、5、6、9、10、11
analogRead(pin);//读取模拟引脚上的0-5v模拟量,返回值为转换成0-1023的数字量
analogWrite(pin);//value指定的是PWM的脉冲宽度,范围为0~255
  • 高级输入输出
//调声函数
tone(pin, frequency);// frequency: 输出的频率,unsigned int型 duration: 方波持续的时间,单位毫秒。
tone(pin, frequency, duration);
noTone(pin);

//检测脉冲信号宽度,超声测距模块用的到
pulseIn(pin, value);//pin:需要读取脉冲的引脚;value:需要读取的脉冲类型,HIGH或LOW; 
pulseIn(pin, value, timeout);//timeout:超时时间,单位微秒,数据类型为无符号长整型。
  • 外部中断——UNO在2(int.0)、3(int.1)端口上才能检测外部中断
attachInterrupt(interrupt, ISR, mode);//interrupt:中断通道编号;ISR:中断函数名(不带参数,不返回值);
/*mode:中断模式 
*LOW		低电平触发
*HIGH		高电平触发
*FALLING	下降沿触发
*RISING		上升沿触发
*/
detachInterrupt(pin);//关中断
  • 时间运行函数
millis();//返回Arduino开机/复位到现在的开机时间,单位ms,UNO精度为4us
micros();//开机时间us
delay(unsigned long ms);//延时毫秒数
delayMicroseconds(unsigned int us);//延时微妙数,精度+-0.5us
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值