日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

LED領(lǐng)帶的制作

454398 ? 來(lái)源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2019-11-28 17:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

概述

使領(lǐng)帶像VU計(jì)一樣亮起來(lái)!這個(gè)Flora項(xiàng)目使用駐極體麥克風(fēng)放大器觸發(fā)沿著領(lǐng)帶長(zhǎng)度用導(dǎo)電線縫制的16個(gè)Flora NeoPixels。

在開始這個(gè)項(xiàng)目之前,我們建議閱讀以下指南:

開始于FLORA

Adafruit麥克風(fēng)放大器突破

導(dǎo)電線

圖片由johngineer拍攝。

工具和用品

材料清單:

16 Flora NeoPixels

Flora主板

麥克風(fēng)放大器突破

鋰聚合物電池

用于電池袋的碎布

3層導(dǎo)電線

標(biāo)準(zhǔn)棉/多股線

絲帶電纜或?qū)щ娋€帶

斷裂式領(lǐng)帶或其他形式的領(lǐng)帶

您將使用針頭來(lái)縫合電路。

必須使用鋒利的剪刀!您還需要一個(gè)長(zhǎng)尺子,一些裁縫的粉筆和一個(gè)拆縫刀。

不要忘了剝線鉗,鉗子和齊平剪線!

您將需要高質(zhì)量的基本萬(wàn)用表,可以測(cè)量電壓和連續(xù)性。

單擊此處購(gòu)買基本萬(wàn)用表。

單擊此處購(gòu)買頂級(jí)萬(wàn)用表。

單擊此處購(gòu)買袖珍萬(wàn)用表。

也不要忘記學(xué)習(xí)如何使用您的萬(wàn)用表!

您可能會(huì)在本地五金店找到的任何入門級(jí)“多合一”焊鐵都可以使用。與生活中的大多數(shù)事物一樣,您可以買得到。

升級(jí)到高端電烙鐵設(shè)置,例如我們?cè)谏痰曛匈?gòu)買的Hakko FX-888,將使焊接變得既輕松又有趣。

請(qǐng)勿使用“冷熱”烙鐵!它們不適合用于精密的電子工作,并且會(huì)損壞植物群(請(qǐng)參閱此處)。

單擊此處購(gòu)買我們的入門級(jí)可調(diào)30W 110V烙鐵。

單擊此處可升級(jí)到原裝的Hakko FX-888可調(diào)溫度烙鐵。

學(xué)習(xí)如何使用大量教程進(jìn)行焊接!

您將需要60/40焊料的松香芯。好的焊料是一件好事。不良的焊錫會(huì)導(dǎo)致橋接和冷焊點(diǎn)很難找到。

單擊此處購(gòu)買一盤含鉛焊料(建議初學(xué)者使用)。

單擊此處購(gòu)買一盤無(wú)鉛焊料。

span》

電路圖

Flora像素都連接到公共接地總線,以及連接到VBATT的公共電源總線。 Flora像素?cái)?shù)據(jù)總線連接到D6。麥克風(fēng)放大器連接到3.3V,GND和D9。

電池袋和植物

使用一塊碎布縫一個(gè)小袋,裝上您的鋰電池。小袋應(yīng)縫在領(lǐng)帶的背面,就在Flora所在的上方,并在頂部有一個(gè)開口,以便于取出電池進(jìn)行充電。使用接縫裂開器稍微打結(jié)領(lǐng)帶的后接縫,以便您可以將JST插頭和電線穿入領(lǐng)帶內(nèi)并向下到Flora。

插頭在領(lǐng)帶的褶皺處加入了Flora,因此不會(huì)被抓住

通過(guò)在領(lǐng)帶上縫一些未使用的墊子,用普通線將Flora固定在適當(dāng)?shù)奈恢谩L試只縫到領(lǐng)帶的背面,使前部織物保持光滑。

縫紉像素

使用標(biāo)尺在裁縫的粉筆下沿著領(lǐng)帶的中心劃一條線,并沿著這條線均勻分配您的16個(gè)Flora像素。

用粉筆標(biāo)記每個(gè)像素的位置。

在D6旁邊將一長(zhǎng)段導(dǎo)電線縫到GND,僅刺穿背面領(lǐng)帶。縫合到第一個(gè)像素的(-)墊上并固定(但不要切斷螺紋)。

通過(guò)將此長(zhǎng)接地線連接到像素上的(-)焊盤來(lái)添加更多像素。

將數(shù)據(jù)總線從D6縫到第一個(gè)像素上的輸入板(標(biāo)有向內(nèi)箭頭)。捆扎,密封結(jié),并剪斷線。

在每個(gè)像素之間縫制一小段導(dǎo)電線,將一個(gè)像素的輸出連接到下一個(gè)輸入。

