Pages: [1]   Go Down
Author Topic: wavesheild and Servo conflict  (Read 231 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

i have a problem in compiling this code:
Code:
#include <NewPing.h>
#include <Servo.h>
#include <FatReader.h>
#include <SdReader.h>
#include <avr/pgmspace.h>
#include "WaveUtil.h"
#include "WaveHC.h"



#define TRIGGER_PIN  12  // Arduino pin tied to trigger pin on ping sensor.
#define ECHO_PIN     11  // Arduino pin tied to echo pin on ping sensor.
#define MAX_DISTANCE 500 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

Servo myservo;

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

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.


//Servo myservo1;

unsigned int pingSpeed = 500; // How frequently are we going to send out a ping (in milliseconds). 50ms would be 20 times a second.
unsigned long pingTimer;     // Holds the next ping time.


// 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)
// we will track if a button is just pressed, just released, or 'pressed' (the current state

// 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() {
   Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
  pingTimer = millis(); // Start now.
 
  myservo.attach(9);
//  myservo1.attach(3);

  byte i;
  int analogRead = (0);
 
  // 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!
 
  // pin13 LED
  pinMode(13, OUTPUT);
 
//    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!
  }
 

}

void loop() {
 
   // Notice how there's no delays in this sketch to allow you to do other processing in-line while doing distance pings.
  if (millis() >= pingTimer) {   // pingSpeed milliseconds since last ping, do another ping.
    pingTimer += pingSpeed;      // Set the next ping time.
    sonar.ping_timer(echoCheck); // Send out the ping, calls "echoCheck" function every 24uS where you can check the ping status.
  }
   if ((sonar.ping_result / US_ROUNDTRIP_CM) < 50){
    myservo.write(160);
//    myservo1.write(90);
    }
   else {
    myservo.write(0);
//    myservo1.write(0);
  }
 
 
  byte i;
  static byte playing = -1;
  int sensor0 = analogRead (buttons [0]);
  int sensor1 = analogRead (buttons [1]);
  int sensor2 = analogRead (buttons [2]);
  int sensor3 = analogRead (buttons [3]);
  int sensor4 = analogRead (buttons [4]);
  int sensor5 = analogRead (buttons [5]);
 
  Serial.print("LDR A0=");   
 Serial.print(sensor0);
  if ( analogRead (buttons [0]) > 900) {
    if (playing != 0) {
      playing = 0;
      playfile("0.WAV");
    }
   
  }
  Serial.print("LDR A1="); 
    Serial.print(sensor1);
 if ( analogRead (buttons [1]) > 900) {
    if (playing != 0) {
      playing = 0;
      playfile("1.WAV");
    }
   
  }
  Serial.print("LDR A2="); 
    Serial.print(sensor2);
   if ( analogRead (buttons [2]) > 900) {
    if (playing != 0) {
      playing = 0;
      playfile("2.WAV");
    }
   
  }
    Serial.print("LDR A3="); 
    Serial.print(sensor3);
  if ( analogRead (buttons [3]) > 150) {
    if (playing != 0) {
      playing = 0;
      playfile("3.WAV");
    }
   
  }
  Serial.print("LDR A4="); 
  Serial.print(sensor4);
   if ( analogRead (buttons [4]) > 150) {
    if (playing != 0) {
      playing = 0;
      playfile("4.WAV");
    }
   
  }
  Serial.print("LDR A5="); 
    Serial.println(sensor5);
  if ( analogRead (buttons [5]) > 150) {
    if (playing != 0) {
      playing = 0;
      playfile("5.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();
}
void echoCheck() { // Timer2 interrupt calls this function every 24uS where you can check the ping status.
  // Don't do anything here!
  if (sonar.check_timer()) { // This is how you check to see if the ping was received.
 

    Serial.print("Ping: ");
    Serial.print(sonar.ping_result / US_ROUNDTRIP_CM); // Ping returned, uS result in ping_result, convert to cm with US_ROUNDTRIP_CM.
    Serial.println("cm");
 
   
  }
  // Don't do anything here!
}

it gives me this error:

 
Code:
WaveHC/WaveHC.cpp.o: In function `__vector_11':
/Users/samershawar/Documents/Arduino/libraries/WaveHC/WaveHC.cpp:41: multiple definition of `__vector_11'
Servo/Servo.cpp.o:/Applications/Arduino.app/Contents/Resources/Java/libraries/Servo/Servo.cpp:103: first defined here

i understand that there's a conflict between the servo and the waveshield libraries ! now how can i solve this ??


Logged

Poole, Dorset, UK
Offline Offline
Edison Member
*
Karma: 51
Posts: 2270
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Try using one of the other servo lib's.

Or you could lookup how servos work and then write your own code (it really is very simple to do).

Mark
Logged

Pages: [1]   Go Up
Jump to: