Difference between revisions of "Students/Ian Petrov"

From Robert-Depot
Jump to: navigation, search
Line 42: Line 42:
 
Code
 
Code
 
----
 
----
<nowiki>//Ian Petrov VIS147A Final
+
//Ian Petrov VIS147A Final
 
//code edited from Adafruit Wave Shield Site
 
//code edited from Adafruit Wave Shield Site
 
#include <FatReader.h>
 
#include <FatReader.h>
Line 231: Line 231:
 
   wave.play();
 
   wave.play();
 
}
 
}
</nowiki>
 

Revision as of 02:05, 20 March 2010

I am a Visual Arts - Media major with an interest in graphic design. I was born in Europe, and moved to Canada when I was 5. I've lived in San Diego since I was 10, and graduated from University City High School before coming to UCSD as a transfer. I have been working with computers since grade school, and am highly interested in pursuing a career in the computer field. I have been in interested in electronics also since a young age and I think it will add an interesting dimension to my artistic career, and am eagerly looking forward to learning how to make art projects using them.


DSC_0055-1.jpg

Portable Heater


DSC_0051.jpg

Generator?


DSC_0050.jpg

Air Conditioner


DSC_0049.jpg

Cell Phone


DSC_0046.jpg

Car Keys


Midterm Proposal

My proposal is a hat which contains a cooling fan enabled by a switch. The switch will hang down from the inside of the hat to about shoulder length, enabling the wearer to turn on and off the fan. This is a crude implementation of a warm weather cowboy hat which provides cooling apart from shade. It will be powered by a 9v battery, and connected by a normally open switch. In order to operate the fan, you must hold down the button.


MidDiag.jpg


Final Proposal

My final project will be called "Punch a Celebrity". It will consist of a punching pad with a picture of a celebrity on it. The pad will have an impact sensor attached to a arduino/breakout board, which is attached to a speaker. This will enable a wav or mp3 file to play at the moment of impact, and simulate that you are actually hitting a celebrity.

proposal.png

Code


//Ian Petrov VIS147A Final //code edited from Adafruit Wave Shield Site

  1. include <FatReader.h>
  2. include <SdReader.h>
  3. include <avr/pgmspace.h>
  4. include "WaveUtil.h"
  5. include "WaveHC.h"


SdReader card; // This object holds the information for the card FatVolume vol; // This holds the information for the partition on the card FatReader root; // This holds the information for the filesystem on the card FatReader f; // This holds the information for the file we're play

WaveHC wave; // This is the only wave (audio) object, since we will only play one at a time

  1. define DEBOUNCE 100 // button debouncer

// this handy function will return the number of bytes currently free in RAM, great for debugging! int freeRam(void) {

 extern int  __bss_end; 
 extern int  *__brkval; 
 int free_memory; 
 if((int)__brkval == 0) {
   free_memory = ((int)&free_memory) - ((int)&__bss_end); 
 }
 else {
   free_memory = ((int)&free_memory) - ((int)__brkval); 
 }
 return free_memory; 

}

void sdErrorCheck(void) {

 if (!card.errorCode()) return;
 putstring("\n\rSD I/O error: ");
 Serial.print(card.errorCode(), HEX);
 putstring(", ");
 Serial.println(card.errorData(), HEX);
 while(1);

}

void setup() {

 // set up serial port
 Serial.begin(9600);
 putstring_nl("WaveHC with 6 buttons");
 
  putstring("Free RAM: ");       // This can help with debugging, running out of RAM is bad
 Serial.println(freeRam());      // if this is under 150 bytes it may spell trouble!
 
 // Set the output pins for the DAC control. This pins are defined in the library
 pinMode(2, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(4, OUTPUT);
 pinMode(5, OUTPUT);

 // pin13 LED
 pinMode(13, OUTPUT);

 // enable pull-up resistors on switch pins (analog inputs)
 digitalWrite(14, HIGH);
 digitalWrite(15, HIGH);
 digitalWrite(16, HIGH);
 digitalWrite(17, HIGH);
 digitalWrite(18, HIGH);
 digitalWrite(19, HIGH);

 //  if (!card.init(true)) { //play with 4 MHz spi if 8MHz isn't working for you
 if (!card.init()) {         //play with 8 MHz spi (default faster!)  
   putstring_nl("Card init. failed!");  // Something went wrong, lets print out why
   sdErrorCheck();
   while(1);                            // then 'halt' - do nothing!
 }
 
 // enable optimize read - some cards may timeout. Disable if you're having problems
 card.partialBlockRead(true);

// Now we will look for a FAT partition!

 uint8_t part;
 for (part = 0; part < 5; part++) {     // we have up to 5 slots to look in
   if (vol.init(card, part)) 
     break;                             // we found one, lets bail
 }
 if (part == 5) {                       // if we ended up not finding one  :(
   putstring_nl("No valid FAT partition!");
   sdErrorCheck();      // Something went wrong, lets print out why
   while(1);                            // then 'halt' - do nothing!
 }
 
 // Lets tell the user about what we found
 putstring("Using partition ");
 Serial.print(part, DEC);
 putstring(", type is FAT");
 Serial.println(vol.fatType(),DEC);     // FAT16 or FAT32?
 
 // Try to open the root directory
 if (!root.openRoot(vol)) {
   putstring_nl("Can't open root dir!"); // Something went wrong,
   while(1);                             // then 'halt' - do nothing!
 }
 
 // Whew! We got past the tough parts.
 putstring_nl("Ready!");

}

void playcomplete(char good) {

 // call our helper to find and play this name
 playfile("GOOD.WAV");
 while (wave.isplaying) {
 // do nothing while its playing
 }
 // now its done playing

}


void loop() {

 //putstring(".");            // uncomment this to see if the loop isnt running  
   
 switch (check_switches()) {     //this is the loop which cycles the arnold sounds based
   case 1:                       //on which switch you connect to.
     playcomplete("STOP.WAV");
     break;
   case 2:
     playcomplete("SOB.WAV");
     break;
   case 3:
     playcomplete("DONT.WAV");
     break;
   case 4:
     playcomplete("LACK.WAV");
     break;
   case 5:
     playcomplete("FIST.WAV");
 }

}

byte check_switches() {

 static byte previous[6];
 static long time[6];
 byte reading;
 byte pressed;
 byte index;
 pressed = 0;
 for (byte index = 0; index < 6; ++index) {
   reading = digitalRead(14 + index);
   if (reading == LOW && previous[index] == HIGH && millis() - time[index] > DEBOUNCE)
   {
     // switch pressed
     time[index] = millis();
     pressed = index + 1;
     break;
   }
   previous[index] = reading;
 }
 // return switch number (1 - 6)
 return (pressed);

}


// Plays a full file from beginning to end with no pause. void playcomplete(char *name) {

 // call our helper to find and play this name
 playfile(name);
 while (wave.isplaying) {
 // do nothing while its playing
 }
 // now its done playing

}

void playfile(char *name) {

 // see if the wave object is currently doing something
 if (wave.isplaying) {// already playing something, so stop it!
   wave.stop(); // stop it
 }
 // look in the root directory and open the file
 if (!f.open(root, name)) {
   putstring("Couldn't open file "); Serial.print(name); return;
 }
 // OK read the file and turn it into a wave object
 if (!wave.create(f)) {
   putstring_nl("Not a valid WAV"); return;
 }
 
 // ok time to play! start playback
 wave.play();

}