查看我們的《導(dǎo)電線》指南以獲取更多提示

使用另一長(zhǎng)段導(dǎo)電線將Flora的VBATT焊盤連接到像素上的(+)焊盤。

縫合好幾個(gè)像素后,請(qǐng)用萬(wàn)用表測(cè)試短路(確保長(zhǎng)電源和地線沒(méi)有接觸),并啟動(dòng)NeoPixel庫(kù)測(cè)試代碼,以確保到目前為止您的初毛電路都正常。 br》

將其余部分縫合起來(lái)像素-您將有一條較長(zhǎng)的接地總線,一條較長(zhǎng)的電源總線以及每個(gè)輸入/輸出數(shù)據(jù)板之間的短線段。

添加麥克風(fēng)

要配合領(lǐng)帶,請(qǐng)?jiān)邴溈孙L(fēng)放大器上涂一點(diǎn)黑色指甲油。

將帶狀電纜的長(zhǎng)度比扎帶的主要部分長(zhǎng)。

將三根電線與麥克風(fēng)放大器一起使用,剝線將束縛在扎帶的結(jié)上。

將帶狀電纜穿過(guò)扎帶的內(nèi)部插入。在領(lǐng)帶結(jié)內(nèi)用接縫撕開器切一個(gè)小孔,并將帶狀電纜穿過(guò)其中。

剝?nèi)?dǎo)線末端并焊接直到麥克風(fēng)放大器上的三個(gè)孔。

使用大螺紋通過(guò)大安裝孔將麥克風(fēng)固定在領(lǐng)帶上。

回到板的Flora端,焊接相應(yīng)的導(dǎo)線連接到3.3V,GND和D9。

代碼

準(zhǔn)備就緒

此項(xiàng)目需要NeoPixel庫(kù)。對(duì)于較新的Arduino IDE版本,請(qǐng)選擇“庫(kù)管理器”,滾動(dòng)到“ Adafruit_NeoPixel”并安裝最新版本。

對(duì)于非常舊的Arduino IDE版本,請(qǐng)單擊NeoPixel Github存儲(chǔ)庫(kù)頁(yè)面上的ZIP按鈕進(jìn)行下載,然后重命名

有關(guān)對(duì)Flora板進(jìn)行編程的更多信息(包括所需的軟件),請(qǐng)轉(zhuǎn)到Flora入門指南。

代碼

我們對(duì)該項(xiàng)目感到非常興奮,我們制作了兩個(gè)Arduino草圖來(lái)測(cè)量房間的體積(Phil Burgess,James DeVito和Andy Doro)。您可以在LED Ampli-Tie Github存儲(chǔ)庫(kù)中下載它們。您可以從下面的清單中下載代碼。第一個(gè)動(dòng)態(tài)調(diào)整以適應(yīng)發(fā)生的任何情況:

下載:Project Zip 或Ampli_Tie_Dynamic.ino | 在Github上查看

復(fù)制代碼

/*

LED VU meter for Arduino and Adafruit NeoPixel LEDs. More info: http://learn.adafruit.com/led-ampli-tie/

Hardware requirements:

- Most Arduino or Arduino-compatible boards (ATmega 328P or better)。

- Adafruit Electret Microphone Amplifier (ID: 1063)

- Adafruit Flora RGB Smart Pixels (ID: 1260)

OR

- Adafruit NeoPixel Digital LED strip (ID: 1138)

- Optional: battery for portable use (else power through USB or adapter)

Software requirements:

- Adafruit NeoPixel library

Connections:

- 3.3V to mic amp +

- GND to mic amp -

- Analog pin to microphone output (configurable below)

- Digital pin to LED data input (configurable below)

See notes in setup() regarding 5V vs. 3.3V boards - there may be an

extra connection to make and one line of code to enable or disable.

Written by Adafruit Industries. Distributed under the BSD license.

This paragraph must be included in any redistribution.

*/

#include

#define N_PIXELS 16 // Number of pixels in strand

#define MIC_PIN A9 // Microphone is attached to this analog pin

#define LED_PIN 6 // NeoPixel LED strand is connected to this pin

#define DC_OFFSET 0 // DC offset in mic signal - if unusure, leave 0

#define NOISE 10 // Noise/hum/interference in mic signal

#define SAMPLES 60 // Length of buffer for dynamic level adjustment

#define TOP (N_PIXELS + 2) // Allow dot to go slightly off scale

#define PEAK_FALL 40 // Rate of peak falling dot

byte

peak = 0, // Used for falling dot

dotCount = 0, // Frame counter for delaying dot-falling speed

volCount = 0; // Frame counter for storing past volume data

int

vol[SAMPLES], // Collection of prior volume samples

lvl = 10, // Current “dampened” audio level

