快乐眼泪 发表于 2023-2-28 20:25 是可行的,目前已经完成了 |
我也正想做个,楼主成功了吗? |
简单,就是麦克风+运算放大器+ADC,声音大就多亮几个灯,声音小就少亮几个灯 |
32个灯用4个字节控制:灯接P0-3口刚好32个 做个数组{A1,A2,A3.....An},各个元素都是32位,每位对准一个IO口,1亮0不亮。 每间隔一段时间(0.5秒),取出一个值,送到IO去显示,就可以了。 数组取值如下: 开始是一个个点亮,直达达到六个左右: 第1个亮: A1=00000001H【00000000,00000000,00000000,00000001】 第2个亮: A2=00000003H【00000000,00000000,00000000,00000011】 第3个亮: A3=00000007H【00000000,00000000,00000000,00000111】 第4个亮: A4=0000000FH【00000000,00000000,00000000,00001111】 第5个亮: A5=0000001FH【00000000,00000000,00000000,00011111】 间隔3个第9亮:A6=0000011FH【00000000,00000000,00000001,00011111】 消失第9个: A7=0000001FH【00000000,00000000,00000000,00011111】 消失第5个: A8=0000000FH【00000000,00000000,00000000,00001111】 ............ |
yzwzfyz 发表于 2022-11-10 09:27 使用的ws2812灯珠数量是32,开始是一个个点亮,直达达到六个左右,间隔三个,在继续一个个出现点亮6,消失则是一个个减少,在这两个步骤我不太了解怎么解决,求指导一下 |
对于会单片机程序的人,这个非常简单,类似做音频电平指示。 |
换个思想吧,没有方向这一说! 1、将各个灯的明暗状态,看作是的个数组的组元素(A1,A2,A3,A4……)。A的每一位0/1对应一个灯的明暗。 2、每间隔一个时间TG,切换一个组元素,送出显示。 这样,改变TG的大小,就改变了速度。 改变,A1,A2,A3,A4值(或排序),就改变的LED灯的显示状态。 如果,A1,A2,A3,A4……的组合,形成左移的效果,看上去就左移了;形成右移的效果,看上去就右移了;看上去形成跳动的效果,看上去就跳动了…… 你想怎么玩就怎么玩! 程序构思巧妙,易写,逻辑清晰。 你要玩的花色,就是在如何将LED的各种显示组合,编制了A1,A2,A3…… 如果,你设计了N个方案(单灯左移,单灯右移,双灯左移,双灯右移,暂停、全闪、……),就做成N的数组。每按一次键就换一个数组取值,显示。 |
hhdsdy 发表于 2022-11-9 17:45 不是控制移动速度,是控制左侧产生固定点亮4个RGB灯珠,间隔三个,再继续产生;向右侧移动,移动至最右侧算结束,如果没有声音接受则不继续产生,将剩下的移动结束即可, 使用的是arduino控制板或者esp32控制板,使用的驱动库是FastLED和Adafruit_NeoPixel驱动WS2812 我想问一下要实现这个功能,是需要什么方法才可以?能指导一下吗 |
首先会硬件,把声音放大整形,然后做比较器产生数字信号连到单片机IO,然后用连续读取IO,用IO状态信号做移相显示.就是那么简单,如果没有硬件基础那我说的话基本也是像唱天书一样. |
只是用有没声音来控制显示个数,而不是用声音的大小来控制移动的速度,这不难啊 |