使用digitalWrite(pin, value)来设置输出状态,value可选值为HIGH或LOW,即1和0;
使用digitalRead(pin)来读取GPIO口电平,返回值为HIGH或LOW,即1和0;
题外话:请注意ESP32的IO12,这个IO口上上电时的电平会决定外部flash(存放程序的那颗)的工作电压,上电时该脚为高则认为flash工作于1.8V,为低则认为flash工作于3.3V。常用的像是Wroom-32系列模块该脚内部已下拉,即flash是工作于3.3V的,若外部电路接强上拉则可能导致模块工作异常。
外部中断
外部中断使用方式如下:
使用attachInterrupt(uint8_t pin, void (*)(void), int mode)或attachInterruptArg(uint8_t pin, void (*)(void*), void * arg, int mode)来设置外部中断,输入参数有gpio号、中断触培陆蚂发时的回调函数、回调函数输入参数、外部中断触发模式(RISING、FALLING、CHANGE……上升沿、下配埋降沿、改变时、低电平、高电平等);
使用detachInterrupt(uint8_t pin)来关闭外部中断;
使用示例
使用下面代码进行测试:
// IO14 输出
// IO12 下拉输入模式 电平改变触发中断
// 使用导线连接 IO14 和 IO12
void callBack(void)
{
int lv = digitalRead(12)//读取加载到IO12上的电平
Serial.printf("触发了中断,当前电平是: %d\n", lv)
}
void setup()
{
Serial.begin(115200)
Serial.pr
小白自学arduino,关于IO口include <PID_v1.h>
#include <LMotorController.h>
#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
#include "Wire.h"
#endif
#define LOG_INPUT 0
#define MANUAL_TUNING 0
#define LOG_PID_CONSTANTS 0 //MANUAL_TUNING must be 1
#define MOVE_BACK_FORTH 1
#define MIN_ABS_SPEED 50
//MPU
MPU6050 mpu
// MPU control/status vars
bool dmpReady = false // set true if DMP init was successful
uint8_t mpuIntStatus // holds actual interrupt status byte from MPU
uint8_t devStatus // return status after each device operation (0 = success, !0 = error)
uint16_t packetSize // expected DMP packet size (default is 42 bytes)
uint16_t fifoCount// count of all bytes currently in FIFO
uint8_t fifoBuffer[64]// FIFO storage buffer
看情况,有两种情况:一种是单片机的IO口是强上拉(发射极开路),可以按5V算,最大输出电流可以到20mA(有些甚至可以到100mA)另一种是弱上拉渗搭,用万用表测试也是5V但是输出电流很微弱。(内部电路属于携喊轿集电极开辩肆路),我们使用过程中需要加上拉,或者用灌电流 。也有些单片几功能比较强大,把IO的电流走做得比较大的。像PIC。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)