minLvlAvg = 0, // For dynamic adjustment of graph low & high

maxLvlAvg = 512;

Adafruit_NeoPixel

strip = Adafruit_NeoPixel(N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup() {

// This is only needed on 5V Arduinos (Uno, Leonardo, etc.)。

// Connect 3.3V to mic AND TO AREF ON ARDUINO and enable this

// line. Audio samples are ‘cleaner’ at 3.3V.

// COMMENT OUT THIS LINE FOR 3.3V ARDUINOS (FLORA, ETC.):

// analogReference(EXTERNAL);

memset(vol, 0, sizeof(vol));

strip.begin();

}

void loop() {

uint8_t i;

uint16_t minLvl, maxLvl;

int n, height;

n = analogRead(MIC_PIN); // Raw reading from mic

n = abs(n - 512 - DC_OFFSET); // Center on zero

n = (n 《= NOISE) ? 0 : (n - NOISE); // Remove noise/hum

lvl = ((lvl * 7) + n) 》》 3; // “Dampened” reading (else looks twitchy)

// Calculate bar height based on dynamic min/max levels (fixed point):

height = TOP * (lvl - minLvlAvg) / (long)(maxLvlAvg - minLvlAvg);

if(height 《 0L) height = 0; // Clip output

else if(height 》 TOP) height = TOP;

if(height 》 peak) peak = height; // Keep ‘peak’ dot at top

// Color pixels based on rainbow gradient

for(i=0; i if(i 》= height) strip.setPixelColor(i, 0, 0, 0);

else strip.setPixelColor(i,Wheel(map(i,0,strip.numPixels()-1,30,150)));

}

// Draw peak dot

if(peak 》 0 && peak 《= N_PIXELS-1) strip.setPixelColor(peak,Wheel(map(peak,0,strip.numPixels()-1,30,150)));

strip.show(); // Update strip

// Every few frames, make the peak pixel drop by 1:

if(++dotCount 》= PEAK_FALL) { //fall rate

if(peak 》 0) peak--;

dotCount = 0;

}

vol[volCount] = n; // Save sample for dynamic leveling

if(++volCount 》= SAMPLES) volCount = 0; // Advance/rollover sample counter

// Get volume range of prior frames

minLvl = maxLvl = vol[0];

for(i=1; i if(vol[i] 《 minLvl) minLvl = vol[i];

else if(vol[i] 》 maxLvl) maxLvl = vol[i];

}

// minLvl and maxLvl indicate the volume range over prior frames, used

// for vertically scaling the output graph (so it looks interesting

// regardless of volume level)。 If they‘re too close together though

// (e.g. at very low volume levels) the graph becomes super coarse

// and ’jumpy‘。..so keep some minimum distance between them (this

// also lets the graph go to zero when no sound is playing):

if((maxLvl - minLvl) 《 TOP) maxLvl = minLvl + TOP;

minLvlAvg = (minLvlAvg * 63 + minLvl) 》》 6; // Dampen min/max levels

maxLvlAvg = (maxLvlAvg * 63 + maxLvl) 》》 6; // (fake rolling average)

}

// Input a value 0 to 255 to get a color value.

// The colors are a transition r - g - b - back to r.

uint32_t Wheel(byte WheelPos) {

if(WheelPos 《 85) {

return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);

} else if(WheelPos 《 170) {

WheelPos -= 85;

return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);

} else {

WheelPos -= 170;

return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);

}

}

/*

LED VU meter for Arduino and Adafruit NeoPixel LEDs. More info: http://learn.adafruit.com/led-ampli-tie/

Hardware requirements:

- Most Arduino or Arduino-compatible boards (ATmega 328P or better)。

- Adafruit Electret Microphone Amplifier (ID: 1063)

- Adafruit Flora RGB Smart Pixels (ID: 1260)

OR

- Adafruit NeoPixel Digital LED strip (ID: 1138)

- Optional: battery for portable use (else power through USB or adapter)

Software requirements:

- Adafruit NeoPixel library

Connections:

- 3.3V to mic amp +

- GND to mic amp -

- Analog pin to microphone output (configurable below)

- Digital pin to LED data input (configurable below)

See notes in setup() regarding 5V vs. 3.3V boards - there may be an

extra connection to make and one line of code to enable or disable.

Written by Adafruit Industries. Distributed under the BSD license.

This paragraph must be included in any redistribution.

*/

#include

#define N_PIXELS 16 // Number of pixels in strand

#define MIC_PIN A9 // Microphone is attached to this analog pin

#define LED_PIN 6 // NeoPixel LED strand is connected to this pin

#define DC_OFFSET 0 // DC offset in mic signal - if unusure, leave 0

#define NOISE 10 // Noise/hum/interference in mic signal

