Difference between revisions of "Students/Ian Petrov"

From Robert-Depot
Jump to: navigation, search
Line 39: Line 39:
  
 
http://i238.photobucket.com/albums/ff152/3pod151/School%20Stuff/proposal.png
 
http://i238.photobucket.com/albums/ff152/3pod151/School%20Stuff/proposal.png
 +
 +
Code
 +
----
 +
//Ian Petrov VIS147A Final
 +
//code edited from Adafruit Wave Shield Site
 +
#include <FatReader.h>
 +
#include <SdReader.h>
 +
#include <avr/pgmspace.h>
 +
#include "WaveUtil.h"
 +
#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
 +
 +
#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();
 +
}

Revision as of 01:54, 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();

}