Glödande färgskiftande gitarr (30 / 49 steg)
Steg 30: Program
Programmera Arduino med följande kod:
/*
******************************
Glödande färgskiftande gitarr
******************************
av Randy Sarafan - 2013
Kontroller en LED strip baserat på uppspelning av en gitarr.
-Intensiteten av leka styr ljusstyrkan.
-Frekvensen för intensiv spelar styr färgen.
Denna kod används Adafruit_NeoPixel biblioteket som kan hittas här:
https://github.com/adafruit/Adafruit_NeoPixel
För mer information och en schematisk besök projektets sida på:
Denna kod är i Public Domain.
Men om du tycker att det är otroligt användbart, köpa mig en pizza.
*/
LED strip bibliotek
#include < Adafruit_NeoPixel.h >
Namn pin 12 "PIN"
#define stift 12
Ställ in parametrar för LED strip
Jag använder LED strip säljs på Radioshack
Adafruit_NeoPixel strip = Adafruit_NeoPixel (30, PIN, NEO_GRB + NEO_KHZ400);
Som den namngivna av analog i pin
CONST int analogInPin = A0;
Variabel att läsa det inkommande ljudet på det analoga stiftet
int sensorValue = 0;
Variabel för kartläggning av inkommande ljud till ett intensitetsvärde mellan 0 och 255
int outputValue = 0;
Variabeln som används för att lagra stämmer för alla värden som ingick i urvalet
int sensorValue1 = 0;
Antalet ljud värden provtas innan LED strip uppdateras
int sampleSize = 30.
Håller en löpande stämmer av de prover som tagits
int additup = 0;
Andelen som färgen går från blått (0) till rött (255)
int colorChangeRate = 3;
Andelen som färgen går från rött (255) blå (0)
Detta måste alltid vara mindre än colorChangeRate
int colorDecayRate = 2;
Denna variabel används för att spåra hur ofta gitarr spelas högt.
Detta värde ökar, ändras färgen. Denna variabel är dock automatiskt
minskar medan gitarr spelas inte.
int addupintensity = 0;
Används för att lagra rgb-värden för LED strip
uint32_t rgbValues;
void setup() {
Initiera LED strip och stänga av
Strip.BEGIN();
Strip.show();
}
void loop() {
Läs analogt värde:
sensorValue = analogRead(analogInPin);
Den ljud våg går över och under (ca) 500
Om vi bara läsa siffrorna ovan 500, endast hälften av den
ljud våg skulle provtas. Denna villkorliga tar den
numrerar under 500 och ändrar dem till lämpliga siffrorna ovan.
Jag är att siffror som är +/-5 från 500 till vara 500 se till
att LED strip stannar på 0 ljusstyrka medan det inte spelas.
om (sensorValue < 500) {
sensorValue = ((500-sensorValue) + 500);
om (495 < sensorValue < 505) {
sensorValue = 500.
}
}
Hålla en kör stämmer av alla sensor värden läsa.
Detta stämmer kommer att beräknas efter antalet stickprov storlek är nått.
sensorValue1 = sensorValue + sensorValue1;
Håll koll på hur många prov har tagits.
additup = additup + 1.
Gör detta när antalet prover matchar variabeln sampleSize
IF(additup == sampleSize) {
Återställa prov räkningen.
additup = 0;
Värdet sensorn vara medelvärdet av den sensor stämmer dividerat med stickprovets storlek.
sensorValue1 = sensorValue1 / sampleSize;
Karta genomsnittliga sensor värdet till ett tal mellan 0 och 255 för ljusstyrka
outputValue = karta (sensorValue1, 500, 1023, 0, 255);
Om den genomsnittliga sensor behandlingen är över 700 tröskeln
öka sedan addupintensity (variabel som ändrar färg)
om (sensorValue1 > 700) {
addupintensity = addupintensity + colorChangeRate;
}
Låt inte addupintensity gå över 255
om (addupintensity > 255) {
addupintensity = 255;
}
Cykler mellan färger baserat på värdet av addupintensity.
Som de antal ökar från 0 till 255 går färgen från blå, grön, röd.
om (addupintensity < 85) {
rgbValues = remsa. Färg (255 - addupintensity * 3, addupintensity * 3, 0); //blue till grönt
} else om (addupintensity < 170) {
rgbValues = remsa. Färg (0, 255 - (addupintensity - 85) * 3, (addupintensity - 85) * 3); grön till röd
} annat {
rgbValues = remsa. Färg (0, 0, 255); Röd
}
Anropar funktionen för att skicka färgvärden till band
colorWipe(rgbValues);
Returnerar variabeln addupintensity till 0 (dvs blå) uppgå förfall
IF(addupintensity > colorDecayRate) {
addupintensity = addupintensity - colorDecayRate;
}
Återställa den genomsnittliga sensor värde stämmer innan nästa slingan
sensorValue1 = 0;
}
}
Funktion för att skicka information till LED strip
void colorWipe (uint32_t c) {
för (uint16_t jag = 0; jag < strip.numPixels(); i ++) {
Ange färgvärdet till varje pixel
strip.setPixelColor (i, c);
Ställa in ljusstyrkan LED Strip
strip.setBrightness(outputValue);
Skicka information om färg och ljusstyrka till LED strip
Strip.show();
}
}