#define SAMPLES 60 // Length of buffer for dynamic level adjustment

#define TOP (N_PIXELS + 2) // Allow dot to go slightly off scale

#define PEAK_FALL 40 // Rate of peak falling dot

byte

peak = 0, // Used for falling dot

dotCount = 0, // Frame counter for delaying dot-falling speed

volCount = 0; // Frame counter for storing past volume data

int

vol[SAMPLES], // Collection of prior volume samples

lvl = 10, // Current “dampened” audio level

minLvlAvg = 0, // For dynamic adjustment of graph low & high

maxLvlAvg = 512;

Adafruit_NeoPixel

strip = Adafruit_NeoPixel(N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup() {

// This is only needed on 5V Arduinos (Uno, Leonardo, etc.)。

// Connect 3.3V to mic AND TO AREF ON ARDUINO and enable this

// line. Audio samples are ’cleaner‘ at 3.3V.

// COMMENT OUT THIS LINE FOR 3.3V ARDUINOS (FLORA, ETC.):

// analogReference(EXTERNAL);

memset(vol, 0, sizeof(vol));

strip.begin();

}

void loop() {

uint8_t i;

uint16_t minLvl, maxLvl;

int n, height;

n = analogRead(MIC_PIN); // Raw reading from mic

n = abs(n - 512 - DC_OFFSET); // Center on zero

n = (n 《= NOISE) ? 0 : (n - NOISE); // Remove noise/hum

lvl = ((lvl * 7) + n) 》》 3; // “Dampened” reading (else looks twitchy)

// Calculate bar height based on dynamic min/max levels (fixed point):

height = TOP * (lvl - minLvlAvg) / (long)(maxLvlAvg - minLvlAvg);

if(height 《 0L) height = 0; // Clip output

else if(height 》 TOP) height = TOP;

if(height 》 peak) peak = height; // Keep ’peak‘ dot at top

// Color pixels based on rainbow gradient

for(i=0; i if(i 》= height) strip.setPixelColor(i, 0, 0, 0);

else strip.setPixelColor(i,Wheel(map(i,0,strip.numPixels()-1,30,150)));

}

// Draw peak dot

if(peak 》 0 && peak 《= N_PIXELS-1) strip.setPixelColor(peak,Wheel(map(peak,0,strip.numPixels()-1,30,150)));

strip.show(); // Update strip

// Every few frames, make the peak pixel drop by 1:

if(++dotCount 》= PEAK_FALL) { //fall rate

if(peak 》 0) peak--;

dotCount = 0;

}

vol[volCount] = n; // Save sample for dynamic leveling

if(++volCount 》= SAMPLES) volCount = 0; // Advance/rollover sample counter

// Get volume range of prior frames

minLvl = maxLvl = vol[0];

for(i=1; i if(vol[i] 《 minLvl) minLvl = vol[i];

else if(vol[i] 》 maxLvl) maxLvl = vol[i];

}

// minLvl and maxLvl indicate the volume range over prior frames, used

// for vertically scaling the output graph (so it looks interesting

// regardless of volume level)。 If they’re too close together though

// (e.g. at very low volume levels) the graph becomes super coarse

// and ‘jumpy’。..so keep some minimum distance between them (this

// also lets the graph go to zero when no sound is playing):

if((maxLvl - minLvl) 《 TOP) maxLvl = minLvl + TOP;

minLvlAvg = (minLvlAvg * 63 + minLvl) 》》 6; // Dampen min/max levels

maxLvlAvg = (maxLvlAvg * 63 + maxLvl) 》》 6; // (fake rolling average)

}

// Input a value 0 to 255 to get a color value.

// The colors are a transition r - g - b - back to r.

uint32_t Wheel(byte WheelPos) {

if(WheelPos 《 85) {

return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);

} else if(WheelPos 《 170) {

WheelPos -= 85;

return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);

} else {

WheelPos -= 170;

return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);

}

}

第二個(gè)允許您調(diào)整VU表的靈敏度:

下載:Project Zip 或 Ampli_Tie_Adjustable.ino | 在Github上查看

復(fù)制代碼

/*

LED VU meter for Arduino and Adafruit NeoPixel LEDs. More info: http://learn.adafruit.com/led-ampli-tie/

Hardware requirements:

- Most Arduino or Arduino-compatible boards (ATmega 328P or better)。

- Adafruit Electret Microphone Amplifier (ID: 1063)

- Adafruit Flora RGB Smart Pixels (ID: 1260)

OR

- Adafruit NeoPixel Digital LED strip (ID: 1138)

- Optional: battery for portable use (else power through USB or adapter)

Software requirements:

- Adafruit NeoPixel library

Connections:

- 3.3V to mic amp +

- GND to mic amp -

- Analog pin to microphone output (configurable below)

- Digital pin to LED data input (configurable below)

See notes in setup() regarding 5V vs. 3.3V boards - there may be an

extra connection to make and one line of code to enable or disable.

Written by Adafruit Industries. Distributed under the BSD license.

This paragraph must be included in any redistribution.

fscale function:

Floating Point Autoscale Function V0.1

Written by Paul Badger 2007

Modified from code by Greg Shakar

*/

