For this tutorial, you’ll need:
Watch this full video:
Smart Christmas Tree Example Code:
const int sampleWindow = 50; // Sample window width in mS (50 mS = 20Hz)
unsigned int sample;
int color_levels[]= {0, 50, 100, 150, 200, 250}; // length = 5
#define red 9
#define green 10
#define blue 11
double volts1=0;
int rCL =0; //random red color level
int gCL =0; //random red color level
int bCL =0; //random red color level
void setup()
{
Serial.begin(9600);
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
digitalWrite(red, LOW);
digitalWrite(green, LOW);
digitalWrite(blue, LOW);
}
void loop()
{
unsigned long startMillis= millis(); // Start of sample window
unsigned int peakToPeak = 0; // peak-to-peak level
unsigned int signalMax = 0;
unsigned int signalMin = 1024;
// collect data for 50 mS
while (millis() - startMillis < sampleWindow)
{
sample = analogRead(A0);
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
double volts = (peakToPeak * 5.0) / 1024; // convert to volts
Serial.println(volts);
if (volts<0.4)
{
digitalWrite(red, 0);
digitalWrite(green, 0);
digitalWrite(blue, 0);
}
else
{
double a = volts1 +0.1;
double b = volts1 -0.1;
if((volts>a) || (volts<b))
{
rCL = random(0,6);
gCL = random(0,6);
bCL = random(0,6);
digitalWrite(red, color_levels[rCL]);
digitalWrite(green, color_levels[gCL]);
digitalWrite(blue, color_levels[bCL]);
}
}
delay(100);
volts1 = volts;
}