全网首发!大众宝来高尔夫polo领驭迈腾帕萨特奥迪A4A6B6B7等老车机增加带蓝牙控制的AUX解码模块,支持小程序原车按钮控制,支持外接高品质蓝牙模块

文章目录

    • 前言
    • 1、设计指标
    • 2、PCB设计
    • 3、程序设计
    • 4、调试
        • 4.1蓝牙控制AUX解码板
        • 4.2自定义车机按钮控制其他高品质蓝牙音频模块
        • 4.3小程序使用
    • 5、模块与车机连接方法
    • 6、结语

前言

​ 之前写过四篇关于车机增加音频输入的方法。

1、07宝来经典车机CD收音机(RC668)改装增加蓝牙播放音乐

2、全网首发!老大众奥迪碟盒通信协议破解,可以模拟数码碟盒,外接AUX蓝牙U盘等音频设备

3、全网首发!大众奥迪DIY数码碟盒增加USB和蓝牙播放音乐功能使用原车接口无损改装

4、全网首发,克莱斯勒大捷龙jeep道奇DIY数码碟盒增加USB和蓝牙播放音乐功能使用原车接口无损改装

​ 汽车使用寿命很长,而电子设备老化的速度很快,这就导致了10多年的老车还能在开10年,但是汽车上的电子设备基本都不能用了,比如听歌用的CD机,10年基本没有几个CD能正常工作了,为了解决老车不能听音乐,或者听音乐不方便的问题,所以设计了一款数码碟盒AUX解码模块,该模块能激活碟箱接口,通过碟箱接口接入自己喜欢的音源。保证原滋原味,音质的好坏取决于音源。

在这里插入图片描述
在这里插入图片描述

​ VWC-AB01 带蓝牙控制的AUX解码板

碟盒功能

产品型号碟箱解码开关机灯蓝牙指示灯蓝牙BLE原车按钮控制KEYIOOTA升级12V供电5V输出
VWC-AX01
VWC-AB01

1、设计指标

​ 模块规格如下:

输入电压12VDC
工作电流100mA
工作温度-40℃~+80℃
频率响应20HZ-20KHZ
长x宽x高如上图

2、PCB设计

​ AUX解码板碟箱音频接口直接引出,与控制端不共地,并且用模拟地对音频线进行包地处理,增加抗干扰能力。

在这里插入图片描述
带蓝牙控制的AUX解码板,红色部分为ble天线部分。

在这里插入图片描述

3、程序设计

贴上核心程序代码

/*捕捉中断*/
void ETM2_IRQHandler(void)
{uint32_t nextVal;uint32_t curVal = ETM2->CNT;if(ETM2->SC & ETM_SC_TOF_MASK)				//清除溢出标志位{ETM2->SC &= ~ETM_SC_TOF_MASK;}if(ETM2->CONTROLS[0].CnSC & ETM_CnSC_CHF_MASK )//输入信号边沿变化{ETM2->CONTROLS[0].CnSC &= ~ETM_CnSC_CHF_MASK;if(RxInProgress == (VPW_RxStatus_t)Idle)													// 产生下降沿{RxInProgress = (VPW_RxStatus_t)SOF;VPW_RxBufPtr = 0;
//            ResetRx();if(VPW_TxBufPtr >1){VPW_RxBufPtr = 0;}ETM2->CONTROLS[0].CnSC |= ETM_CnSC_ELSB_MASK; 								//切换到跳边沿检测}else if(RxInProgress == 1){uint32_t width;uint8_t symIdx;width = GetPulseWidth(PrevCntrVal, curVal);if(width > RX_SOF_MIN && width <= RX_SOF_MAX){symIdx = SOF_IDX;}else if(width > RX_LONG_MIN && width <= RX_LONG_MAX){symIdx = LONG_IDX;}else if(width > RX_SHORT_MIN && width <= RX_SHORT_MAX){symIdx = SHORT_IDX;}else{ResetRx();return;}VPW_RxBuf[VPW_RxBufPtr] = symIdx;if(TxInProgress == 1)										//正在发送{if(VPW_RxBuf[VPW_RxBufPtr] != VPW_TxBuf[VPW_RxBufPtr]){FinalizeTx();}}if(VPW_RxBufPtr < sizeof(VPW_RxBuf) - 2){VPW_RxBufPtr++;}SetTimerAlarm(239*48);}PrevCntrVal = curVal;}if(ETM2->CONTROLS[0].CnSC & ETM_CnSC_CHF_MASK )//输入信号上升沿{ETM2->CONTROLS[0].CnSC &= ~ETM_CnSC_CHF_MASK;}
}