#include

#include

#define N_PIXELS 16 // Number of pixels in strand

#define MIC_PIN A9 // Microphone is attached to this analog pin

#define LED_PIN 6 // NeoPixel LED strand is connected to this pin

#define SAMPLE_WINDOW 10 // Sample window for average level

#define PEAK_HANG 24 //Time of pause before peak dot falls

#define PEAK_FALL 4 //Rate of falling peak dot

#define INPUT_FLOOR 10 //Lower range of analogRead input

#define INPUT_CEILING 300 //Max range of analogRead input, the lower the value the more sensitive (1023 = max)

byte peak = 16; // Peak level of column; used for falling dots

unsigned int sample;

byte dotCount = 0; //Frame counter for peak dot

byte dotHangCount = 0; //Frame counter for holding peak dot

Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup()

{

// This is only needed on 5V Arduinos (Uno, Leonardo, etc.)。

// Connect 3.3V to mic AND TO AREF ON ARDUINO and enable this

// line. Audio samples are ‘cleaner’ at 3.3V.

// COMMENT OUT THIS LINE FOR 3.3V ARDUINOS (FLORA, ETC.):

// analogReference(EXTERNAL);

// Serial.begin(9600);

strip.begin();

strip.show(); // Initialize all pixels to ‘off’

}

void loop()

{

unsigned long startMillis= millis(); // Start of sample window

float peakToPeak = 0; // peak-to-peak level

unsigned int signalMax = 0;

unsigned int signalMin = 1023;

unsigned int c, y;

// collect data for length of sample window (in mS)

while (millis() - startMillis 《 SAMPLE_WINDOW)

{

sample = analogRead(MIC_PIN);

if (sample 《 1024) // toss out spurious readings

{

if (sample 》 signalMax)

{

signalMax = sample; // save just the max levels

}

else if (sample 《 signalMin)

{

signalMin = sample; // save just the min levels

}

}

}

peakToPeak = signalMax - signalMin; // max - min = peak-peak amplitude

// Serial.println(peakToPeak);

//Fill the strip with rainbow gradient

for (int i=0;i《=strip.numPixels()-1;i++){

strip.setPixelColor(i,Wheel(map(i,0,strip.numPixels()-1,30,150)));

}

//Scale the input logarithmically instead of linearly

c = fscale(INPUT_FLOOR, INPUT_CEILING, strip.numPixels(), 0, peakToPeak, 2);

if(c 《 peak) {

peak = c; // Keep dot on top

dotHangCount = 0; // make the dot hang before falling

}

if (c 《= strip.numPixels()) { // Fill partial column with off pixels

drawLine(strip.numPixels(), strip.numPixels()-c, strip.Color(0, 0, 0));

}

// Set the peak dot to match the rainbow gradient

y = strip.numPixels() - peak;

strip.setPixelColor(y-1,Wheel(map(y,0,strip.numPixels()-1,30,150)));

strip.show();

// Frame based peak dot animation

if(dotHangCount 》 PEAK_HANG) { //Peak pause length

if(++dotCount 》= PEAK_FALL) { //Fall rate

peak++;

dotCount = 0;

}

}

else {

dotHangCount++;

}

}

//Used to draw a line between two points of a given color

void drawLine(uint8_t from, uint8_t to, uint32_t c) {

uint8_t fromTemp;

if (from 》 to) {

fromTemp = from;

from = to;

to = fromTemp;

}

for(int i=from; i《=to; i++){

strip.setPixelColor(i, c);

}

}

