女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

LED領帶的制作

454398 ? 來源:網絡整理 ? 作者:網絡整理 ? 2019-11-28 17:31 ? 次閱讀

概述

使領帶像VU計一樣亮起來!這個Flora項目使用駐極體麥克風放大器觸發沿著領帶長度用導電線縫制的16個Flora NeoPixels。

在開始這個項目之前,我們建議閱讀以下指南:

開始于FLORA

Adafruit麥克風放大器突破

導電線

圖片由johngineer拍攝。

工具和用品

材料清單:

16 Flora NeoPixels

Flora主板

麥克風放大器突破

鋰聚合物電池

用于電池袋的碎布

3層導電線

標準棉/多股線

絲帶電纜或導電線帶

斷裂式領帶或其他形式的領帶

您將使用針頭來縫合電路。

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

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

您將需要高質量的基本萬用表,可以測量電壓和連續性。

單擊此處購買基本萬用表。

單擊此處購買頂級萬用表。

單擊此處購買袖珍萬用表。

也不要忘記學習如何使用您的萬用表!

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

升級到高端電烙鐵設置,例如我們在商店中購買的Hakko FX-888,將使焊接變得既輕松又有趣。

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

單擊此處購買我們的入門級可調30W 110V烙鐵。

單擊此處可升級到原裝的Hakko FX-888可調溫度烙鐵。

學習如何使用大量教程進行焊接!

您將需要60/40焊料的松香芯。好的焊料是一件好事。不良的焊錫會導致橋接和冷焊點很難找到。

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

單擊此處購買一盤無鉛焊料。

span》

電路圖

Flora像素都連接到公共接地總線,以及連接到VBATT的公共電源總線。 Flora像素數據總線連接到D6。麥克風放大器連接到3.3V,GND和D9。

電池袋和植物

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

插頭在領帶的褶皺處加入了Flora,因此不會被抓住

通過在領帶上縫一些未使用的墊子,用普通線將Flora固定在適當的位置。嘗試只縫到領帶的背面,使前部織物保持光滑。

縫紉像素

使用標尺在裁縫的粉筆下沿著領帶的中心劃一條線,并沿著這條線均勻分配您的16個Flora像素。

用粉筆標記每個像素的位置。

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

通過將此長接地線連接到像素上的(-)焊盤來添加更多像素。

將數據總線從D6縫到第一個像素上的輸入板(標有向內箭頭)。捆扎,密封結,并剪斷線。

在每個像素之間縫制一小段導電線,將一個像素的輸出連接到下一個輸入。

查看我們的《導電線》指南以獲取更多提示

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

縫合好幾個像素后,請用萬用表測試短路(確保長電源和地線沒有接觸),并啟動NeoPixel庫測試代碼,以確保到目前為止您的初毛電路都正常。 br》

將其余部分縫合起來像素-您將有一條較長的接地總線,一條較長的電源總線以及每個輸入/輸出數據板之間的短線段。

添加麥克風

要配合領帶,請在麥克風放大器上涂一點黑色指甲油。

將帶狀電纜的長度比扎帶的主要部分長。

將三根電線與麥克風放大器一起使用,剝線將束縛在扎帶的結上。

將帶狀電纜穿過扎帶的內部插入。在領帶結內用接縫撕開器切一個小孔,并將帶狀電纜穿過其中。

剝去導線末端并焊接直到麥克風放大器上的三個孔。

使用大螺紋通過大安裝孔將麥克風固定在領帶上。

回到板的Flora端,焊接相應的導線連接到3.3V,GND和D9。

代碼

準備就緒

此項目需要NeoPixel庫。對于較新的Arduino IDE版本,請選擇“庫管理器”,滾動到“ Adafruit_NeoPixel”并安裝最新版本。

對于非常舊的Arduino IDE版本,請單擊NeoPixel Github存儲庫頁面上的ZIP按鈕進行下載,然后重命名

有關對Flora板進行編程的更多信息(包括所需的軟件),請轉到Flora入門指南。

代碼

我們對該項目感到非常興奮,我們制作了兩個Arduino草圖來測量房間的體積(Phil Burgess,James DeVito和Andy Doro)。您可以在LED Ampli-Tie Github存儲庫中下載它們。您可以從下面的清單中下載代碼。第一個動態調整以適應發生的任何情況:

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

復制代碼

