当前位置: 首页 > news >正文

使用trea完成洋桃电子1号开发板无线遥控小车

1、项目介绍:

之前购买了洋桃电子的开发板学习,刚好手里也有ESP8266模块,打算使用开发板上的模拟摇杆控制小车方向,和旋转编码器设置车速,OLED屏显示车速和方向信息,数码管显示设置车速值,触摸按键A/B控制加减速,C/D控制小车的车灯亮灭,后面发现旋转编码器和模拟摇杆的引脚冲突了,去掉了旋转编码器的设置车速功能。刚好手里还有一个ESP32-CAM模块,也放在了小车上,可以获取视频。

2、全程让trea进行开发:

3、控制效果如视频:

模拟摇杆遥控小车

4、和trea的交流:

5、main.c主程序代码:

//程序由AI生成 #include "stm32f10x.h" #include "sys.h" #include "delay.h" #include "oled0561.h" #include "adc.h" #include "JoyStick.h" #include "touch_key.h" #include "encoder.h" #include "TM1640.h" #include "usart.h" #include "i2c.h" #include "led.h" #include <string.h> #include <stdio.h> extern vu16 ADC_DMA_IN[2]; char speed_buf[32]; char light_buf[32]; u8 speed = 50; u8 set_speed = 50; u8 light = 0; u8 direction = 0; u8 last_direction = 0; u8 last_speed = 50; u8 last_light = 0; #define DIR_STOP 0 #define DIR_FORWARD 1 #define DIR_BACKWARD 2 #define DIR_LEFT 3 #define DIR_RIGHT 4 #define CMD_STOP 0x00 #define CMD_FORWARD 0x01 #define CMD_BACKWARD 0x02 #define CMD_RIGHT 0x04 #define CMD_LEFT 0x08 #define CMD_FORWARD_RIGHT 0x05 #define CMD_FORWARD_LEFT 0x09 #define CMD_BACKWARD_RIGHT 0x06 #define CMD_BACKWARD_LEFT 0x0A #define KEY_A 1 #define KEY_B 2 #define KEY_C 3 #define KEY_D 4 char *dir_str[] = {"STOP ", "FORWARD", "BACK ", "LEFT ", "RIGHT "}; u8 TOUCH_KEY_Scan(void) { if(GPIO_ReadInputDataBit(TOUCH_KEYPORT, TOUCH_KEY_A) == 0) { delay_ms(10); if(GPIO_ReadInputDataBit(TOUCH_KEYPORT, TOUCH_KEY_A) == 0) return KEY_A; } if(GPIO_ReadInputDataBit(TOUCH_KEYPORT, TOUCH_KEY_B) == 0) { delay_ms(10); if(GPIO_ReadInputDataBit(TOUCH_KEYPORT, TOUCH_KEY_B) == 0) return KEY_B; } if(GPIO_ReadInputDataBit(TOUCH_KEYPORT, TOUCH_KEY_C) == 0) { delay_ms(10); if(GPIO_ReadInputDataBit(TOUCH_KEYPORT, TOUCH_KEY_C) == 0) return KEY_C; } if(GPIO_ReadInputDataBit(TOUCH_KEYPORT, TOUCH_KEY_D) == 0) { delay_ms(10); if(GPIO_ReadInputDataBit(TOUCH_KEYPORT, TOUCH_KEY_D) == 0) return KEY_D; } return 0; } u8 GetCarCmd(void) { u8 cmd = 0; switch(direction) { case DIR_STOP: cmd = CMD_STOP; break; case DIR_FORWARD: cmd = CMD_FORWARD; break; case DIR_BACKWARD: cmd = CMD_BACKWARD; break; case DIR_LEFT: cmd = CMD_LEFT; break; case DIR_RIGHT: cmd = CMD_RIGHT; break; } if(light) cmd |= 0x10; else cmd |= 0x20; return cmd; } void SendCarCmd(void) { u8 cmd = GetCarCmd(); char packet[16]; sprintf(packet, "!C%02X%02X\r\n", cmd, speed); GPIO_WriteBit(LEDPORT, LED2, (BitAction)(1)); USART3_printf(packet); GPIO_WriteBit(LEDPORT, LED2, (BitAction)(0)); } int main (void){ u8 key; delay_ms(2000); RCC_Configuration(); ENCODER_Init(); TM1640_Init(); LED_Init(); TOUCH_KEY_Init(); JoyStick_Init(); ADC_Configuration(); I2C_Configuration(); OLED0561_Init(); OLED_DISPLAY_CLEAR(); USART3_Init(115200); // LED1涓嶅啀闂儊 OLED_DISPLAY_8x16_BUFFER(6, (u8*)"CONFIG ESP8266.."); USART3_printf("AT+CWMODE=1\r\n"); delay_ms(500); USART3_printf("AT+CWJAP=\"ESP32-C3-Car\",\"12345678\"\r\n"); delay_ms(2000); USART3_printf("AT+CIPSTART=\"UDP\",\"192.168.4.1\",8888\r\n"); delay_ms(500); USART3_printf("AT+CIPMODE=1\r\n"); delay_ms(500); USART3_printf("AT+CIPSEND\r\n"); delay_ms(500); OLED_DISPLAY_8x16_BUFFER(6, (u8*)"ESP8266 OK! "); delay_ms(1000); OLED_DISPLAY_8x16_BUFFER(6, (u8*)"READY TO GO! "); while(1) { key = TOUCH_KEY_Scan(); if(key == KEY_A) { if(speed < 255) speed += 10; if(set_speed < 255) set_speed += 10; } else if(key == KEY_B) { if(speed > 0) speed -= 10; if(set_speed > 0) set_speed -= 10; } else if(key == KEY_C) { light = 1; } else if(key == KEY_D) { light = 0; } if(ADC_DMA_IN[1] > 2600) direction = DIR_FORWARD; else if(ADC_DMA_IN[1] < 1600) direction = DIR_BACKWARD; else if(ADC_DMA_IN[0] < 1600) direction = DIR_LEFT; else if(ADC_DMA_IN[0] > 2600) direction = DIR_RIGHT; else direction = DIR_STOP; TM1640_display(0, speed / 100); TM1640_display(1, (speed / 10) % 10); TM1640_display(2, speed % 10); OLED_DISPLAY_8x16_BUFFER(0, (u8*)dir_str[direction]); sprintf(speed_buf, "SPEED:%3d ", speed); OLED_DISPLAY_8x16_BUFFER(2, (u8*)speed_buf); if(light) { OLED_DISPLAY_8x16_BUFFER(4, (u8*)"LIGHT ON "); } else { OLED_DISPLAY_8x16_BUFFER(4, (u8*)"LIGHT OFF "); } // 鍙湪鐘舵€佸彉鍖栨椂鎵嶅彂閫佹暟鎹? if(direction != last_direction || speed != last_speed || light != last_light) { SendCarCmd(); last_direction = direction; last_speed = speed; last_light = light; } delay_ms(50); } }
http://www.jsqmd.com/news/765328/