float fscale( float originalMin, float originalMax, float newBegin, float

newEnd, float inputValue, float curve){

float OriginalRange = 0;

float NewRange = 0;

float zeroRefCurVal = 0;

float normalizedCurVal = 0;

float rangedValue = 0;

boolean invFlag = 0;

// condition curve parameter

// limit range

if (curve 》 10) curve = 10;

if (curve 《 -10) curve = -10;

curve = (curve * -.1) ; // - invert and scale - this seems more intuitive - postive numbers give more weight to high end on output

curve = pow(10, curve); // convert linear scale into lograthimic exponent for other pow function

/*

Serial.println(curve * 100, DEC); // multply by 100 to preserve resolution

Serial.println();

*/

// Check for out of range inputValues

if (inputValue 《 originalMin) {

inputValue = originalMin;

}

if (inputValue 》 originalMax) {

inputValue = originalMax;

}

// Zero Refference the values

OriginalRange = originalMax - originalMin;

if (newEnd 》 newBegin){

NewRange = newEnd - newBegin;

}

else

{

NewRange = newBegin - newEnd;

invFlag = 1;

}

zeroRefCurVal = inputValue - originalMin;

normalizedCurVal = zeroRefCurVal / OriginalRange; // normalize to 0 - 1 float

// Check for originalMin 》 originalMax - the math for all other cases i.e. negative numbers seems to work out fine

if (originalMin 》 originalMax ) {

return 0;

}

if (invFlag == 0){

rangedValue = (pow(normalizedCurVal, curve) * NewRange) + newBegin;

}

else // invert the ranges

{

rangedValue = newBegin - (pow(normalizedCurVal, curve) * NewRange);

}

return rangedValue;

}

// Input a value 0 to 255 to get a color value.

// The colours are a transition r - g - b - back to r.

uint32_t Wheel(byte WheelPos) {

if(WheelPos 《 85) {

return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);

}

else if(WheelPos 《 170) {

WheelPos -= 85;

return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);

}

else {

WheelPos -= 170;

return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);

}

}

/*

LED VU meter for Arduino and Adafruit NeoPixel LEDs. More info: http://learn.adafruit.com/led-ampli-tie/

Hardware requirements:

- Most Arduino or Arduino-compatible boards (ATmega 328P or better)。

- Adafruit Electret Microphone Amplifier (ID: 1063)

- Adafruit Flora RGB Smart Pixels (ID: 1260)

OR

- Adafruit NeoPixel Digital LED strip (ID: 1138)

- Optional: battery for portable use (else power through USB or adapter)

Software requirements:

- Adafruit NeoPixel library

Connections:

- 3.3V to mic amp +

- GND to mic amp -

- Analog pin to microphone output (configurable below)

- Digital pin to LED data input (configurable below)

See notes in setup() regarding 5V vs. 3.3V boards - there may be an

extra connection to make and one line of code to enable or disable.

Written by Adafruit Industries. Distributed under the BSD license.

This paragraph must be included in any redistribution.

fscale function:

Floating Point Autoscale Function V0.1

Written by Paul Badger 2007

Modified from code by Greg Shakar

*/

#include

#include

#define N_PIXELS 16 // Number of pixels in strand

#define MIC_PIN A9 // Microphone is attached to this analog pin

#define LED_PIN 6 // NeoPixel LED strand is connected to this pin

#define SAMPLE_WINDOW 10 // Sample window for average level

#define PEAK_HANG 24 //Time of pause before peak dot falls

#define PEAK_FALL 4 //Rate of falling peak dot

#define INPUT_FLOOR 10 //Lower range of analogRead input

#define INPUT_CEILING 300 //Max range of analogRead input, the lower the value the more sensitive (1023 = max)

byte peak = 16; // Peak level of column; used for falling dots

unsigned int sample;

byte dotCount = 0; //Frame counter for peak dot

byte dotHangCount = 0; //Frame counter for holding peak dot

Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup()

{

// This is only needed on 5V Arduinos (Uno, Leonardo, etc.)。

// Connect 3.3V to mic AND TO AREF ON ARDUINO and enable this

// line. Audio samples are ‘cleaner’ at 3.3V.

// COMMENT OUT THIS LINE FOR 3.3V ARDUINOS (FLORA, ETC.):

// analogReference(EXTERNAL);

// Serial.begin(9600);

strip.begin();

strip.show(); // Initialize all pixels to ‘off’

}

void loop()

{

unsigned long startMillis= millis(); // Start of sample window

float peakToPeak = 0; // peak-to-peak level

unsigned int signalMax = 0;

unsigned int signalMin = 1023;

unsigned int c, y;

// collect data for length of sample window (in mS)

while (millis() - startMillis 《 SAMPLE_WINDOW)

{

sample = analogRead(MIC_PIN);

if (sample 《 1024) // toss out spurious readings

{

if (sample 》 signalMax)

{

signalMax = sample; // save just the max levels

}

else if (sample 《 signalMin)

{

signalMin = sample; // save just the min levels

}

}

}

peakToPeak = signalMax - signalMin; // max - min = peak-peak amplitude

// Serial.println(peakToPeak);

//Fill the strip with rainbow gradient

for (int i=0;i《=strip.numPixels()-1;i++){

strip.setPixelColor(i,Wheel(map(i,0,strip.numPixels()-1,30,150)));

}

//Scale the input logarithmically instead of linearly

c = fscale(INPUT_FLOOR, INPUT_CEILING, strip.numPixels(), 0, peakToPeak, 2);

if(c 《 peak) {

peak = c; // Keep dot on top

dotHangCount = 0; // make the dot hang before falling

}

if (c 《= strip.numPixels()) { // Fill partial column with off pixels

drawLine(strip.numPixels(), strip.numPixels()-c, strip.Color(0, 0, 0));

}

// Set the peak dot to match the rainbow gradient

y = strip.numPixels() - peak;

strip.setPixelColor(y-1,Wheel(map(y,0,strip.numPixels()-1,30,150)));

strip.show();

// Frame based peak dot animation

if(dotHangCount 》 PEAK_HANG) { //Peak pause length

if(++dotCount 》= PEAK_FALL) { //Fall rate

peak++;

dotCount = 0;

}

}

else {

dotHangCount++;

}

}

