# I/O (GPIO/ADC/DAC/PWM) *Refer to Arduino API of [Arduino](http://www.arduino.cc)* **M5STACK 引脚排列:** | pin No | Name |allocation| | --- | --- | --- | | 0 | G0 |downloader | | 1 | T1 |UART | | 2 | G2 |Side terminal (except M5FIRE),M5-BUS| | 3 | R1 |UART | | 4 | G4 |TF| | 5 | G5 |Side terminal (except M5FIRE),M5-BUS| | 6 | G6 |SDIO | | 7 | G7 |SDIO | | 8 | G8 |SDIO | | 9 | G9 |SDIO | | 10 | G10 |SDIO | | 11 | G11 |SDIO | | 12 | G12 |IIS_SCLK | | 13 | G13 |IIS_WS | | 14 | G14 |LCD | | 15 | G15 |IIS_OUT | | 16 | R2 |UART | | 17 | T2 |UART | | 18 | G18 |TF,Top terminal(SCK),M5-BUS| | 19 | G19 |TF,Top terminal(MISO),M5-BUS| | 21 | G21 |GROVE-A(SDA)| | 22 | G22 |GROVE-A(SCL)| | 23 | G23 |TF,Top terminal(MOSI)| | 25 | G25 |Speaker,Side terminal (except M5FIRE),M5-BUS| | 26 | G26 |Side terminal (except M5FIRE),M5-BUS| | 27 | G27 |LCD | | 32 | G32 |LCD BackLight | | 33 | G33 |LCD | | 34 | G34 |None | | 35 | G35 |Side terminal (except M5FIRE)| | 36 | G36 |Side terminal (except M5FIRE)| | 37 | G37 |Button C| | 38 | G38 |Button B| | 39 | G39 |Button A| ## digitalRead() **函数原型:** `int digitalRead(uint8_t pin);` **功能:** 读取引脚的状态。 **参数** | 参数 | 类型 | 描述 | | --- | --- | --- | | pin | uint8 |Pin No | **返回值:** 引脚输入状态(0/1) **注意** 1)如果引脚模式未设置为INPUT,则不会返回正确的结果。 2)如果控制线中有其他电路,它们将受到影响。 **使用示例;** ```clike uint32_t pin21_data; pin21_data = digitalRead(21); ``` ## digitalWrite() **函数原型:** `void digitalWrite(uint8_t pin, uint8_t val);` **功能:** 向引脚写入值 **参数** | 参数 | 类型 | 描述 | | --- | --- | --- | | pin | uint8 |pin No | | val | uint8 |输出状态(0/1) | **返回值:** 无。 **注意** 1)如果引脚模式未设置为OUTPUT,则不会返回正确的结果。 2)请注意,如果控制线中有其他电路,则可能会造成物理损坏。 **使用示例;** ```clike digitalWrite(2,1); ``` ## pinMode() **函数原型:** `void pinMode(uint8_t pin, uint8_t mode);` **功能:** 设置引脚输入/输出模式。 **参数** | 参数 | 类型 | 描述 | | --- | --- | --- | | pin | uint8 |pin No | | mode | uint8 |INPUT,OUTPUT,INPUT_PULLUP 的任何一个| **返回值:** 无。 **注意** 如果总线上有其他电路,请注意可能存在物理损坏。 例如,当扬声器(G25)端子设置为INPUT模式时,流向扬声器的电流使主单元产生热量。 确保操作正确,因为存在损坏风险。 **使用示例;** ```clike pinMode(2,INPUT); ``` ## analogRead() **函数原型:** `uint16_t analogRead(uint8_t pin);` **功能:** 读取模拟引脚的值。 **参数** | 参数 | 类型 | 描述 | | --- | --- | --- | | pin | uint8 |pin No | **返回值:** 阅读结果。响应的最大值由analogSetWidth()确定。 **注意** G35和G36可用于M5Stack。 **使用示例;** ```clike uint16_t ret; ret=analogRead(35); ``` ## dacWrite() **函数原型:** `void dacWrite(uint8_t pin, uint8_t value);` **功能:** dac输出到指定引脚 **参数** | 参数 | 类型 | 描述 | | --- | --- | --- | | pin | uint8 |pin No | | value | uint8 |设定输出电压 | **返回值:** 无。。 **注意** G25和G26可用于M5Stack。 **使用示例;** ```clike dacWrite(25,0x40); ``` ## ledcSetup() **函数原型:** `double ledcSetup(uint8_t channel, double freq, uint8_t resolution_bits);` **功能:** 设置占空比输出 **参数** | 参数 | 类型 | 描述 | | --- | --- | --- | | channel | uint8 |channel (0~15) | | freq | double |frequency (Hz) | | resolution_bits | uint8_t |占空比指示的满量程位数| **返回值:** Actual output frequency. **注意** 通道和GPIO端口号不相同。 它应该被识别为用于存储设置的数字。 ## ledcAttachPin() **函数原型:** `void ledcAttachPin(uint8_t pin, uint8_t chan);` **功能:** 指定引脚. **参数** | 参数 | 类型 | 描述 | | --- | --- | --- | | pin | uint8_t |pin No) | | chan | uint8_t |渠道(0~15) | **返回值:** 无。 ## ledcWrite() **函数原型:** `void ledcWrite(uint8_t chan, uint32_t duty);` **功能:** 输出具有指定的占空比值 **参数** | 参数 | 类型 | 描述 | | --- | --- | --- | | chan | uint8_t |渠道(0~15) | | duty | uint32_t |比 | **返回值:** 无。 **注意** 占空比取决于初始化时设置的位比例。 使用8位指定时,指定0xFF会导致100%输出。 ## ledcDetachPin() **函数原型:** `void ledcDetachPin(uint8_t pin);` **功能:** 释放指定的端口并停止输出。 **参数** | 参数 | 类型 | 描述 | | --- | --- | --- | | pin | uint8_t |pin No | **返回值:** 无。 ## adcAttachPin() **函数原型:** `bool adcAttachPin(uint8_t pin)` **功能:** 非阻塞模式.连接设定引脚到ADC . **函数参数** | 函数参数 | 类型 | 描述 | | --- | --- | --- | | pin | uint8_t | 指定引脚 | **函数返回值:** 设置成功返回1 ## adcBusy() **函数原型:** `bool adcBusy(uint8_t pin)` **功能:** 非阻塞模式,检查adc转换是否进行中. **函数参数** | 函数参数 | 类型 | 描述 | | --- | --- | --- | | pin | uint8_t | 指定引脚 | **函数返回值:** 转换中返回1 ## adcEnd() **函数原型:** `uint16_t adcEnd(uint8_t pin)` **功能:** 非阻塞模式,返回转换结果,如果未转换完成等待完成. **函数参数** | 函数参数 | 类型 | 描述 | | --- | --- | --- | | pin | uint8_t | 指定引脚 | **函数返回值:** 返回转换结果 ## adcStart() **函数原型:** `bool adcStart(uint8_t pin)` **功能:** 非阻塞模式,开启adc转换. **函数参数** | 函数参数 | 类型 | 描述 | | --- | --- | --- | | pin | uint8_t | 指定引脚 | **函数返回值:** 成功开启返回1 ## analogReadResolution() **函数原型:** `void analogReadResolution(uint8_t bits)` **功能:** 设置模拟数据读取分辨率,取值1~16,默认为12。如果介于9和12之间,它将等于设置的硬件分辨率,否则值将被移动. **函数参数** | 函数参数 | 类型 | 描述 | | --- | --- | --- | | bits | uint8_t | 采样分辨率 | **函数返回值:** None ## analogSetAttenuation() **函数原型:** `void analogSetAttenuation(adc_attenuation_t attenuation)` **功能:** 设置ADC全局输入衰减,取值ADC_0db, ADC_2_5db, ADC_6db, ADC_11db,默认为11db **函数参数** | 函数参数 | 类型 | 描述 | | --- | --- | --- | | attenuation | adc_attenuation_t | 衰减值 | **函数返回值:** None ## analogSetCycles() **函数原型:** `void analogSetCycles(uint8_t cycles)` **功能:** 设置采样周期1-255,默认为8. **函数参数** | 函数参数 | 类型 | 描述 | | --- | --- | --- | | cycles | uint8_t | sampling period | **函数返回值:** None ## analogSetPinAttenuation() **函数原型:** `void analogSetPinAttenuation(uint8_t pin, adc_attenuation_t attenuation)` **功能:** 设置某个单独引脚衰减 **函数参数** | 函数参数 | 类型 | 描述 | | --- | --- | --- | | pin | uint8_t | specified pin | | attenuation | adc_attenuation_t | 衰减值 | **函数返回值:** None ## analogSetSamples() **函数原型:** `void analogSetSamples(uint8_t samples)` **功能:** 设置单次采样的实际采样倍数,取值1-255,默认为1,实际效果为提高adc灵敏度,采样次数扩大N倍; **函数参数** | 函数参数 | 类型 | 描述 | | --- | --- | --- | | samples | uint8_t | 采样倍数 | **函数返回值:** None ## analogSetWidth() **函数原型:** `void analogSetWidth(uint8_t bits)` **功能:** 设置adc采样分辨率9-12,默认为12. **函数参数** | 函数参数 | 类型 | 描述 | | --- | --- | --- | | bits | uint8_t | 采样分辨率 | **函数返回值:** None ## attachInterrupt() **函数原型:** `void attachInterrupt(pin, ISR(callback function), interrupt type/mode)` **功能:** 设置引脚中断. **函数参数** | 函数参数 | 类型 | 描述 | | --- | --- | --- | | pin | uint8_t | 引脚 | | ISR | callcack function | 回调函数 | | interrupt | mode | 触发类型 | **函数返回值:** None. ## detachInterrupt() **函数原型:** `void detachInterrupt(pin)` **功能:** Prohibit specified pin interruptio. **函数参数** | 函数参数 |类型 |功能 | | --- | --- | --- | | pin | uint8_t | pin No. | **函数返回值:** None. ## hallRead() **函数原型:** `int hallRead(void));` **功能:** 读取霍尔传感器. **函数参数** None **函数返回值:** int. ## ledcRead() **函数原型:** `uint32_t ledcRead(uint8_t channel)` **功能:** 返回指定通道的占空比. **函数参数** | 函数参数 | 类型 | 描述 | | --- | --- | --- | | channel | uint8_t | 指定通道 | **函数返回值:** 占空比 ## ledcReadFreq() **函数原型:** `double ledcReadFreq(uint8_t channel)` **功能:** 返回当前通道频率. **函数参数** | 函数参数 |类型 | 描述 | | --- | --- | --- | | channel | uint8_t | 指定通道 | **函数返回值:** 通道频率