Hardware components | ||||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
Software apps and online services | ||||||
![]() |
|
When we initially started this project, the idea was to create a box that had rgb LEDs, which color could have been changed with a potentiometer and turned on and off with buttons, with a buzzer to play sound with certain actions.
Due to complications with the limited number of of pins on an Arduino, and difficulty of charlieplexing, we decided to scrap the rgb LEDs and change things up a bit. We ended up deciding to get 6 normal LEDs in 3 different colors, and use a potentiometer to cycle through the lights. They can be turned on and off with three buttons, and the lights can be reset by knocking on the bottom of the box, which activates a clapper.
This is what our wiring looks like:
Just kidding :3
We started off by setting up the LEDs on practice breadboard, before moving on to the main one
Then the potentiometer was installed along with the buzzers.
The enclosure was made from cut pieces of wood that was held together with wood glue and tape.
One of the difficult parts of this project was making the buttons and LEDs fit in the enclosure properly. There was a lot of trouble soldering and attaching the wires to the breadboard so that the wires would not come undone, or that they would fit.
Another challenging aspect was understanding how to code with charlieplexing. It took way longer to work with than we would have liked, and wiring it correctly so that other components could function properly as well also proved difficult, and ultimately unsuccessful.
#include <avr/wdt.h>
void softwareReset( uint8_t prescaller) {
// start watchdog with the provided prescaller
wdt_enable( prescaller);
// wait for the prescaller time to expire
// without sending the reset signal by using
// the wdt_reset() method
while(1) {}
}
const int sampleWindow = 250; // Sample window width in mS (250 mS = 4Hz)
unsigned int clap;
const int LED_1 = 12;
const int LED_2 = 11;
const int LED_3 = 10;
int pot = A2;
int btn1 = 6;
int btn2 = 5;
int btn3 = 4;
const int buzz1 = 3;
const int buzz2 = 2;
boolean state1 = false;
boolean state2 = false;
boolean state3 = false;
boolean state4 = false;
boolean state5 = false;
boolean state6 = false;
void setup() {
pinMode(btn1, INPUT_PULLUP);
pinMode(btn2, INPUT_PULLUP);
pinMode(btn3, INPUT_PULLUP);
pinMode(pot, INPUT_PULLUP);
pinMode(buzz1, OUTPUT);
pinMode(buzz2, OUTPUT);
}
void loop() {
unsigned long start= millis(); // Start of sample window
unsigned int peakToPeak = 0; // peak-to-peak level
unsigned int signalMax = 0;
unsigned int signalMin = 1024;
int btnState1 = digitalRead(btn1);
int btnState2 = digitalRead(btn2);
int btnState3 = digitalRead(btn3);
int potValue = analogRead(pot)/3;
Serial.println(potValue);
// collect data for 250 miliseconds
while (millis() - start < sampleWindow)
{
clap = analogRead(1);
if (clap < 1024) //This is the max of the 10-bit ADC so this loop will include all readings
{
if (clap > signalMax)
{
signalMax = clap; // save just the max levels
}
else if (clap < signalMin)
{
signalMin = clap; // save just the min levels
}
}
}
peakToPeak = signalMax - signalMin; // max - min = peak-peak amplitude
double volts = (peakToPeak * 3.3) / 1024; // convert to volts
Serial.println(volts);
if (volts >=.20){
softwareReset( WDTO_60MS);
}
if(state1 == true){
//turn on LED L1
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, HIGH);
pinMode(LED_3, INPUT); //row 3
digitalWrite(LED_3, LOW);
}
if (state2 == true){
//turn on LED L2
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, HIGH);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, INPUT); //row 3
digitalWrite(LED_3, LOW);
}
if(state3 == true){
//turn on LED L3
pinMode(LED_1, INPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT); //row 3
digitalWrite(LED_3, HIGH);
}
if(state4 == true){
//turn on LED L4
pinMode(LED_1, INPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, HIGH);
pinMode(LED_3, OUTPUT); //row 3
digitalWrite(LED_3, LOW);
}
if(state5 == true){
//turn on LED L5
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, INPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT); //row3
digitalWrite(LED_3, HIGH);
}
if(state6== true){
//turn on LED L6
pinMode(LED_1, OUTPUT);
digitalWrite(LED_1, HIGH);
pinMode(LED_2, INPUT);
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT);
digitalWrite(LED_3, LOW);
}
//state1 ONE
if (potValue > 0 && potValue < 42)
{
delay(100);
if(state1 == false){
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, HIGH);
pinMode(LED_3, INPUT); //row 3
digitalWrite(LED_3, LOW);
delay(500);
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, INPUT); //row 3
digitalWrite(LED_3, LOW);
}
if(state1 == true ){
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, INPUT); //row 3
digitalWrite(LED_3, LOW);
delay(500);
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, HIGH);
pinMode(LED_3, INPUT); //row 3
digitalWrite(LED_3, LOW);
}
if (state1 == false){
if (btnState1 == HIGH){
tone(buzz1, 1000);
tone(buzz2, 1000);
delay(20);
noTone(buzz1);
noTone(buzz2);
state1 = true;
}
}
if (state1 == true){
if (btnState1 == HIGH){
tone(buzz1, 1000);
tone(buzz2, 1000);
delay(20);
noTone(buzz1);
noTone(buzz2);
state1 = true;
}
}
/* if(state1 == true){
//turn on LED L1
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, HIGH);
pinMode(LED_3, INPUT); //row 3
digitalWrite(LED_3, LOW);
}
if(state1 == false){
//turn off LED L1
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, INPUT); //row 3
digitalWrite(LED_3, LOW);
}*/
}
//led2 TWO
if (potValue > 42 && potValue < 84)
{
delay(100);
if(state2 == false){
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, HIGH);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, INPUT); //row 3
digitalWrite(LED_3, LOW);
delay(500);
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, INPUT); //row 3
digitalWrite(LED_3, LOW);
}
if(state2 == true){
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, INPUT); //row 3
digitalWrite(LED_3, LOW);
delay(500);
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, HIGH);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, INPUT); //row 3
digitalWrite(LED_3, LOW);
}
if (state2 == false){
if (btnState1 == HIGH){
tone(buzz1, 1000);
tone(buzz2, 1000);
delay(20);
noTone(buzz1);
noTone(buzz2);
state2 = true;
}
}
if (state2 == true){
if (btnState1 == HIGH){
tone(buzz1, 1000);
tone(buzz2, 1000);
delay(20);
noTone(buzz1);
noTone(buzz2);
state1 = true;
}
}
/*if (state2 == true){
//turn on LED L2
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, HIGH);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, INPUT); //row 3
digitalWrite(LED_3, LOW);
}
if (state2 == false){
//turn off LED L2
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, INPUT); //row 3
digitalWrite(LED_3, LOW);
}*/
}
//led3 THREE
if (potValue > 84 && potValue < 126){
delay(100);
if (state3 == false){
pinMode(LED_1, INPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT); //row 3
digitalWrite(LED_3, HIGH);
delay(500);
pinMode(LED_1, INPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT); //row 3
digitalWrite(LED_3, LOW);
}
if (state3 == true){
pinMode(LED_1, INPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT); //row 3
digitalWrite(LED_3, LOW);
delay(500);
pinMode(LED_1, INPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT); //row 3
digitalWrite(LED_3, HIGH);
}
if (state3 == false){
if (btnState2 == HIGH){
tone(buzz1, 1000);
tone(buzz2, 1000);
delay(20);
noTone(buzz1);
noTone(buzz2);
state3 = true;
}
}
if (state3 == true){
if (btnState2 == HIGH){
tone(buzz1, 1000);
tone(buzz2, 1000);
delay(20);
noTone(buzz1);
noTone(buzz2);
state3 = true;
}
}
/*if(state3 == true){
//turn on LED L3
pinMode(LED_1, INPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT); //row 3
digitalWrite(LED_3, HIGH);
}
if(state3 == false){
//turn on LED L3
pinMode(LED_1, INPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT); //row 3
digitalWrite(LED_3, LOW);
}*/
}
//led4 FOUR
if (potValue > 126 && potValue < 168){
delay(100);
if(state4 == false){
pinMode(LED_1, INPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, HIGH);
pinMode(LED_3, OUTPUT); //row 3
digitalWrite(LED_3, LOW);
delay(500);
pinMode(LED_1, INPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT); //row 3
digitalWrite(LED_3, LOW);
}
if(state4 == true){
pinMode(LED_1, INPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT); //row 3
digitalWrite(LED_3, LOW);
delay(500);
pinMode(LED_1, INPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, HIGH);
pinMode(LED_3, OUTPUT); //row 3
digitalWrite(LED_3, LOW);
}
if (state4 == false){
if (btnState2 == HIGH){
tone(buzz1, 1000);
tone(buzz2, 1000);
delay(20);
noTone(buzz1);
noTone(buzz2);
state4 = true;
}
}
if (state4 == true){
if (btnState2 == HIGH){
state4 = true;
tone(buzz1, 1000);
tone(buzz2, 1000);
delay(20);
noTone(buzz1);
noTone(buzz2);
state4 = true;
}
}
/*if(state4 == true){
//turn on LED L4
pinMode(LED_1, INPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, HIGH);
pinMode(LED_3, OUTPUT); //row 3
digitalWrite(LED_3, LOW);
}
if(state4 == false){
//turn on LED L4
pinMode(LED_1, INPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT); //row 3
digitalWrite(LED_3, LOW);
}*/
}
//led5 FIVE
if (potValue > 168 && potValue < 210){
delay(100);
if (state5 == false){
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, INPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT); //row3
digitalWrite(LED_3, HIGH);
delay(500);
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, INPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT); //row3
digitalWrite(LED_3, LOW);
}
if (state5 == true){
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, INPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT); //row3
digitalWrite(LED_3, LOW);
delay(500);
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, INPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT); //row3
digitalWrite(LED_3, HIGH);
}
if (state5 == false){
if (btnState3 == HIGH){
tone(buzz1, 1000);
tone(buzz2, 1000);
delay(20);
noTone(buzz1);
noTone(buzz2);
state5 = true;
}
}
if (state5 == true){
if (btnState3 == HIGH){
tone(buzz1, 1000);
tone(buzz2, 1000);
delay(20);
noTone(buzz1);
noTone(buzz2);
state5 = true;
}
}
/*if(state5 == true){
//turn on LED L5
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, INPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT); //row3
digitalWrite(LED_3, HIGH);
}
if(state5 == false){
//turn off LED L5
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, INPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT); //row3
digitalWrite(LED_3, LOW);
}*/
}
//led6 SIX
if (potValue > 210 && potValue < 252){
delay(100);
if(state6 == false){
pinMode(LED_1, OUTPUT);
digitalWrite(LED_1, HIGH);
pinMode(LED_2, INPUT);
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT);
digitalWrite(LED_3, LOW);
delay(500);
pinMode(LED_1, OUTPUT);
digitalWrite(LED_1, LOW);
pinMode(LED_2, INPUT);
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT);
digitalWrite(LED_3, LOW);
}
if(state6 == true){
pinMode(LED_1, OUTPUT);
digitalWrite(LED_1, LOW);
pinMode(LED_2, INPUT);
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT);
digitalWrite(LED_3, LOW);
delay(500);
pinMode(LED_1, OUTPUT);
digitalWrite(LED_1, HIGH);
pinMode(LED_2, INPUT);
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT);
digitalWrite(LED_3, LOW);
}
if (state6 == false){
if (btnState3 == HIGH){
state6 = true;
tone(buzz1, 1000);
tone(buzz2, 1000);
delay(20);
noTone(buzz1);
noTone(buzz2);
state6 = true;
}
}
if (state6 == true){
if (btnState3 == HIGH){
state6 = true;
tone(buzz1, 1000);
tone(buzz2, 1000);
delay(20);
noTone(buzz1);
noTone(buzz2);
state6 = true;
}
}
/*if(state6== true){
//turn on LED L6
pinMode(LED_1, OUTPUT);
digitalWrite(LED_1, HIGH);
pinMode(LED_2, INPUT);
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT);
digitalWrite(LED_3, LOW);
}
if(state6== false){
//turn off LED L6
pinMode(LED_1, OUTPUT);
digitalWrite(LED_1, LOW);
pinMode(LED_2, INPUT);
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT);
digitalWrite(LED_3, LOW);
}*/
}
}
Comments
Please log in or sign up to comment.