/*

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);

}

}

第二個允許您調整VU表的靈敏度:

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

復制代碼

/*

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);

}

}

戴上它!

帶你去鎮上打領帶!非常適合舉辦聚會,音樂會,婚禮,圣餐儀式。..

如果您需要洗領帶,取下電池并輕輕點清潔-像素,線和植物區系可以處理變濕(然后干透) ,但不要讓水進入麥克風。
責任編輯:wv

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • led
    led
    +關注

    關注

    242

    文章

    23703

    瀏覽量

    670911
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    松下影像制作方案分享會成功舉辦

    近日,松下紀念館熱鬧非凡,新老朋友如約而至,相聚“松下影像制作方案分享會”。本次活動以“賦能4K融媒制作”為主題,向大家展示了松下以KAIROS為核心的多格式IP/SDI混合融媒制作流程,同時分享豎屏拍攝的高效解決方案。
    的頭像 發表于 04-27 10:30 ?214次閱讀

    DLPC3479 GUI上面的Edit Firmware制作中有幾個疑問求解

    圖片一些可以制作,一些提示 3.step4中的LED Current 電流大小有哪些限制,要怎么設置?
    發表于 02-19 06:23

    開源項目!手把手教你制作一個互動式LED墻壁時鐘!

    ,再上傳最終代碼完成你的互動式時鐘制作。 請注意安裝Neopixel和RTCds1302庫,并觀看相關視頻了解代碼的工作原理。到此,你成功完成了自己的互動式LED墻壁時鐘! *附件:代碼.zip 作者
    發表于 02-08 17:47

    白光LED熒光粉合成途徑與光學性能研究

    熒光粉是制作白光LED中一個非常關鍵的材料,它的性能直接影響白光LED的亮度、色坐標、色溫及顯色性等。因而開發具有良好發光特性的熒光粉是得到高亮度、高發光效率、高顯色性白光LED的關鍵
    的頭像 發表于 02-07 14:05 ?555次閱讀
    白光<b class='flag-5'>LED</b>熒光粉合成途徑與光學性能研究

    松下MPS媒體制作平臺概述

    MPS媒體制作平臺是一款免費的綜合性軟件平臺,專為解決視頻制作中的繁雜問題而打造。它將松下攝像機的設置、管理和控制功能集于一體,能適應線上講座、網絡研討會、學術會議、現場活動等各類場景,有效提升視頻制作質量,簡化工作流程。
    的頭像 發表于 02-05 11:18 ?499次閱讀

    虛擬制作技術在廣告領域中的應用與挑戰

    技術的每一次革新都為創意的實現提供了更多可能。隨著虛擬制作技術日趨成熟及其在廣告領域全流程的應用,廣告內容制作進入到了更高效的數字化時代。在剛剛落幕的第三屆上海國際虛擬制作大會暨展覽會(VPS
    的頭像 發表于 12-06 09:39 ?894次閱讀

    HDI板盲孔制作常見缺陷及解決

    HDI板是一種高密度互連印刷電路板,其特點是線路密度高、孔徑小、層間連接復雜。在HDI板的制作過程中,盲孔的制作是一個關鍵步驟,同時也是常見的缺陷發生環節。以下是根據搜索結果總結的HDI板盲孔制作的常見缺陷及其解決方法。
    的頭像 發表于 11-02 10:33 ?954次閱讀

    AIGC在視頻內容制作中的應用前景

    AIGC(Artificial Intelligence Generated Content,人工智能生成內容)在視頻內容制作中的應用前景廣闊,主要體現在以下幾個方面: 一、提高視頻內容制作效率
    的頭像 發表于 10-25 15:44 ?1563次閱讀

    開關電源設計與制作

    電子發燒友網站提供《開關電源設計與制作.doc》資料免費下載
    發表于 10-24 16:36 ?8次下載

    科技感應門為何青睞LED全息屏?揭秘現代科技新風尚。#LED全息貼膜屏

    led
    深圳市國鑫光電科技股份有限公司
    發布于 :2024年09月27日 16:38:32

    光刻掩膜版制作流程

    光刻掩膜版的制作是一個復雜且精密的過程,涉及到多個步驟和技術。以下是小編整理的光刻掩膜版制作流程: 1. 設計與準備 在開始制作光刻掩膜版之前,首先需要根據電路設計制作出掩模的版圖。這
    的頭像 發表于 09-14 13:26 ?1359次閱讀

    AI+XR打造內容制作新范式 隨幻科技全新虛擬制作方案首秀BIRTV2024

    基于隨幻ZONE數字化影棚和XR-PRO帶深度LED虛擬制作系統這兩套全新的技術方案,隨幻科技將持續探索與不同內容形式的結合,并進行這一技術方案在業內團隊與高校的培訓合作。
    的頭像 發表于 08-28 16:56 ?606次閱讀
    AI+XR打造內容<b class='flag-5'>制作</b>新范式 隨幻科技全新虛擬<b class='flag-5'>制作</b>方案首秀BIRTV2024

    PCB電路板設計與制作的步驟和要點

    一站式PCBA智造廠家今天為大家講講pcb設計制作流程和要點是什么?PCB設計制作流程和要點。PCB設計是電子產品開發過程中的關鍵步驟之一。 PCB設計制作流程和要點 PCB設計制作
    的頭像 發表于 08-02 09:24 ?1407次閱讀