savent404 / mx2 Goto Github PK
View Code? Open in Web Editor NEWLicense: MIT License
License: MIT License
编辑accent文件无法驱动8路小LED进入工作状态
0:\bank*\Accent\目录下
Standby.txt
On.txt
Lockup.txt
Clash.txt
控制文件位置如备注,若未读取到相关文件,则表示不执行
USR_CFG内需增加参数AccentLED=(0~8),用于设置可控LED的个数
USR_CFG内需增加参数LEDMASK, 用于设置哪些LED可以工作
1
代表允许工作,0
代表不工作LEDMASK=0x000F //(LED 1~4工作, 其余不工作)
每个文件的单行周期T均可独立设置,亮灭控制最大256行
UTF-8 with BOM
or UTF-8 without BOM
, 文件第一行空行或写上注释文字待机状态下的小灯动作,若状态无变化则循环执行
开机状态下的小灯动作,若状态无变化则循环执行
当'TriggerE'触发时同步执行,执行长同lockup(TriggerE),退回On时可抛弃未执行部分
当'TriggerC'触发时同步执行,执行结束后返回On
保证NP可以和PWM一样的工作
支持neopixel器件
使用SPI接口DMA方式输出
#include "neopixel.h"
uint8_t color[] =
{
0xFF, 0x00, 0x00,
0x00, 0xFF, 0x00,
0x00, 0x00, 0xFF,
};
NP_Handle_t neopixel;
void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi)
{
if (hspi->Instance == SPI1)
{
NP_DMA_CallbackHandle(&neopixel);
}
}
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_DMA_Init();
MX_SPI1_Init();
neopixel.TransmitHandle = &hspi1;
neopixel.MaxPixelInDMABuffer = 2;
if (!NP_Init(&neopixel)) {
while (1)
;
}
NP_Update(&neopixel, color, 3);
while (1)
{
}
}
一帧数据不可 利用DMA中断利用较小的Buffer传送分多次传送完成。原因是DMA中断会有10us左右的延时,而Neopixel每位数据为2us左右,分多次传输会导致每次间隔处的led会有预计外的绿色分量
目前的解决方法是开很大的Buffer一次DMA传输完成,但将导致内存不足的问题
每一个neopixel将使用24x8 = 192字节,大量neopixel将无法分配如此大的内存空间
目前统一为每个文件路径分配30bytes大小空间
希望修改为为按需分配,并给予字节偏移量信息方便迅速查找
目前USR_config.c中使用固定分配30字节的方式以满足最大文件长度的需求,但是普遍的文件名小于该长度
struct {
TCHAR **ppcPath; //指向每一个文件名的地址,加速文件名的访问
TCHAR *pcTriggerName; //保存字符串数组,一个文件名结尾以'\0'界定与下一个文件名的边界
};
由于对某一中trigger进行统一管理,在为结构体分配内存时就需要知道总共有几个文件,所有文件名进行组合后需要的总内存。所以在分配内存前需要预先分析这两个参数
在MainTask和LED之间封装一层接口,方便从LED切换到NP
确认是否使用PWM-LED(0)或NEO-LED(1),原始版本固定值为0
方向识别模式(1)下,触发'In'以及'Out'需判断加速度轴方向(X/Y/Z)后出发相应Trigger目录下 如 '0:/Bank0/In/X/*.wav'
值为0时不开启, 不为零时为 加速度阈值, 超过阈值则触发**'Out'** or 'In'
TriggerE的延时触发,单位毫秒。
值为0则功能关闭, 当计数器小于LockupHold时松开Aux即恢复运行态
大于LockupHold是,Aux松开仍保持TriggerE模式,直至下一次Aux被触发
报警电压
值为0,不开启
最大值为50, 触发电压报警后, LED亮度以及音量变为 “设定值x(100 - PowerSavingPerecnt)"
当'Trigger BCD'的音效没有播放完成时,执行'In'触发动作,会出现仅有LED执行动作而音频没有播放的问题
CONFIG中增加一条配置信息
除开Bankcolor及Fbank,新增Lbank,并修改LED操作
使用类浮点数乘法,乘以比例/2^n, 当比例==2^n时为最大音量
待机转开机,检测Gsenser方向,若
0.7G<X<1.3G,则播放bank*\out\X.wav
0.7G<Y<1.3G,则播放bank*\out\Y.wav
0.7G<Z<1.3G,则播放bank*\out\Z.wav
开机转待机时,检测Gsenser方向,若
0.7G<X<1.3G,则播放bank*\in\X.wav
0.7G<Y<1.3G,则播放bank*\in\Y.wav
0.7G<Z<1.3G,则播放bank*\in\Z.wav
若对应文件不存在,或者G值落在其他范围,则随机播放Out/In 文件夹下任一文件
需固定XYZ物理轴向,增加相应lis3D驱动,目前只检测xyz加速度值最大的轴,然后触发最大值的轴
ShakeoutG=? (0=不开启,设参=开启) ,当开启时,待机状态下检测到G值大于shakeoutG 时,触发out进入运行态;
ShakeinG=? (0=不开启,设参=开启) ,当开启时,运行状态下,检测到G值大于shakeinG 时,触发in转入待机状态
需增加lis3D驱动
对应文件为Bank*\Force*.wav 以及Bank*\Force*.neo
此项需同步追加灵敏度参数设置,以及与TriggerD触发的按钮动作协调,待审阅后协商确定
需增加Maintask事件驱动
当TriggerE被触发时,aux重新开始计时
若LockupHold=0,此功能屏蔽
当0<t<Lockuphold时,Aux松开即恢复运行态
当LockupHold≤t时,Aux松开仍然保持TriggerE模式,直至下一次aux被触发(上升沿触发,此次仅为状态释放,不进行TriggerD/E/F的重复触发)
Config中增加参数、Maintask增加事件驱动
写入flash更为妥当
此项为启动时检测,与原有的lowpower检测合并处理
用户自行设置报警提示电压Lowpower= ?(将其从USR_CFG中提出到SETTING.txt),到达报警线时, LED亮度以及音量由原来设定值缩减为 “设定值x (100 - PowerSaving perecent)”
特效音播放速率以及音量与G值联动,参数名未定,此项细节需商榷
样例: https://m.youtube.com/watch?v=LHpzbtBo-5w&feature=youtu.be
增加Config参数,变更电压检测函数
增加Maintask事件驱动
此播放器用于顺次播放根目录下的Multimedia*.wav
操作逻辑:
Main上升沿触发,开始播放当前wav直至结束(此状态下自动关机无效),若未播放完成时再上升沿触发,停止播放(自动关机计时恢复工作)
Aux上升沿触发,单向循环切换当前播放的*.wav
此状态下,1s内3次短按Main,退出到正常待机态
增加Maintask事件驱动,audio相应触发
软件层面可继续从循环处继续运行,但用于存储各类Triggerpath的内存开销将增倍,考虑动态存储当前Bank的trigger,而不是将所有bank都保存下来
colorswitch直接中断当前hum.neo进行,colorswitch播放完毕后将从下一bank的hum.neo第一行开始运行
无charged.neo ?
需相应算法
需协同flash读写,相应记忆与识别算法,实现难度较高
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.