小车nfc模块检测不同卡片播发不同声音,和上一个设计差不多,就是实现一个类似公交车刷卡播报到哪一战的效果

1、项目简介

2、实现逻辑

#见简介

3、应用场景

#公交站到站播报

4、核心代码梳理

//全局变量定义
unsigned int speed_count=0;//占空比计数器 50次一周期
char front_left_speed_duty=SPEED_DUTY;
char front_right_speed_duty=SPEED_DUTY;
char behind_left_speed_duty=SPEED_DUTY;
char behind_right_speed_duty=SPEED_DUTY;unsigned char tick_5ms = 0;//5ms计数器,作为主函数的基本周期
unsigned char tick_1ms = 0;//1ms计数器,作为电机的基本计数器
unsigned char tick_200ms = 0;//刷新显示char ctrl_comm = COMM_STOP;//控制指令
char ctrl_comm_last = COMM_STOP;//上一次的指令
unsigned char continue_time=0;
unsigned char bt_rec_flag=0;//蓝牙控制标志位char id_sound = 0;int main(void)
{delay_init();GPIOCLKInit();UserLEDInit();LCD1602Init();//IRCtrolInit();TIM2_Init();MotorInit();ServoInit();MeasureInit();RedRayInit();//USART3Conf(9600);USART2Conf(9600);while(1){     if(tick_5ms >= 5){tick_5ms = 0;tick_200ms++;if(tick_200ms >= 40){tick_200ms = 0;LEDToggle(LED_PIN);LCD1602WriteSpeed(front_left_speed,front_right_speed);}
//          continue_time--;//200ms 无接收指令就停车
//          if(continue_time == 0)
//          {//              continue_time = 1;
//              CarStop();
//          }//do somethingMeasureSpeed();LCD1602WriteCommand(ctrl_comm);VoidRun();}///声音控制相关if(id_sound != 0){CarStop();if(id_sound == 1){IO1_RESET;Delayms(2000);}else if(id_sound == 2){IO2_RESET;Delayms(2000);}else if(id_sound == 3){IO3_RESET;Delayms(2000);}Delayms(5000);IO1_SET;IO2_SET;IO3_SET;id_sound = 0;}}
}void CarMove(void)
{   BEHIND_RIGHT_EN;//左前轮/*if(front_left_speed_duty > 0)//向前{if(speed_count < front_left_speed_duty){FRONT_LEFT_GO;}else{FRONT_LEFT_STOP;}}else if(front_left_speed_duty < 0)//向后{if(speed_count < (-1)*front_left_speed_duty){FRONT_LEFT_BACK;}else{FRONT_LEFT_STOP;}}else                //停止{FRONT_LEFT_STOP;}*///右前轮if(front_right_speed_duty > 0)//向前{if(speed_count < front_right_speed_duty){FRONT_RIGHT_GO;}else                //停止{FRONT_RIGHT_STOP;}}else if(front_right_speed_duty < 0)//向后{if(speed_count < (-1)*front_right_speed_duty){FRONT_RIGHT_BACK;}else                //停止{FRONT_RIGHT_STOP;}}else                //停止{FRONT_RIGHT_STOP;}//左后轮if(behind_left_speed_duty > 0)//向前{if(speed_count < behind_left_speed_duty){BEHIND_LEFT_GO;}  else                //停止{BEHIND_LEFT_STOP;}}else if(behind_left_speed_duty < 0)//向后{if(speed_count < (-1)*behind_left_speed_duty){BEHIND_LEFT_BACK;}else                //停止{BEHIND_LEFT_STOP;}}else                //停止{BEHIND_LEFT_STOP;}//右后轮/*if(behind_right_speed_duty > 0)//向前{if(speed_count < behind_right_speed_duty){BEHIND_RIGHT_GO;}   else                //停止{BEHIND_RIGHT_STOP;}}else if(behind_right_speed_duty < 0)//向后{if(speed_count < (-1)*behind_right_speed_duty){BEHIND_RIGHT_BACK;}  else                //停止{BEHIND_RIGHT_STOP;}}else                //停止{BEHIND_RIGHT_STOP;}*/
}//向前
void CarGo(void)
{//front_left_speed_duty=SPEED_DUTY+30;behind_left_speed_duty=SPEED_DUTY-10;front_right_speed_duty=SPEED_DUTY-10;//behind_right_speed_duty=SPEED_DUTY;
}//后退
void CarBack(void)
{//front_left_speed_duty=-SPEED_DUTY;front_right_speed_duty=-SPEED_DUTY;behind_left_speed_duty=-SPEED_DUTY;//behind_right_speed_duty=-SPEED_DUTY;
}//向左
void CarLeft(void)
{//front_left_speed_duty=-10;front_right_speed_duty=SPEED_DUTY+10;behind_left_speed_duty=-30;// behind_right_speed_duty=SPEED_DUTY+60;//增加后轮驱动力
}//向右
void CarRight(void)
{// front_left_speed_duty=SPEED_DUTY;front_right_speed_duty=-20;behind_left_speed_duty=SPEED_DUTY+5;//增加后轮驱动力// behind_right_speed_duty=SPEED_DUTY;
}//停止
void CarStop(void)
{//front_left_speed_duty=0;front_right_speed_duty=0;behind_left_speed_duty=0;// behind_right_speed_duty=0;
}void MotorInit(void)
{MotorGPIO_Configuration();CarStop();
}循迹,通过判断三个光电对管的状态来控制小车运动
void SearchRun(void)
{//三路都检测到if(SEARCH_L_IO == BLACK_AREA && SEARCH_M_IO == BLACK_AREA && SEARCH_R_IO == BLACK_AREA )  //三路黑线停止{CarStop();//ctrl_comm = COMM_UP;  //前进//return;}else if(SEARCH_L_IO == WHITE_AREA && SEARCH_M_IO ==BLACK_AREA && SEARCH_R_IO ==BLACK_AREA)//右{CarRight();//ctrl_comm = COMM_RIGHT;}else if(SEARCH_L_GPIO ==WHITE_AREA && SEARCH_M_IO ==WHITE_AREA && SEARCH_R_IO ==BLACK_AREA){CarRight();}else if(SEARCH_L_IO == BLACK_AREA && SEARCH_M_IO ==BLACK_AREA && SEARCH_R_IO ==WHITE_AREA)//左{CarLeft();//ctrl_comm = COMM_LEFT;}else if(SEARCH_L_IO ==BLACK_AREA && SEARCH_M_IO ==WHITE_AREA && SEARCH_R_IO ==WHITE_AREA){CarLeft();}else if( SEARCH_L_IO == WHITE_AREA && SEARCH_M_IO == BLACK_AREA && SEARCH_R_IO ==WHITE_AREA)//中{CarGo();//ctrl_comm = COMM_UP;}else if(SEARCH_L_IO ==BLACK_AREA && SEARCH_M_IO==WHITE_AREA && SEARCH_R_IO==BLACK_AREA){CarGo();}else if(SEARCH_L_IO ==WHITE_AREA && SEARCH_M_IO ==WHITE_AREA && SEARCH_R_IO ==WHITE_AREA){CarGo();}}

5、部分参考资料

#用的JQ8900-16P语音模块
#nfc模块也是现成的,检测到卡片通过串口向mcu发送卡号

6、注意事项

#卡号提前已经写死在小车程序里面了

完整可运行项目地址

技能梳理23@语音模块+stm32+nfc相关推荐

  1. 技能梳理37@stm32+按键+光耦+锁存+串行转并行+继电器

    技能梳理37@stm32+按键+光耦+锁存+串行转并行+继电器 1.项目简介 2.实现逻辑 3.应用场景 #主从机有线控制 #开关操作 4.核心代码梳理 //根据按下的按键执行相应的操作 void h ...

  2. 【业务建模_5】数据分析师技能梳理

    [业务建模_5]数据分析师技能梳理 大纲 1.固定报表提炼 产品侧 活动侧 重点功能侧 2.固有分析模块工具 事件+多维度 漏斗+多维度 留存+多维度 3.临时需求+SQL模板+临时报表 4.用户画像 ...

  3. 技能梳理18@stm32+柔性墨水屏+薄膜按键+二维码

    薄膜压力按键控制mos开关,切换给柔性墨水屏vcc供电方式,单片机控制vcc切换图像,其中有可以扫描的二维码 1.项目简介 2.实现逻辑 #有两个薄膜按键,一个控制墨水屏供电方式(其实就是一个继电器) ...

  4. 技能梳理14@stm32+esp8266+ds18b20+红外传感器+烟雾传感器+CO传感器+蜂鸣器

    画板子,有至少8个io口(分别连ds18b20.红外传感器.烟雾传感器.CO传感器,后面3个传感器都是检测到就发高电平),2个串口,1个蜂鸣器,nbiot用的YED-C724 核心板(AIR724) ...

  5. 技能梳理17@Rasphberry Pi 3B+stm32+dht11+lora+onenet

    dht11检测出到温湿度,通过lora传输到树莓派,树莓派传输到onenet,收发处理用了两块stm32开发板 1.项目简介 2.实现逻辑 #从机stm32检测到温湿度通过lora传给主机stm32 ...

  6. 技能梳理21@stm32+oled+声音强度检测+舵机

    检测声音强度,显示大概的分贝数在oled上,不同强度下舵机转不同的角度 1.项目简介 2.实现逻辑 #通过STM32的adc检测大概声音强度 #在oled上显示声音强度 #舵机根据声音大小转动 3.应 ...

  7. 技能梳理20@stm32+ESP8266+onenet+dht11+mq2+led+风扇+oled

    F103C8T6 ESP8266和ONENET通信 DHT11测温湿度 MQ-2测烟雾浓度 LED模拟室内灯 温湿度和烟雾超标,蜂鸣器报警,风扇转动:OLED显示数据:数据传输onenet,控制LED ...

  8. 技能梳理15@stm32+lora(sx1276)+oled+ds18b20+土壤湿度传感器+按键+蜂鸣器+电路板

    从机采集温湿度及超标报警并显示在oled屏幕上,按下按键通过lora模块传输给主机,主机再也显示在其搭载的屏幕上 1.项目简介 2.实现逻辑 #从机实现对温湿度数据的检测 #从机将数据显示到oled上 ...

  9. 技能梳理7@stm32+OLED+flash掉电保存+按键

    学校违纪分数记录,按键,1.3寸OLED显示,数据掉电保存 1.项目简介 2.实现逻辑 #如上图为显示屏显示内容 #三个物理按键,一个是选择对哪一项进行控制,两个是加减对应项的分数 #控制范围±10, ...

最新文章

  1. uboot环境变量-带分号的环境变量
  2. oracle经典书籍推荐
  3. spring框架 AOP核心详解
  4. [转载]织梦后台添加新变量-内容模型
  5. 嵌套类型的前5个用例
  6. 设计模式----java的单例模式
  7. 多步注册页面html模板,PHP HTML多步骤页面_php_开发99编程知识库
  8. mysql 默认事务隔离级别_一文读懂MySQL的事务隔离级别及MVCC机制
  9. 关于datetimepicker和vue v-model指令双向数据绑定失败的问题
  10. linux libimf.so,如何安装Linux版FLOW-3D及注意事项
  11. 电商项目数据库设计 | 第五篇:参考京东商城详细讲解商品数据库设计
  12. 笔记本装机软件+网站大合集+磁盘管理
  13. surfer10 地学计算机制图 pdf,Surfer 10地学计算机制图
  14. Android一些控件上显示的英文字母都被转为大写字母的原因分析及问题解决
  15. 纪录片:《独立游戏大电影》
  16. 用 RNN 建立语言模型
  17. 让你的 CDN 费用省 50% 以上!图片瘦身的正确姿势
  18. 管理学经典故事-(2)
  19. 如何把图片上面的文字转换成word-OCR文字识别软件
  20. 重庆华为服务器安装步骤

热门文章

  1. 透明可视化OKR目标管理工具推荐
  2. Taro 项目里面添加 Mock 数据
  3. win7工作组计算机无法连接打印机,Win7计算机无法连接到Win10共享打印机解决方案...
  4. [轻笔记]Successor Features for Reinforcement learning
  5. H264 nal_aud, TS格式分析;分析一帧数据包(H264)
  6. Java 变量作用域、构造方法官方教程
  7. K8S Yaml 详细说明及简单样例
  8. Cisco ❀ 数据封装
  9. 截取中国天气网天气信息(转)
  10. idea软件调整字体大小和行间距