//Used to draw a line between two points of a given color

void drawLine(uint8_t from, uint8_t to, uint32_t c) {

uint8_t fromTemp;

if (from 》 to) {

fromTemp = from;

from = to;

to = fromTemp;

}

for(int i=from; i《=to; i++){

strip.setPixelColor(i, c);

}

}

float fscale( float originalMin, float originalMax, float newBegin, float

newEnd, float inputValue, float curve){

float OriginalRange = 0;

float NewRange = 0;

float zeroRefCurVal = 0;

float normalizedCurVal = 0;

float rangedValue = 0;

boolean invFlag = 0;

// condition curve parameter

// limit range

if (curve 》 10) curve = 10;

if (curve 《 -10) curve = -10;

curve = (curve * -.1) ; // - invert and scale - this seems more intuitive - postive numbers give more weight to high end on output

curve = pow(10, curve); // convert linear scale into lograthimic exponent for other pow function

/*

Serial.println(curve * 100, DEC); // multply by 100 to preserve resolution

Serial.println();

*/

// Check for out of range inputValues

if (inputValue 《 originalMin) {

inputValue = originalMin;

}

if (inputValue 》 originalMax) {

inputValue = originalMax;

}

// Zero Refference the values

OriginalRange = originalMax - originalMin;

if (newEnd 》 newBegin){

NewRange = newEnd - newBegin;

}

else

{

NewRange = newBegin - newEnd;

invFlag = 1;

}

zeroRefCurVal = inputValue - originalMin;

normalizedCurVal = zeroRefCurVal / OriginalRange; // normalize to 0 - 1 float

// Check for originalMin 》 originalMax - the math for all other cases i.e. negative numbers seems to work out fine

if (originalMin 》 originalMax ) {

return 0;

}

if (invFlag == 0){

rangedValue = (pow(normalizedCurVal, curve) * NewRange) + newBegin;

}

else // invert the ranges

{

rangedValue = newBegin - (pow(normalizedCurVal, curve) * NewRange);

}

return rangedValue;

}

// Input a value 0 to 255 to get a color value.

// The colours are a transition r - g - b - back to r.

uint32_t Wheel(byte WheelPos) {

if(WheelPos 《 85) {

return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);

}

else if(WheelPos 《 170) {

WheelPos -= 85;

return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);

}

else {

WheelPos -= 170;

return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);

}

}

戴上它!

帶你去鎮(zhèn)上打領(lǐng)帶!非常適合舉辦聚會(huì),音樂(lè)會(huì),婚禮,圣餐儀式。..

