Compare commits
5 Commits
682f479771
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 92395b9bb7 | |||
| 1ddec6d054 | |||
| 0517164e42 | |||
| e7ffb29a69 | |||
| 9abfdc4243 |
20
BC1C.ATWP
20
BC1C.ATWP
@@ -155,6 +155,24 @@
|
||||
<CAN2_RX1_IRQHandler>0;0;0</CAN2_RX1_IRQHandler>
|
||||
<CAN2_SE_IRQHandler>0;0;0</CAN2_SE_IRQHandler>
|
||||
</NVIC>
|
||||
<GPIO>
|
||||
<Signal SignalName="GPIO_Output" PinName="PC0">
|
||||
<Parameters name="GPIO_Outputlevel" value="GPIO_OUTPUTLEVEL_HIGH"/>
|
||||
<Parameters name="GPIO_DriverCapability" value="GPIO_DRIVE_STRENGTH_STRONGER"/>
|
||||
</Signal>
|
||||
<Signal SignalName="GPIO_Output" PinName="PC1">
|
||||
<Parameters name="GPIO_Outputlevel" value="GPIO_OUTPUTLEVEL_HIGH"/>
|
||||
<Parameters name="GPIO_DriverCapability" value="GPIO_DRIVE_STRENGTH_STRONGER"/>
|
||||
</Signal>
|
||||
<Signal SignalName="GPIO_Output" PinName="PC2">
|
||||
<Parameters name="GPIO_Outputlevel" value="GPIO_OUTPUTLEVEL_HIGH"/>
|
||||
<Parameters name="GPIO_DriverCapability" value="GPIO_DRIVE_STRENGTH_STRONGER"/>
|
||||
</Signal>
|
||||
<Signal SignalName="GPIO_Output" PinName="PC3">
|
||||
<Parameters name="GPIO_Outputlevel" value="GPIO_OUTPUTLEVEL_HIGH"/>
|
||||
<Parameters name="GPIO_DriverCapability" value="GPIO_DRIVE_STRENGTH_STRONGER"/>
|
||||
</Signal>
|
||||
</GPIO>
|
||||
<ClockConfiguration>
|
||||
<rtcsel>0</rtcsel>
|
||||
<hext>8.000000</hext>
|
||||
@@ -214,7 +232,7 @@
|
||||
</PINInfo>
|
||||
<ProjectInfomation>
|
||||
<ProjectName>BC1C</ProjectName>
|
||||
<ProjectLocation>C:/Users/ForgotDoge/Desktop/BC2024/firmware</ProjectLocation>
|
||||
<ProjectLocation>C:/Users/evan/Desktop/BC2024</ProjectLocation>
|
||||
<ToolchainIDE>MDK_V5</ToolchainIDE>
|
||||
<KeepUserCode>true</KeepUserCode>
|
||||
<MinHeapSize>0x200</MinHeapSize>
|
||||
|
||||
@@ -25,13 +25,13 @@
|
||||
"editor.tabSize": 4,
|
||||
"editor.autoIndent": "advanced"
|
||||
},
|
||||
"EIDE.OpenOCD.ExePath": "D:/Program Files (x86)/at32_OpenOCD_V2.0.2/bin/openocd.exe",
|
||||
"EIDE.OpenOCD.ExePath": "C:/toolchains/openocd-arterytek/bin/openocd.exe",
|
||||
"workbench.colorCustomizations": {
|
||||
"activityBar.background": "#4B2301",
|
||||
"titleBar.activeBackground": "#693002",
|
||||
"titleBar.activeForeground": "#FFF9F4"
|
||||
},
|
||||
"cortex-debug.variableUseNaturalFormat": true
|
||||
"cortex-debug.variableUseNaturalFormat": false
|
||||
},
|
||||
"extensions": {
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "lwprintf.h"
|
||||
#include "by_frame.h"
|
||||
#include "by_motion.h"
|
||||
#include "by_can.h"
|
||||
|
||||
void by_messy_init(void)
|
||||
{
|
||||
@@ -12,6 +13,9 @@ void by_messy_init(void)
|
||||
void by_messy_loop(void)
|
||||
{
|
||||
uint8_t cmd = 0;
|
||||
uint8_t buff_t_u8[8] = {0};
|
||||
uint16_t buff_t_u16[4] = {0};
|
||||
float buff_t_f[2] = {0};
|
||||
uint32_t buff[BY_FRAME_DATA_NUM] = {0};
|
||||
|
||||
if (!by_frame_parse(&cmd, buff)) {
|
||||
@@ -57,14 +61,103 @@ void by_messy_loop(void)
|
||||
|
||||
case 0x41: // 设置转台 x 轴复位
|
||||
by_frame_send(cmd, buff); // 正确接收后直接返回原文
|
||||
buff_t_u8[0] = 0;
|
||||
buff_t_u8[1] = 1; // 复位模式下速度设置无效
|
||||
buff_t_f[0] = 0.0;
|
||||
memcpy(&buff_t_u8[2], &buff_t_f[0], sizeof(buff_t_f[0]));
|
||||
by_can_send_stdd(0x008, buff_t_u8, 1, 100);
|
||||
break;
|
||||
|
||||
case 0x42: // 设置转台 z 轴复位
|
||||
by_frame_send(cmd, buff); // 正确接收后直接返回原文
|
||||
buff_t_u8[0] = 0;
|
||||
buff_t_u8[1] = 5; // 设置复位速度 5
|
||||
by_can_send_stdd(0x008, buff_t_u8, 1, 100);
|
||||
break;
|
||||
|
||||
case 0x43: // 设置转台末端执行器复位
|
||||
by_frame_send(cmd, buff); // 正确接收后直接返回原文
|
||||
buff_t_u8[0] = 0;
|
||||
by_can_send_stdd(0x009, buff_t_u8, 1, 100);
|
||||
break;
|
||||
|
||||
case 0x44: // 设置 x 轴位置 (增量)
|
||||
by_frame_send(cmd, buff);
|
||||
buff_t_u8[0] = 1; // 增量模式
|
||||
buff_t_u8[1] = (uint8_t)(buff[0] & 0xFF); // 拷贝设置速度
|
||||
memcpy(&buff_t_u8[2], &buff[1], sizeof(float)); // 拷贝设置距离
|
||||
by_can_send_stdd(0x006, buff_t_u8, 8, 100);
|
||||
break;
|
||||
|
||||
case 0x46: // 设置 z 轴位置 (增量)
|
||||
by_frame_send(cmd, buff);
|
||||
buff_t_u8[0] = 1; // 增量模式
|
||||
buff_t_u8[1] = (uint8_t)(buff[0] & 0xFF); // 拷贝设置速度
|
||||
memcpy(&buff_t_u8[2], &buff[1], sizeof(float)); // 拷贝设置距离
|
||||
by_can_send_stdd(0x008, buff_t_u8, 8, 100);
|
||||
break;
|
||||
|
||||
case 0x47: // 设置 x 轴位置 (绝对)
|
||||
by_frame_send(cmd, buff);
|
||||
buff_t_u8[0] = 0; // 位置模式
|
||||
buff_t_u8[1] = (uint8_t)(buff[0] & 0xFF); // 拷贝设置速度
|
||||
memcpy(&buff_t_u8[2], &buff[1], sizeof(float)); // 拷贝设置距离
|
||||
by_can_send_stdd(0x006, buff_t_u8, 8, 100);
|
||||
break;
|
||||
|
||||
case 0x49: // 设置 z 轴位置 (绝对)
|
||||
by_frame_send(cmd, buff);
|
||||
buff_t_u8[0] = 0; // 增量模式
|
||||
buff_t_u8[1] = (uint8_t)(buff[0] & 0xFF); // 拷贝设置速度
|
||||
memcpy(&buff_t_u8[2], &buff[1], sizeof(float)); // 拷贝设置距离
|
||||
by_can_send_stdd(0x008, buff_t_u8, 8, 100);
|
||||
break;
|
||||
|
||||
case 0x50: // 设置夹爪摇臂角度
|
||||
by_frame_send(cmd, buff);
|
||||
memcpy(buff_t_f, buff, sizeof(float));
|
||||
buff_t_u16[0] = (int16_t)(buff_t_f[0]);
|
||||
by_can_send_stdd(0x009, (uint8_t *)&buff_t_u16, 2, 100);
|
||||
break;
|
||||
|
||||
case 0x51: // 设置夹爪角度
|
||||
by_frame_send(cmd, buff);
|
||||
memcpy(buff_t_f, buff, sizeof(float));
|
||||
buff_t_u16[0] = (int16_t)(buff_t_f[0]);
|
||||
by_can_send_stdd(0x00A, (uint8_t *)&buff_t_u16, 2, 100);
|
||||
break;
|
||||
|
||||
case 0x52: // 设置摄像头角度
|
||||
by_frame_send(cmd, buff);
|
||||
memcpy(buff_t_f, buff, sizeof(float));
|
||||
buff_t_u16[0] = (int16_t)(buff_t_f[0]);
|
||||
by_can_send_stdd(0x00B, (uint8_t *)&buff_t_u16, 2, 100);
|
||||
break;
|
||||
|
||||
case 0x53: // 设置顶端抓取机构角度
|
||||
by_frame_send(cmd, buff);
|
||||
memcpy(buff_t_f, buff, sizeof(float));
|
||||
buff_t_u16[0] = (int16_t)(buff_t_f[0]);
|
||||
by_can_send_stdd(0x00C, (uint8_t *)&buff_t_u16, 2, 100);
|
||||
break;
|
||||
|
||||
case 0x54: // 设置托盘角度
|
||||
by_frame_send(cmd, buff);
|
||||
memcpy(buff_t_f, buff, sizeof(float));
|
||||
buff_t_u16[0] = (int16_t)(buff_t_f[0]);
|
||||
by_can_send_stdd(0x00D, (uint8_t *)&buff_t_u16, 2, 100);
|
||||
break;
|
||||
|
||||
case 0x61: // 设置闪灯
|
||||
by_frame_send(cmd, buff);
|
||||
memcpy(buff_t_u8, buff, sizeof(buff[1]));
|
||||
gpio_bits_write(GPIOC, GPIO_PINS_3, buff_t_u8[0] ? FALSE : TRUE); // 灯条
|
||||
break;
|
||||
|
||||
case 0x62: // 设置蜂鸣器
|
||||
by_frame_send(cmd, buff);
|
||||
memcpy(buff_t_u8, buff, sizeof(buff[1]));
|
||||
gpio_bits_write(GPIOC, GPIO_PINS_2, buff_t_u8[0] ? FALSE : TRUE); // 灯条
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
@@ -55,6 +55,65 @@ extern "C" {
|
||||
|
||||
/* add user code end exported macro */
|
||||
|
||||
/* add user code begin dma define */
|
||||
/* user can only modify the dma define value */
|
||||
//#define DMA1_CHANNEL1_BUFFER_SIZE 0
|
||||
//#define DMA1_CHANNEL1_MEMORY_BASE_ADDR 0
|
||||
//#define DMA1_CHANNEL1_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA1_CHANNEL2_BUFFER_SIZE 0
|
||||
//#define DMA1_CHANNEL2_MEMORY_BASE_ADDR 0
|
||||
//#define DMA1_CHANNEL2_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA1_CHANNEL3_BUFFER_SIZE 0
|
||||
//#define DMA1_CHANNEL3_MEMORY_BASE_ADDR 0
|
||||
//#define DMA1_CHANNEL3_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA1_CHANNEL4_BUFFER_SIZE 0
|
||||
//#define DMA1_CHANNEL4_MEMORY_BASE_ADDR 0
|
||||
//#define DMA1_CHANNEL4_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA1_CHANNEL5_BUFFER_SIZE 0
|
||||
//#define DMA1_CHANNEL5_MEMORY_BASE_ADDR 0
|
||||
//#define DMA1_CHANNEL5_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA1_CHANNEL6_BUFFER_SIZE 0
|
||||
//#define DMA1_CHANNEL6_MEMORY_BASE_ADDR 0
|
||||
//#define DMA1_CHANNEL6_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA1_CHANNEL7_BUFFER_SIZE 0
|
||||
//#define DMA1_CHANNEL7_MEMORY_BASE_ADDR 0
|
||||
//#define DMA1_CHANNEL7_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA2_CHANNEL1_BUFFER_SIZE 0
|
||||
//#define DMA2_CHANNEL1_MEMORY_BASE_ADDR 0
|
||||
//#define DMA2_CHANNEL1_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA2_CHANNEL2_BUFFER_SIZE 0
|
||||
//#define DMA2_CHANNEL2_MEMORY_BASE_ADDR 0
|
||||
//#define DMA2_CHANNEL2_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA2_CHANNEL3_BUFFER_SIZE 0
|
||||
//#define DMA2_CHANNEL3_MEMORY_BASE_ADDR 0
|
||||
//#define DMA2_CHANNEL3_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA2_CHANNEL4_BUFFER_SIZE 0
|
||||
//#define DMA2_CHANNEL4_MEMORY_BASE_ADDR 0
|
||||
//#define DMA2_CHANNEL4_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA2_CHANNEL5_BUFFER_SIZE 0
|
||||
//#define DMA2_CHANNEL5_MEMORY_BASE_ADDR 0
|
||||
//#define DMA2_CHANNEL5_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA2_CHANNEL6_BUFFER_SIZE 0
|
||||
//#define DMA2_CHANNEL6_MEMORY_BASE_ADDR 0
|
||||
//#define DMA2_CHANNEL6_PERIPHERAL_BASE_ADDR 0
|
||||
|
||||
//#define DMA2_CHANNEL7_BUFFER_SIZE 0
|
||||
//#define DMA2_CHANNEL7_MEMORY_BASE_ADDR 0
|
||||
//#define DMA2_CHANNEL7_PERIPHERAL_BASE_ADDR 0
|
||||
/* add user code end dma define */
|
||||
|
||||
/* exported functions ------------------------------------------------------- */
|
||||
/* system clock config. */
|
||||
void wk_system_clock_config(void);
|
||||
|
||||
@@ -70,10 +70,10 @@
|
||||
/* add user code end external variables */
|
||||
|
||||
/**
|
||||
* @brief this function handles nmi exception.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
* @brief this function handles nmi exception.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
void NMI_Handler(void)
|
||||
{
|
||||
/* add user code begin NonMaskableInt_IRQ 0 */
|
||||
@@ -86,17 +86,18 @@ void NMI_Handler(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief this function handles hard fault exception.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
* @brief this function handles hard fault exception.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
void HardFault_Handler(void)
|
||||
{
|
||||
/* add user code begin HardFault_IRQ 0 */
|
||||
|
||||
/* add user code end HardFault_IRQ 0 */
|
||||
/* go to infinite loop when hard fault exception occurs */
|
||||
while (1) {
|
||||
while (1)
|
||||
{
|
||||
/* add user code begin W1_HardFault_IRQ 0 */
|
||||
|
||||
/* add user code end W1_HardFault_IRQ 0 */
|
||||
@@ -104,17 +105,18 @@ void HardFault_Handler(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief this function handles memory manage exception.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
* @brief this function handles memory manage exception.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
void MemManage_Handler(void)
|
||||
{
|
||||
/* add user code begin MemoryManagement_IRQ 0 */
|
||||
|
||||
/* add user code end MemoryManagement_IRQ 0 */
|
||||
/* go to infinite loop when memory manage exception occurs */
|
||||
while (1) {
|
||||
while (1)
|
||||
{
|
||||
/* add user code begin W1_MemoryManagement_IRQ 0 */
|
||||
|
||||
/* add user code end W1_MemoryManagement_IRQ 0 */
|
||||
@@ -122,17 +124,18 @@ void MemManage_Handler(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief this function handles bus fault exception.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
* @brief this function handles bus fault exception.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
void BusFault_Handler(void)
|
||||
{
|
||||
/* add user code begin BusFault_IRQ 0 */
|
||||
|
||||
/* add user code end BusFault_IRQ 0 */
|
||||
/* go to infinite loop when bus fault exception occurs */
|
||||
while (1) {
|
||||
while (1)
|
||||
{
|
||||
/* add user code begin W1_BusFault_IRQ 0 */
|
||||
|
||||
/* add user code end W1_BusFault_IRQ 0 */
|
||||
@@ -140,17 +143,18 @@ void BusFault_Handler(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief this function handles usage fault exception.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
* @brief this function handles usage fault exception.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
void UsageFault_Handler(void)
|
||||
{
|
||||
/* add user code begin UsageFault_IRQ 0 */
|
||||
|
||||
/* add user code end UsageFault_IRQ 0 */
|
||||
/* go to infinite loop when usage fault exception occurs */
|
||||
while (1) {
|
||||
while (1)
|
||||
{
|
||||
/* add user code begin W1_UsageFault_IRQ 0 */
|
||||
|
||||
/* add user code end W1_UsageFault_IRQ 0 */
|
||||
@@ -158,10 +162,10 @@ void UsageFault_Handler(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief this function handles svcall exception.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
* @brief this function handles svcall exception.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
void SVC_Handler(void)
|
||||
{
|
||||
/* add user code begin SVCall_IRQ 0 */
|
||||
@@ -173,10 +177,10 @@ void SVC_Handler(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief this function handles debug monitor exception.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
* @brief this function handles debug monitor exception.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
void DebugMon_Handler(void)
|
||||
{
|
||||
/* add user code begin DebugMonitor_IRQ 0 */
|
||||
@@ -188,10 +192,10 @@ void DebugMon_Handler(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief this function handles pendsv_handler exception.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
* @brief this function handles pendsv_handler exception.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
void PendSV_Handler(void)
|
||||
{
|
||||
/* add user code begin PendSV_IRQ 0 */
|
||||
@@ -203,10 +207,10 @@ void PendSV_Handler(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief this function handles USB Low Priority or CAN1 RX0 handler.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
* @brief this function handles USB Low Priority or CAN1 RX0 handler.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
void USBFS_L_CAN1_RX0_IRQHandler(void)
|
||||
{
|
||||
/* add user code begin USBFS_L_CAN1_RX0_IRQ 0 */
|
||||
@@ -223,10 +227,10 @@ void USBFS_L_CAN1_RX0_IRQHandler(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief this function handles USART1 handler.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
* @brief this function handles USART1 handler.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
void USART1_IRQHandler(void)
|
||||
{
|
||||
/* add user code begin USART1_IRQ 0 */
|
||||
@@ -241,10 +245,10 @@ void USART1_IRQHandler(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief this function handles USART2 handler.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
* @brief this function handles USART2 handler.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
void USART2_IRQHandler(void)
|
||||
{
|
||||
/* add user code begin USART2_IRQ 0 */
|
||||
@@ -262,10 +266,10 @@ void USART2_IRQHandler(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief this function handles USART3 handler.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
* @brief this function handles USART3 handler.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
void USART3_IRQHandler(void)
|
||||
{
|
||||
/* add user code begin USART3_IRQ 0 */
|
||||
@@ -281,10 +285,10 @@ void USART3_IRQHandler(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief this function handles TMR6 handler.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
* @brief this function handles TMR6 handler.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
void TMR6_GLOBAL_IRQHandler(void)
|
||||
{
|
||||
/* add user code begin TMR6_GLOBAL_IRQ 0 */
|
||||
@@ -299,10 +303,10 @@ void TMR6_GLOBAL_IRQHandler(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief this function handles CAN2 RX0 handler.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
* @brief this function handles CAN2 RX0 handler.
|
||||
* @param none
|
||||
* @retval none
|
||||
*/
|
||||
void CAN2_RX0_IRQHandler(void)
|
||||
{
|
||||
/* add user code begin CAN2_RX0_IRQ 0 */
|
||||
|
||||
@@ -268,9 +268,9 @@ void wk_gpio_config(void)
|
||||
gpio_init(GPIOB, &gpio_init_struct);
|
||||
|
||||
/* gpio output config */
|
||||
gpio_bits_reset(GPIOC, GPIO_PINS_0 | GPIO_PINS_1 | GPIO_PINS_2 | GPIO_PINS_3);
|
||||
gpio_bits_set(GPIOC, GPIO_PINS_0 | GPIO_PINS_1 | GPIO_PINS_2 | GPIO_PINS_3);
|
||||
|
||||
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_MODERATE;
|
||||
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
|
||||
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
|
||||
gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
|
||||
gpio_init_struct.gpio_pins = GPIO_PINS_0 | GPIO_PINS_1 | GPIO_PINS_2 | GPIO_PINS_3;
|
||||
|
||||
Reference in New Issue
Block a user