Show Posts
Pages: 1 ... 60 61 [62] 63 64 ... 86
916  Using Arduino / Programming Questions / Re: Replace Buttons with LDR's on: December 20, 2012, 03:17:38 pm
Can't test this as I have not got your libraries, but this the changes are implemented:

Code:
#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 5  // button debouncer

// here is where we define the buttons that we'll use. button "1" is the first, button "6" is the 6th, etc
/// --- byte buttons[] = {14, 15, 16, 17, 18, 19};
byte buttons[] = {A0, A1, A2, A3, A4, A5};

// This handy macro lets us determine how big the array up above is, by checking the size
#define NUMBUTTONS sizeof(buttons)/sizeof(buttons[0])
#define ON_THRESHOLD 512  // change to suit values retruned from LDR. Values greater will be ON

// we will track if a button is just pressed, just released, or 'pressed' (the current state
volatile byte pressed[NUMBUTTONS], justpressed[NUMBUTTONS], justreleased[NUMBUTTONS];

// 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() {
 byte i;

 // set up serial port
 Serial.begin(9600);
 putstring_nl("WaveHC with ");
 Serial.print(NUMBUTTONS, DEC);
 putstring_nl("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);

 // Make input & enable pull-up resistors on switch pins
 for (i=0; i< NUMBUTTONS; i++) {
   pinMode(buttons, INPUT);
   digitalWrite(buttons, 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  smiley-sad
   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!");

 TCCR2A = 0;
 TCCR2B = 1<<CS22 | 1<<CS21 | 1<<CS20;

 //Timer2 Overflow Interrupt Enable
 TIMSK2 |= 1<<TOIE2;


}

SIGNAL(TIMER2_OVF_vect) {
 check_switches();
}

void check_switches()
{
 static byte previousstate[NUMBUTTONS];
 static byte currentstate[NUMBUTTONS];
 byte index;

 for (index = 0; index < NUMBUTTONS; index++) {
   currentstate[index] = analogRead(buttons[index]) >= ON_THRESHOLD;   // read the LDR 'button'

   /*     
   Serial.print(index, DEC);
   Serial.print(": cstate=");
   Serial.print(currentstate[index], DEC);
   Serial.print(", pstate=");
   Serial.print(previousstate[index], DEC);
   Serial.print(", press=");
   */

   if (currentstate[index] == previousstate[index]) {
     if ((pressed[index] == LOW) && (currentstate[index] == LOW)) {
         // just pressed
         justpressed[index] = 1;
     }
     else if ((pressed[index] == HIGH) && (currentstate[index] == HIGH)) {
         // just released
         justreleased[index] = 1;
     }
     pressed[index] = !currentstate[index];  // remember, digital HIGH means NOT pressed
   }
   //Serial.println(pressed[index], DEC);
   previousstate[index] = currentstate[index];   // keep a running tally of the buttons
 }
}


void loop() {
 byte i;
 static byte playing = -1;

 if (pressed[0]) {
   if (playing != 0) {
     playing = 0;
     playfile("DO.WAV");
   }
 }
 else if (pressed[1]) {
   if (playing != 1) {
     playing = 1;
     playfile("RE.WAV");
   }
 }
 else if (pressed[2]) {
   if (playing != 2) {
     playing = 2;
     playfile("MI.WAV");
   }
 }
 else if (pressed[3]) {
   if (playing != 3) {
     playing = 3;
     playfile("FA.WAV");
   }
 }
 else if (pressed[4]) {
   if (playing != 4) {
     playing = 4;
     playfile("SO.WAV");
   }
 }
 else if (pressed[5]) {
   if (playing != 5) {
     playing = 5;
     playfile("LA.WAV");
   }
 }

 if (! wave.isplaying) {
   playing = -1;
 }
}



// 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();
}

917  Using Arduino / Programming Questions / Re: Run Void *** when button is pressed on: December 17, 2012, 08:17:43 am
You need to show more of your code as how the pattern() and pong() function behave could be an issue.

Either you are spending all your time in one function (ie, the code to detect the change is hardly ever run) or, if you do come back to loop() the code to run pattern() is hardly ever run as the edge detection is too fleeting compared to running pong() as a default case.

Is it that it is not switching or that you never come back to the point in loop() where it can switch?
918  Using Arduino / Sensors / Re: 4 pin sound sensor on: December 16, 2012, 06:10:53 am
I meant what is the chip on you sensor board. Looks like there is something there in the photo behind the pot.
919  Using Arduino / Sensors / Re: 4 pin sound sensor on: December 16, 2012, 04:43:59 am
Some of this new information contradicts what you said before:
Quote
And I always has almost the same value (~155).
and
Quote
When I try digital output I always has LOW value

You are clearly getting a value of 90. Is that done by setting the pot of because the sound level changes? There is not much that can go wrong with this device, so if it still does not work it may be the IC on the board. What type is it?
920  Using Arduino / Programming Questions / Re: Newby question: falling edge of input switch on: December 15, 2012, 11:14:57 pm
The falling edge is just noticing that the input was 1 and then goes to zero.  You will need to set up a variable that remembers the current state each time through loop() and then acts when it sees the correct transition.

The blink without delay example will help you understand how to set up code to wait for a specified period without calling the delay function.
921  Using Arduino / Sensors / Re: 4 pin sound sensor on: December 15, 2012, 06:18:06 pm
There is not much to program and what you have seems like it would work.

Does the power LED light up when you connect Vcc? Does the sensor LED light up at all when you have a loud noise? As far as I know the AO should provide a voltage level that fluctuates with the sound level and the DO goes to HIGH briefly when the sound exceeds a certain threshold (set by the pot?).
922  Using Arduino / LEDs and Multiplexing / Re: I'm probably not ready for this matrix post, but you only live once... on: December 13, 2012, 01:46:43 am
The void means that the function does not return any value. If it returned an integer then the void would be replaced by int. It is part of the definition of functions in C++. If you intend to program it is worth looking at some of the online tutorials for hoe to use this programming language.
923  Using Arduino / Audio / Re: bike wheel controlling midi clock on: December 11, 2012, 05:28:10 am
I think an Arduino Uno would be sufficient.
924  Using Arduino / Audio / Re: bike wheel controlling midi clock on: December 08, 2012, 03:39:11 am
For any sensor, especially if it is a switch, you need to make sure that when the sensor is not 'on' that it is actually 'off' and not a floating input. This means that you will need to implement a pull down resistor as part of your circuit when the switch is not connected. Conversely, if you are planning a normally on switch, the logic is reversed and you need a pull up resistor as the switch will switch to zero volts.

For a mechanical switch you will also need to take care of switch bounce.

For both of these there are plenty of references in the forum and online.
925  Using Arduino / Audio / Re: bike wheel controlling midi clock on: December 07, 2012, 08:16:51 am
Yes you can.

You will need to mount some sort of sensor on the bike wheel to detect the rotation and then you can use the MIDI library in the playground to send a message through the MIDI ports.

You will need to create a serial interface that is compatible with the MIDI standards (easy). Just look in the Sound forum for info on this.
926  Using Arduino / General Electronics / Re: Hardware debouncing on: December 07, 2012, 08:13:39 am
This was where I learnt the most about debouncing: http://www.ganssle.com/debouncing.htm
927  Using Arduino / Programming Questions / Re: Blink without delay, extended to more complex switch patterns on: December 05, 2012, 02:13:13 am
My Multiblink example in the Playground uses a finite state machine and arrays of structures to keep track of multiple blink rates and timers. Not beginners code, but I am happy to help if you need it.
928  Using Arduino / Programming Questions / Re: Calculating the difference in a set of variables in percent on: December 04, 2012, 05:45:47 am
I think so. Try it.
929  Using Arduino / Programming Questions / Re: Calculating the difference in a set of variables in percent on: December 04, 2012, 05:26:39 am
If you use integer Mathis you end up with zero.int is ok for the counters, but you need to have floats for the calculated vars.
930  Using Arduino / Programming Questions / Re: For loops?? on: December 03, 2012, 04:29:53 am
You are changing the 'Board' to be the 85, right? You cannot just load Uno or other code into the 85 without selecting the right libraries.

In principle there is nothing in the code that assumes a specific processor and no direct to hardware code or oher tricks are used. What can change is the speed of the processor (MHz) and how the libraries are constructed for the new device.

When I compile my version for the Uno I get
Quote
Binary sketch size: 1,436 bytes (of a 32,256 byte maximum)

If I select the 85 my IDE will not even comple the code, and I see from the datasheet that it only has 512bytes of SRAM, so the code may not even fit if it could get it to compile.
Pages: 1 ... 60 61 [62] 63 64 ... 86