相关文章:

  • 巨果西西是新品牌可以加盟吗?社区水果品牌发展解析 - 品牌排行榜
  • Yoda:基于Python的AI增强型命令行个人助理开发指南
  • 2026年采购者如何筛选鼓风干燥箱?实测口碑避坑指南 - 速递信息
  • 猫抓浏览器插件:5分钟掌握网页资源嗅探终极技巧,轻松下载视频音频图片
  • ROS Noetic下,用Python和C++分别实现Topic通信,我踩过的坑你别再踩了
  • 2026年Q2金华值得信赖的儿童玩具/PVC搪胶玩具/毛绒公仔/婴儿家政培训模型生产合作伙伴? - 2026年企业推荐榜
  • VLC媒体播放器终极指南:免费开源的多格式播放解决方案
  • 终极指南:使用Defender Control免费开源工具完全掌控Windows Defender防护
  • 如何用LinkSwift网盘直链下载助手告别限速烦恼:完整免费教程
  • Simple Live:基于Dart+Flutter的跨平台直播聚合架构设计与性能优化实践
  • 视频扩散模型与深度估计的鲁棒性优化实践
  • VSCode 2026在飞腾D2000+银河麒麟V10 SP3上频繁崩溃?揭秘底层glibc版本冲突与3步热修复方案(含patch脚本)
  • 如何高效使用技术分析工具:专业交易者的完整攻略
  • CSCN星网APP上线运行 - 速递信息
  • 高通8155平台XBL启动流程保姆级拆解:从PBL到UEFI Shell的完整代码追踪
  • 2026年5月宿迁企业如何选择可靠的电动伸缩门/悬浮门/智能平移门品牌? - 2026年企业推荐榜
  • 告别混乱布局!用eGUI的Panel在Rust里快速搭建桌面应用界面(附完整可运行代码)
  • Element-ui表格进阶:从‘能用’到‘好用’,聊聊el-table勾选功能的设计哲学与最佳实践
  • 电子制造产线升级:如何用一台设备搞定多路外观检测?
  • AI智能体规则管理框架agentrules:从原理到实战的声明式控制方案
  • 中小企业商用算力平台测评:低成本 AI 转型的破局之道与长期租用性价比深度解析
  • ComfyUI模型下载加速终极指南:三倍速度提升的完整教程
  • c++14的常用新特性
  • 【2026实战】Go与Python Agent通信机制:gRPC与消息队列深度解析
  • 上海用户如何找到专业的超净工作台销售厂家?2026年实测方案 - 速递信息
  • 使用 Taotoken 为你的 Node.js 后端服务稳定接入多模型能力
  • 架构优先:H5GG引擎的iOS逆向工程方法论
  • 北京就医陪诊科普指南:读懂就医流程 选对专业陪诊 守护就医之路 - 品牌排行榜单
  • 隐式推理驱动的AIGC图像生成技术解析
  • 阿里云OSS实战:用Java SDK实现大文件分片上传和断点续传(附完整代码)