如果您需要洗領(lǐng)帶,取下電池并輕輕點(diǎn)清潔-像素,線和植物區(qū)系可以處理變濕(然后干透) ,但不要讓水進(jìn)入麥克風(fēng)。
責(zé)任編輯:wv

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • led
    led
    +關(guān)注

    關(guān)注

    244

    文章

    24731

    瀏覽量

    692644
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    3535UVA 紫外線燈珠的組成海隆興光電LED 工廠# LED封裝#LED #

    led
    深圳聯(lián)德森科技有限公司
    發(fā)布于 :2026年04月16日 14:21:25

    索尼3.0版虛擬制作工具套裝重磅升級(jí)

    索尼新推出的 3.0 版虛擬制作工具套裝由攝影機(jī)與顯示屏虛擬制作插件(Camera and Display Plugin)和色彩校準(zhǔn)工具(Color Calibrator)組成,在 2.0 版本
    的頭像 發(fā)表于 04-09 10:53 ?498次閱讀

    XINGLIGHT 成興光top led #電子技術(shù) #電子制作 #Top #LED

    led
    成興光電子
    發(fā)布于 :2026年02月28日 16:34:21

    洲明科技參與虛擬制作LED顯示屏規(guī)范行業(yè)標(biāo)準(zhǔn)制定

    10月16日上午,“以高標(biāo)準(zhǔn)引領(lǐng)新質(zhì)未來(lái)——超高清視頻顯示產(chǎn)業(yè)深圳標(biāo)準(zhǔn)認(rèn)證促進(jìn)會(huì)議暨《虛擬制作LED顯示屏規(guī)范》行業(yè)標(biāo)準(zhǔn)啟動(dòng)會(huì)”在洲明科技福永總部(深圳)隆重舉行。
    的頭像 發(fā)表于 10-22 15:50 ?826次閱讀

    奧拓電子助力上海電影學(xué)院LED數(shù)字虛擬影棚投入運(yùn)營(yíng)

    近日,上海電影學(xué)院LED數(shù)字虛擬影棚正式投入運(yùn)營(yíng)。該影棚核心設(shè)備采用奧拓電子RM2.3S虛擬拍攝LED顯示屏,構(gòu)建起一座23米×7米的弧形LED影棚。此影棚的建成與投用,不僅標(biāo)志著上海電影學(xué)院在虛擬
    的頭像 發(fā)表于 08-22 11:47 ?1471次閱讀

    索尼重載設(shè)備的高質(zhì)量遠(yuǎn)程制作方案和應(yīng)用(2)

    索尼的遠(yuǎn)程制作可以被稱之為制作級(jí)的高質(zhì)量遠(yuǎn)程制作,或重載設(shè)備的高質(zhì)量遠(yuǎn)程制作,遠(yuǎn)程設(shè)備結(jié)合常規(guī)系統(tǒng)設(shè)備,提供和本地制作類似的
    的頭像 發(fā)表于 08-21 15:56 ?1443次閱讀
    索尼重載設(shè)備的高質(zhì)量遠(yuǎn)程<b class='flag-5'>制作</b>方案和應(yīng)用(2)

    索尼重載設(shè)備的高質(zhì)量遠(yuǎn)程制作方案和應(yīng)用(1)

    遠(yuǎn)程制作是近來(lái)技術(shù)發(fā)展的重點(diǎn)之一。遠(yuǎn)程制作通用的分類是什么?一些痛點(diǎn)如何解決,比如碼率和畫質(zhì)的矛盾,HFR超高速信號(hào)如何傳輸,多種輔助信號(hào)如何減少對(duì)公網(wǎng)IP地址的依賴等?索尼支持多種遠(yuǎn)程制作模式,在
    的頭像 發(fā)表于 08-21 15:55 ?1109次閱讀
    索尼重載設(shè)備的高質(zhì)量遠(yuǎn)程<b class='flag-5'>制作</b>方案和應(yīng)用(1)

    LED電視等于真LED屏嗎?

    LED電視等于真LED屏嗎?
    的頭像 發(fā)表于 08-05 15:03 ?1757次閱讀

    櫥窗革命來(lái)了!全息屏讓玻璃秒變吸睛神器#LED全息屏 #LED貼膜屏

    led
    深圳市國(guó)鑫光電科技股份有限公司
    發(fā)布于 :2025年06月21日 15:28:41

    奧拓電子LED屏幕:讓虛擬制作走進(jìn)生活的每個(gè)角落

    “Setting Up Shop”的快閃活動(dòng) ,通過(guò)奧拓電子高性能的RM系列LED屏幕,打破了虛擬制作只能在專業(yè)影棚實(shí)現(xiàn)的傳統(tǒng)認(rèn)知, 讓街頭巷尾也能成為光影藝術(shù)的舞臺(tái) 。 一塊LED屏 如何重塑空間敘事? 走進(jìn)這家“變身”后的
    的頭像 發(fā)表于 06-18 10:01 ?1538次閱讀

    各種WIFI天線制作技巧資料

    各種WIFI 天線制作技巧資料
    發(fā)表于 06-10 15:11 ?0次下載

    雙菱天線制作資料

    高效天線制作
    發(fā)表于 06-10 15:10 ?0次下載

    3分鐘帶你逛LED封裝廠家#

    led
    海隆興光電
    發(fā)布于 :2025年05月29日 13:55:17

    U盤一鍵制作

    在電腦維修中啟動(dòng)盤很重要,靠譜的u盤一鍵啟動(dòng)制作方法
    發(fā)表于 05-06 16:10 ?44次下載
    侯马市| 永州市| 中牟县| 且末县| 抚松县| 邢台县| 郯城县| 新丰县| 伊宁县| 含山县| 临猗县| 天镇县| 五原县| 元阳县| 乐业县| 云梦县| 梨树县| 梅河口市| 威宁| 海阳市| 固安县| 新沂市| 漠河县| 彰化市| 吴旗县| 富平县| 玛沁县| 云梦县| 濮阳县| 萝北县| 汕尾市| 寿宁县| 湘潭市| 治多县| 嘉黎县| 双桥区| 海安县| 明溪县| 乐清市| 泾阳县| 巴南区|