arduino i2c 如何写16位寄存器_arduino入门

硬件:Arduino Uno是基于ATmega328P(数据表)的微控制器板。它具有14个数字输入/输出引脚(其中6个可用作PWM输出),6个模拟输入,工作电压5v,输入电压7-12v。

1d74cb54d84ba7b9569e767f8095afed.png

  • 串行:0(RX)和1(TX)用于接收(RX)和发送(TX)TTL串行数据。这些引脚连接到ATmega8U2 USB-to-TTL串行芯片的相应引脚。

  • 外部中断:2和3。这些引脚可以配置为在低值,上升沿或下降沿或值改变时触发中断。

  • PWM:3、5、6、9、10和11。提供带有AnalogWrite()函数的8位PWM输出。

  • SPI:10(SS),11(MOSI),12(MISO),13(SCK)。这些引脚支持使用SPI库的SPI通信。

  • LED:13.有一个由数字引脚13驱动的内置LED。当该引脚为HIGH值时,该LED点亮;当该引脚为LOW时,其熄灭

  • Uno有6个模拟输入,标记为A0至A5,每个模拟输入提供10位分辨率(即1024个不同值)。默认情况下,它们的测量范围是从地到5伏。

(官网的描述)

软件:arduino IDE(浏览器可以直接搜到)

https://www.arduino.cc/en/Main/software

根据自己电脑的系统下载安装即可

使用:

        1、安装arduino软件一路next就可以,可以安装在别的盘

        2、通过USB连接板子,在工具选项中选择USB的端口(COM口)

        3、编译程序,然后烧录

    例子:Hello world!

        程序:

void setup() { Serial.begin (9600);//串行端口开始,设置波特率}void loop(){  Serial.print("Hello world!\n");//通过串口Hello world!  delay(1000);//每隔1s打印一次 }

0e54381a74de253707b26624193ec98c.png         工具---->串口监视器

51027adca094f44d907cd83e4b4c9427.png

    arduino 常用的函数

  •  Arduino 的基本程序由 setup() 和 loop() 组成,这两个函数是必须的。

void setup(){  // setup代码,它只会运行一次:}void loop() {  // loop代码,它会不断重复运行:}
  • 还有很多常用的可以搜的到:

        链接

https://www.arduino.cc/reference/en/https://www.jianshu.com/p/e1e2618e7e5a

其他:

    1、串口:

        串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。

            一般用来传输数据的有两根线一根是发送(tx)一根是接收(rx),arduino上面也有,可以通过串口助手进行相应的操作,板间通信等。

    2、I2C

       I2C和串口类似,硬件实现简单,可扩展性强,不需要USART、CAN等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯 。实现I2C需要两根信号线完成信息交换,SCL时钟信号线,SDA数据输入/输出线。它属于同步通信,由于输入输出数据均使用一根线,因此通信方向为半双工(可以查一下)。  

        常见的模块像MPU6050(陀螺仪)就有,还有一些I2C的OLED等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
配送一个自己的串口驱动程序 用DMA接收数据 接收完会产生一个空闲中断 由此可判断接收完一个包的数据 再配送一个我自己的动态内存管理 跟ESP8266的驱动 在项目中测试460800的波特率 30kb一秒的数据接收 一包1024个字节 每包需要应答15字节的情况下 AT指令处理是使用多个缓冲级来处理模块发送过来的数据 分别有模块应答缓冲级 跟等待应答的缓冲级、被忽略的AT指令集的缓冲级(例如注册一个SEND OK\r\n则模块应答此条指令立刻清除缓冲级释放内存无需等待超时直接忽略)还有需要回调的缓冲级(则出现此指令调用回调函数)都是通过注册的方式来实现 如果出现一包跟指令被分到一个包内 AT处理函数一样可以搜索到AT指令 使用strstr函数来实现 函数的缓冲级都是指针不占用内存 使用动态内存管理的方式 有数据则创建内存放入数据作为一个缓冲级 如果模块应答的数据在规定的时间内没有响应则删除此缓冲级 函数前都有注释介绍 下面介绍一些常用的函数: at_init初始化一些变量已经串口 at_time_task使用定时器回调 1毫秒回调一次 用来计数超时的指令缓冲&等待超时的计数 at_clear_all 在模块开机的时候可能会有很多乱数据 可以在初始化完毕后使用此函数清除所有缓冲级 释放所有内存 at_processing处理AT的应答超时的指令(做删除释放内存的动作),还有处理等待的AT指令 此函数一定要不断循环处理 可以加入到定时器 目前我实验是在UCOS上的 所以直接创建个任务来执行此函数 当程序在等待某个AT指令的时候此函数会寻找接收的缓冲级是否有等待的AT指令 at_cmd_cb_hand回调处理函数 如果接收缓冲级出现某个已经注册的指令则回调注册时所填的函数地址 at_send_cmd 发送一个AT指令 可以用跟printf一样使用 %d等等 at_send_data 发送数据的时候所使用 需要填长度 at_cmd_ignore_register 注册一个被忽略的AT指令 带入参数 *s (例如填一个"SEND OK" 则模块应答的此条指令直接被忽略 释放内存 被忽略之前会检查此缓冲级会不会带有别的AT指令需要回调的) at_cmd_ignore_cancel 取消被忽略的指令 则取消已经注册的被忽略的AT指令 at_cmd_cb_register AT指令的回调注册 例如参数填"+IPD",函数名a 则出现+IPD的时候回调a函数 a函数有类型 在at.h文件里面有 at_cmd_cb_cancel注销回调你懂得 at_wait_cmd 等待一个AT指令集或者超时则立刻返回 等待途中会不断调用OS的延迟程序 让系统能有时间去执行其他任务 使用方法例如{ at_send_cmd("AT+UART=%u,%u,%u,%u,%u\r\n",baudrate,databit,stopbit,parity,flow_control); return (esp_error)at_wait_cmd("\r\nOK\r\n",2000,NULL); } at_error at_wait2_cmd(char *s,char *s2,u16 timeout,u8 *index) 此函数是等待两个AT指令集 如果出现一个则立刻返回 返回值h文件有介绍 AT_DONE则出现此条指令 index参数则提取应答的缓冲首地址 使用at_buf_get函数获取首地址 使用完后要调用at_free_buf来清除并释放这个缓冲级 at_buf_len_get查询此应答的缓冲级长度 如果在index填NULL则不需要缓冲级首地址 直接清除释放缓冲级

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值