发送程序使用定时器0产生波形

/*****************************************************************************//*!
*
* @brief ETM1 回调函数
*        
* @param  none
*
* @return none
*
*****************************************************************************/
void ETM0_IRQHandler(void)
{uint32_t nextVal;ETM_ClrOverFlowFlag(ETM0); 				//清除溢出标志位ETM_ClockSet(ETM0, ETM_CLOCK_NOCLOCK, ETM_CLOCK_PS_DIV16); 		//停止计数nextVal = VPW_Symbols[VPW_TxBuf[VPW_TxBufPtr]];if((VPW_TxBuf[VPW_TxBufPtr] == EOF_IDX)||(VPW_TxBufPtr>=(TX_BUFLEN*8))){FinalizeTx();}else{ETM_SetModValue(ETM0,nextVal);ETM0->CNT = 0;ETM_ClockSet(ETM0, ETM_CLOCK_SYSTEMCLOCK, ETM_CLOCK_PS_DIV16); 		//开始计数GPIO_Toggle(GPIOA,J1850_OUT_MASK);}VPW_TxBufPtr++;}

定义结构体 用于保存车机播放音乐相关信息。

typedef struct
{uint8_t rnd;uint8_t scan;uint8_t playing;uint8_t cd_button;uint8_t cd_power;uint8_t cd_status;uint8_t disc;           uint8_t track;          uint8_t minute;         uint8_t second; uint8_t workSta;					// 工作状态0  关机 1 待机 2工作 uint8_t BIDIstate;                       // pointer to the current state handler routineuint8_t BIDIcount;uint8_t staCount;} CD_CHANFER_STRUCT;

自定义车机按钮程序

void  bt_exButtonMessage(void)
{if(mybtEx.fbutton_flag == 0){if(mybtEx.frst == 1){mybtEx.fbutton_flag = 1;mybtEx.fbutton_value = U_BUTTON_RST;tmos_start_task(userApp_task_id,USERAPP_EVENT,20 * TICK_PERIOD_MS);}elseif(mybtEx.fpowerOn == 1){mybtEx.fbutton_flag = 1;bt_exPowerOn();mybtEx.fbutton_value = U_BUTTON_POWER;tmos_start_task(userApp_task_id, USERAPP_BUTTON_EVENT,  btMapPWMCfg.wmPowerOn.delayTime * TICK_PERIOD_MS);}elseif(mybtEx.fpowerOff == 1){mybtEx.fbutton_flag = 1;bt_exPowerOff();mybtEx.fbutton_value = U_BUTTON_POWER;tmos_start_task(userApp_task_id, USERAPP_BUTTON_EVENT,  btMapPWMCfg.wmPowerOff.delayTime * TICK_PERIOD_MS);}elseif(mybtEx.fPlay == 1){mybtEx.fbutton_flag = 1;mybtEx.fbutton_value = U_BUTTON_PLAY;tmos_start_task(userApp_task_id, USERAPP_BUTTON_EVENT, 500 * TICK_PERIOD_MS);}elseif(mybtEx.fnext == 1){mybtEx.fbutton_flag = 1;bt_exNext();mybtEx.fbutton_value = U_BUTTON_NEXT;tmos_start_task(userApp_task_id, USERAPP_BUTTON_EVENT, btMapPWMCfg.wmNext.delayTime * TICK_PERIOD_MS);}elseif(mybtEx.fpre == 1){mybtEx.fbutton_flag = 1;bt_exPre();mybtEx.fbutton_value = U_BUTTON_PRE;tmos_start_task(userApp_task_id, USERAPP_BUTTON_EVENT, btMapPWMCfg.wmPrev.delayTime  * TICK_PERIOD_MS);}elseif(mybtEx.fmix == 1){mybtEx.fbutton_flag = 1;bt_exMix();mybtEx.fbutton_value = U_BUTTON_MIX;tmos_start_task(userApp_task_id, USERAPP_BUTTON_EVENT, btMapPWMCfg.wmMix.delayTime  * TICK_PERIOD_MS);}elseif(mybtEx.fcd1 == 1){mybtEx.fbutton_flag = 1;bt_exCd1();mybtEx.fbutton_value = U_BUTTON_CD1;tmos_start_task(userApp_task_id, USERAPP_BUTTON_EVENT, btMapPWMCfg.wmCd1.delayTime  * TICK_PERIOD_MS);}elseif(mybtEx.fcd2 == 1){mybtEx.fbutton_flag = 1;bt_exCd2();mybtEx.fbutton_value = U_BUTTON_CD2;tmos_start_task(userApp_task_id, USERAPP_BUTTON_EVENT, btMapPWMCfg.wmCd2.delayTime  * TICK_PERIOD_MS);}elseif(mybtEx.fcd3 == 1){mybtEx.fbutton_flag = 1;bt_exCd3();mybtEx.fbutton_value = U_BUTTON_CD3;tmos_start_task(userApp_task_id, USERAPP_BUTTON_EVENT, btMapPWMCfg.wmCd3.delayTime  * TICK_PERIOD_MS);}elseif(mybtEx.fcd4 == 1){mybtEx.fbutton_flag = 1;bt_exCd4();mybtEx.fbutton_value = U_BUTTON_CD4;tmos_start_task(userApp_task_id, USERAPP_BUTTON_EVENT, btMapPWMCfg.wmCd4.delayTime  * TICK_PERIOD_MS);}elseif(mybtEx.fcd5 == 1){mybtEx.fbutton_flag = 1;bt_exCd5();mybtEx.fbutton_value = U_BUTTON_CD5;tmos_start_task(userApp_task_id, USERAPP_BUTTON_EVENT, btMapPWMCfg.wmCd5.delayTime  * TICK_PERIOD_MS);}elseif(mybtEx.fcd6 == 1){mybtEx.fbutton_flag = 1;bt_exCd6();mybtEx.fbutton_value = U_BUTTON_CD6;tmos_start_task(userApp_task_id, USERAPP_BUTTON_EVENT, btMapPWMCfg.wmCd6.delayTime  * TICK_PERIOD_MS);}elseif(mybtEx.btPause == 1){#ifdef WDEBUG#endifmybtEx.fbutton_flag = 1;bt_exPlayPuse();mybtEx.fbutton_value = U_BUTTON_PAUSE;tmos_start_task(userApp_task_id, USERAPP_BUTTON_EVENT, btMapPWMCfg.wmPause.delayTime  * TICK_PERIOD_MS);}}}

微信小程序程序

在这里插入图片描述

4、调试

​ AUX解码板插碟机上,搭铁开机,即可工作,这里不做详细论述。视频演示

带蓝牙控制的大众奥迪老车机AUX解码模块

下面主要讲解下,蓝牙控制AUX解码板。

4.1蓝牙控制AUX解码板

​ 现有AUX解码板只能解码不能用原车按钮控制,这样在开车的时候想要换歌曲,就需要操作手机或者其他设备,很不安全。为了解决这个问题,将解码板的主控换成带蓝牙5.3的单片机,既可以实现解码车机,又能实现原车按钮控制手机等数码产品上下一曲。

​ VWC-AB01 模组连接到车机上默认模式是AUX解码功能,当手机或其他电子设备连接蓝牙名称为:

VWCDC-SP-BLE蓝牙设备,如下图所示,手机端这时播放音乐,既可以通过车机原车按钮控制手机上下一曲播放蓝牙音乐了。
在这里插入图片描述

4.2自定义车机按钮控制其他高品质蓝牙音频模块

​ 市面上的公版蓝牙模组控制方式,大体上分为两类控制,一类是IO高低电平时间控制,另外一类是ADC按键控制。这里以ADC按键为控制方式的蓝牙模组为例,讲解如何自定义车机按键功能,控制蓝牙音频模块。
在这里插入图片描述
在这里插入图片描述

​ ADC按键原理如下图所示,核心原理就是电阻串联分压,不同按键按下,就是不同电阻与固定值的22k上拉电阻串联分压,因为每个按键对应的电阻值不同,所以可以区分不同按键按下。
在这里插入图片描述

蓝牙音频模块和解码板连接图
在这里插入图片描述

​ 根据上面原理,只要解码模块产生和按键按下相同的电压,和持续时间,就可以模拟对应按键功能了。比如下一曲对应的是0.96V,那么只要控制模块产生0.96v电压即可。那么怎么控制模块产生不同的电压呢?这里面要用到对应的微信小程序配置工具了。

4.3小程序使用

微信小程序搜索悦享行或者私聊博主发小程序
在这里插入图片描述

​ 搜索连接VWCDC-SP-BLE,连接成功后显示如下界面,默认参数为输出3.3V 持续0.5s
在这里插入图片描述
​ 根据上图可知上一曲、下一曲、暂停对应的电压值,根据实际情况设置即可,如下图所示,设置好按设置按钮,然后在读取设置参数,如果读回来的数据和写入的数据一致,那么设置成功。按对应的车机按键,模块就会输出设置的电压值和持续时间。

在这里插入图片描述

视频演示

支持小程序自定义大众奥迪车机按键功能的蓝牙控制AUX解码模块

5、模块与车机连接方法

AUX解码板连接方法
在这里插入图片描述
在这里插入图片描述

带蓝牙控制的AUX解码板连接方法
在这里插入图片描述

6、结语

有朋友反馈,找不到我,今打油诗一首

加流一壶真千金
微云澹日映寒流
信意麾毫无点误
KING_SONGING
唱奇腾怪可删修
歌咏康衢了此生
的然民仰如父母
国家涵养自建隆
王俭归来幕府非

有朋自远发来,不亦说乎!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/62335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端需要理解的数据治理与异常监控知识

服务监控包括错误监控、性能监控和行为监控。数据埋点是对服务监控中收集用户信息的技术实现&#xff0c;分为侵入式和非侵入式。 1 数据治理 前端数据治理的重要指标是准确性和数据&#xff0c;一个数据对象包括数据值和其他元数据。 2 数据上报方式 2.1 Image 通过将采集…

windows10默认浏览器总是自动更改为Edge浏览器

在设置的默认应用设置中把默认浏览器改为chrome或其他之后他自动又会改回Edge。不得不说*软真的狗。 解决办法&#xff1a; 后来发现在Edge浏览器的设置中有这么一个选项&#xff0c;会很无耻的默认是Edge。把它关掉后重新设置就行了。

NPM 常用命令(一)

目录 1、npm 1.1 简介 1.2 依赖性 1.3 安装方式 2、npm access 2.1 命令描述 2.2 详情 3、npm adduser 3.1 描述 4、npm audit 4.1 简介 4.2 审计签名 4.3 操作示例 4.4 配置 audit-level dry-run force json package-lock-only omit foreground-scripts …

从项目中突显技能:在面试中讲述你的编程故事

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

【飞书ChatGPT机器人】飞书接入ChatGPT,打造智能问答助手

文章目录 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 在飞书中创建chatGPT机器人并且对话&#xff0c;在下面操作步骤中…

结构体的简单介绍

目录 概念&#xff1a; 与数组类比&#xff1a; 结构体声明&#xff1a; 注意&#xff1a; 结构体变量、全局变量、局部变量&#xff1a; 结构体声明中包含其他结构体变量&#xff1a; 结构体变量的初始化&#xff1a; 包含了其他结构体变量的初始化&#xff1a; 结构体…

SPI2外设驱动-W25Q64 SPI接口初始化

前言 &#xff08;1&#xff09;本系列是基于STM32的项目笔记&#xff0c;内容涵盖了STM32各种外设的使用&#xff0c;由浅入深。 &#xff08;2&#xff09;小编使用的单片机是STM32F105RCT6&#xff0c;项目笔记基于小编的实际项目&#xff0c;但是博客中的内容适用于各种单片…

【FlowDroid】一、处理流程学习

FlowDroid 一、处理流程学习 下载配置源码概况代码逻辑分析analyzeAPKFilerunInfoflowprocessEntryPointcalculateCallbacks(sourcesAndSinks)再次回到processEntryPoint 自己做一些笔记 下载配置 参照我前面的文章可以使用FlowDroid安装初体验 为了看代码了解FlowDroid如何处…

homeassistant ubuntu自启动 网络设置

命令行安装virtualbox 或者安装包 hass官网下载 haos_ova-10.4.vdi virtualbox 装hass 最少2G内存 其他省略 自启动&#xff1a; gnome-session-properties 添加 VBoxManage startvm hass --type headless hass为自己的虚拟机名字 网络配置如下&#xff1a; 要全部打开

【云原生】Kubernetes容器编排工具

目录 1. K8S介绍 1.1 k8s的由来 下载地址 1.2 docker编排与k8s编排相比 1.3 传统后端部署与k8s 的对比 传统部署 k8s部署 ​2. k8s的集群架构与组件 &#xff08;1&#xff09; Kube-apiserver &#xff08;2&#xff09;Kube-controller-manager &#xff08;3&a…

Qt应用开发(基础篇)——对话框窗口 QDialog

一、前言 QDialog类继承于QWidget&#xff0c;是Qt基于对话框窗口(消息窗口QMessageBox、颜色选择窗口QColorDialog、文件选择窗口QFileDialog等)的基类。 QDialog窗口是顶级的窗口&#xff0c;一般情况下&#xff0c;用来当做用户短期任务(确认、输入、选择)或者和用户交流(提…

一、安装GoLang环境和开发工具

一、安装GoLang环境 GoLang中国镜像站 下载后对应的环境包以后&#xff0c;一路下一步就好了&#xff0c;安装路径的话&#xff0c;尽量就安装到默认的文件目录下。 二、配置Go的环境变量 右击此电脑–>属性–>高级系统设置–>环境变量&#xff0c;打开环境变量设置…

MySQL高阶语句之常用查询

目录 常用查询 按关键字排序 区间判断及查询不重复记录 对结果进行分组 限制结果条目 设置别名 通配符 子查询 常用查询 &#xff08;增、删、改、查&#xff09; 对 MySQL 数据库的查询&#xff0c;除了基本的查询外&#xff0c;有时候需要对查询的结果集进行处理。 …

设计模式之工厂模式(万字长文)

文章目录 概述工厂模式的优点包括工厂模式有几种主要的变体看一个具体需求使用传统的方式来完成传统的方式的优缺点 简单工厂模式基本介绍使用简单工厂模式简单工厂模式的优缺点优点&#xff1a;缺点&#xff1a; 工厂方法模式看一个新的需求思路 1思路 2工厂方法模式介绍工厂方…

nextTick原理

nextTick 是 Vue 提供的一个异步方法&#xff0c;用于在 DOM 更新之后执行回调函数。它的原理是利用 JavaScript 的事件循环机制来实现异步执行。 具体来说&#xff0c;当我们调用 nextTick 方法时&#xff0c;Vue 会将传入的回调函数添加到一个队列中。在下一个事件循环中&am…

Django(7)-项目实战-发布会签到管理系统

本文使用django实现一个简单的发布会签到管理系统 登录功能 模板页面 sign/templates/index.html <!DOCTYPE html> <html> <head><title>Login Page</title> </head> <body><h1>发布会管理</h1><form action=&qu…

springboot实战(一)之项目搭建

环境准备 ideajdk1.8springboot版本 2.7.15 项目开始 1.打开idea&#xff0c;点击new project 2.选择spring initillizr 核对&#xff1a;Server Url是否是&#xff1a;start.spring.io&#xff0c;然后根据自己依次设置项目名称、存储位置和包名&#xff0c;如下&#xff…

北京开发APP的费用明细

开发APP项目时&#xff0c;在功能确定后需要知道有哪些可能的费用&#xff0c;安排项目预算。北京开发APP的费用明细可能会包括以下几个部分&#xff0c;每个部分都会产生一些费用。今天和大家分享APP费用明细有哪些&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&…

vue2 自定义指令,插槽

一、学习目标 1.自定义指令 基本语法&#xff08;全局、局部注册&#xff09;指令的值v-loading的指令封装 2.插槽 默认插槽具名插槽作用域插槽 二、自定义指令 1.指令介绍 内置指令&#xff1a;v-html、v-if、v-bind、v-on… 这都是Vue给咱们内置的一些指令&#xff0c;…

大数据之Maven

一、Maven的作用 作用一&#xff1a;下载对应的jar包 避免jar包重复下载配置&#xff0c;保证多个工程共用一份jar包。Maven有一个本地仓库&#xff0c;可以通过pom.xml文件来记录jar所在的位置。Maven会自动从远程仓库下载jar包&#xff0c;并且会下载所依赖的其他jar包&…