2

I'm building a device that uses two ultrasonic sensors to detect objects and provide audio feedback in the form of beeps that get faster the closer an object is. I have two speakers, one for each sensor, but the tone command will only do one set of beeps at a time. I tried to get around this with the Polytone Library and polytone command, but when I go to compile, I get an "exit status 1. Error compiling for board Arduino Uno" message. What am I doing wrong? Is there another way to get both sensors beeping at the same time? Please help!

I'm very new at coding. I tried to put the polytone code in a couple different ways, which I can show if that helps. There's also gyroscope code in there, but I have that working pretty well, so I guess just ignore that.

    #include <digitalWriteFast.h>
#include <Polytone.h>

#include <Wire.h> //library allows communication with I2C / TWI devices #include <math.h> //library includes mathematical functions

const int MPU=0x68; //I2C address of the MPU-6050 int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ; //16-bit integers int AcXcal,AcYcal,AcZcal,GyXcal,GyYcal,GyZcal,tcal; //calibration variables double t,tx,tf,pitch,roll;

const int anPin1 = 0; const int anPin2 = 1; int triggerPin1 = 13;

long distance1, distance2;

//Code Part 2: Level LEDS // Level LEDs int levelLED_level = 11; int levelLED_rollpos = 9; int levelLED_rollneg = 8; int levelLED_pitchpos = 12; int levelLED_pitchneg = 10; int LED_temp = 7; Polytone poly; void setup(){ Serial.begin(9600); // sets the serial port to 9600 pinMode(triggerPin1, OUTPUT);

Wire.begin(); //initiate wire library and I2C
Wire.beginTransmission(MPU); //begin transmission to I2C slave device
Wire.write(0x6B); // PWR_MGMT_1 register
Wire.write(0); // set to zero (wakes up the MPU-6050)  
Wire.endTransmission(true); //ends transmission to I2C slave device
Serial.begin(9600); //serial communication at 9600 bauds


pinMode(levelLED_rollneg, OUTPUT);
pinMode(levelLED_rollpos, OUTPUT);
pinMode(levelLED_pitchpos, OUTPUT);
pinMode(levelLED_pitchneg, OUTPUT);
pinMode(levelLED_level, OUTPUT);

}

void start_sensor(){ digitalWrite(triggerPin1,HIGH); delay(1); digitalWrite(triggerPin1,LOW); }

void read_sensors(){ /* Scale factor is (Vcc/512) per inch. A 5V supply yields ~9.8mV/in Arduino analog pin goes from 0 to 1024, so the value has to be divided by 2 to get the actual inches / distance1 = analogRead(anPin1)1.35; distance2 = analogRead(anPin2)*2.092; }

void print_all(){ Serial.print("MB1000"); Serial.print(" "); Serial.print(distance1); Serial.print("mm"); Serial.print(" "); Serial.print(" "); Serial.print("MB1260"); Serial.print(" "); Serial.print(distance2); Serial.print("mm"); Serial.println(); }

//Front sensor ranges void midiSlowFront() { poly.begin(); // Set up polling timer interrupt poly.setPins(4,5); // Connect pins 4-5 to positive terminal of speaker/piezo

poly.tone(262); delay(2000.0); poly.end(); } void midiFront() { poly.begin(); // Set up polling timer interrupt poly.setPins(4,5); // Connect pins 4-5 to positive terminal of speaker/piezo poly.tone(262); delay(500.0); poly.end(); } void midiFastFront() { poly.begin(); // Set up polling timer interrupt poly.setPins(4,5); // Connect pins 4-5 to positive terminal of speaker/piezo poly.tone(262); delay(150.0); poly.end(); }

//Side sensor ranges void midiSlowSide() { poly.begin(); // Set up polling timer interrupt poly.setPins(4,5); // Connect pins 4-5 to positive terminal of speaker/piezo poly.tone(440); delay(2000.0); poly.end(); } void midiSide() { poly.begin(); // Set up polling timer interrupt poly.setPins(4,5); // Connect pins 4-5 to positive terminal of speaker/piezo poly.tone(440); delay(500.0); poly.end(); } void midiFastSide() { poly.begin(); // Set up polling timer interrupt poly.setPins(4,5); // Connect pins 4-5 to positive terminal of speaker/piezo poly.tone(440); delay(150.0); poly.end(); }

void loop(){ Wire.beginTransmission(MPU); //begin transmission to I2C slave device Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H) Wire.endTransmission(false); //restarts transmission to I2C slave device Wire.requestFrom(MPU,14,true); //request 14 registers in total

start_sensor();
read_sensors();
print_all();

//Acceleration data correction
AcXcal = -950;
AcYcal = -300;
AcZcal = 0;

//Temperature correction
tcal = -1600;

//Gyro correction
GyXcal = 480;
GyYcal = 170;
GyZcal = 210;


//read accelerometer data
AcX=Wire.read()&lt;&lt;8|Wire.read(); // 0x3B (ACCEL_XOUT_H) 0x3C (ACCEL_XOUT_L)  
AcY=Wire.read()&lt;&lt;8|Wire.read(); // 0x3D (ACCEL_YOUT_H) 0x3E (ACCEL_YOUT_L)
AcZ=Wire.read()&lt;&lt;8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) 0x40 (ACCEL_ZOUT_L)

//read temperature data
Tmp=Wire.read()&lt;&lt;8|Wire.read(); // 0x41 (TEMP_OUT_H) 0x42 (TEMP_OUT_L)

//read gyroscope data
GyX=Wire.read()&lt;&lt;8|Wire.read(); // 0x43 (GYRO_XOUT_H) 0x44 (GYRO_XOUT_L)
GyY=Wire.read()&lt;&lt;8|Wire.read(); // 0x45 (GYRO_YOUT_H) 0x46 (GYRO_YOUT_L)
GyZ=Wire.read()&lt;&lt;8|Wire.read(); // 0x47 (GYRO_ZOUT_H) 0x48 (GYRO_ZOUT_L)

//temperature calculation
tx = Tmp + tcal;
t = tx/340 + 36.53; //equation for temperature in degrees C from datasheet
tf = (t * 9/5) + 32; //fahrenheit

//get pitch/roll
getAngle(AcX,AcY,AcZ);

//printing values to serial port
Serial.print(&quot;Angle: &quot;);
Serial.print(&quot;Pitch = &quot;); Serial.print(pitch);
Serial.print(&quot; Roll = &quot;); Serial.println(roll);

Serial.print(&quot;Temperature in celsius = &quot;); Serial.print(t);  
Serial.print(&quot; fahrenheit = &quot;); Serial.println(tf);  

if ((roll &lt; 7.00) &amp;&amp; (roll &gt; -7.00) &amp;&amp; (pitch &gt; -7.00) &amp;&amp; (pitch &lt; 7.00)){
digitalWrite(levelLED_rollpos, LOW);
digitalWrite(levelLED_rollneg, LOW);
digitalWrite(levelLED_level, HIGH);
digitalWrite(levelLED_pitchpos, LOW);
digitalWrite(levelLED_pitchneg, LOW);
}

if (roll &gt; 7.01) {
// Turn on Pos Roll LED
digitalWrite(levelLED_rollpos, HIGH);
digitalWrite(levelLED_rollneg, LOW);
digitalWrite(levelLED_level, LOW);
digitalWrite(levelLED_pitchpos, LOW);
digitalWrite(levelLED_pitchneg, LOW);
}

if (roll &lt; -7.01) {
//Turn on Neg Roll LED
digitalWrite(levelLED_rollpos, LOW);
digitalWrite(levelLED_rollneg, HIGH);
digitalWrite(levelLED_level, LOW);
digitalWrite(levelLED_pitchpos, LOW);
digitalWrite(levelLED_pitchneg, LOW);
}

if (pitch &lt; -7.01) {
//Turn on Neg Pitch
digitalWrite(levelLED_rollpos, LOW);
digitalWrite(levelLED_rollneg, LOW);
digitalWrite(levelLED_level, LOW);
digitalWrite(levelLED_pitchpos, LOW);
digitalWrite(levelLED_pitchneg, HIGH);
}

if (pitch &gt; 7.01) {
//Turn on Pos Pitch
digitalWrite(levelLED_rollpos, LOW);
digitalWrite(levelLED_rollneg, LOW);
digitalWrite(levelLED_level, LOW);
digitalWrite(levelLED_pitchpos, HIGH);
digitalWrite(levelLED_pitchneg, LOW);
}

if ((pitch &gt; 7.01) &amp;&amp; (roll &gt; 7.01)){
digitalWrite(levelLED_rollpos, HIGH);
digitalWrite(levelLED_rollneg, LOW);
digitalWrite(levelLED_level, LOW);
digitalWrite(levelLED_pitchpos, HIGH);
digitalWrite(levelLED_pitchneg, LOW);
}

if ((roll &gt; 7.01) &amp;&amp; (pitch &lt; -7.01)){
 digitalWrite(levelLED_rollpos, HIGH);
digitalWrite(levelLED_rollneg, LOW);
digitalWrite(levelLED_level, LOW);
digitalWrite(levelLED_pitchpos, LOW);
digitalWrite(levelLED_pitchneg, HIGH);
}

if ((roll &lt; -7.01) &amp;&amp; (pitch &lt; -7.01)){
 digitalWrite(levelLED_rollpos, LOW);
digitalWrite(levelLED_rollneg, HIGH);
digitalWrite(levelLED_level, LOW);
digitalWrite(levelLED_pitchpos, LOW);
digitalWrite(levelLED_pitchneg, HIGH);
}

if ((roll &lt; -7.01) &amp;&amp; (pitch &gt; 7.01)){
 digitalWrite(levelLED_rollpos, LOW);
digitalWrite(levelLED_rollneg, HIGH);
digitalWrite(levelLED_level, LOW);
digitalWrite(levelLED_pitchpos, HIGH);
digitalWrite(levelLED_pitchneg, LOW);
}

if (tf &gt; 72.00){
  digitalWrite(LED_temp, HIGH);
}

if (tf &lt; 72.00){
  digitalWrite(LED_temp, LOW);
}

if((distance1 &gt; 24)){
midiSlowFront();
}
if((distance1 &lt; 24) &amp;&amp; (distance1 &gt; 12)){
midiFront();
}
if(distance1 &lt; 12){
midiFastFront();
}
if(distance2 &gt; 24){
midiSlowSide();
}
if((distance2 &lt; 24) &amp;&amp; (distance2 &gt; 12)){
midiSide();
}
if(distance2 &lt; 12){
midiFastSide();
}

delay(150); }

//function to convert accelerometer values into pitch and roll void getAngle(int Ax,int Ay,int Az) { double x = Ax; double y = Ay; double z = Az;

pitch = atan(x/sqrt((y*y) + (z*z))); //pitch calculation
roll = atan(y/sqrt((x*x) + (z*z))); //roll calculation

//converting radians into degrees
pitch = pitch * (180.0/3.14);
roll = roll * (180.0/3.14) ;

}

EDIT: Here's the stuff before the error message, my bad!


In file included from C:\Users\Documents\Arduino\polytonetest\polytonetest.ino:1:0:

C:\Users\Documents\Arduino\libraries\arduino-polytone-master\src/digitalWriteFast.h:25:0: warning: "digitalPinToTimer" redefined

#define digitalPinToTimer(P) \

In file included from sketch\polytonetest.ino.cpp:1:0:

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:180:0: note: this is the location of the previous definition

#define digitalPinToTimer(P) ( pgm_read_byte( digital_pin_to_timer_PGM + (P) ) )

In file included from C:\Users\Documents\Arduino\libraries\arduino-polytone-master\src\Polytone.h:11:0,

             from C:\Users\Documents\Arduino\libraries\arduino-polytone-master\src\Polytone.cpp:7:

C:\Users\Documents\Arduino\libraries\arduino-polytone-master\src\digitalWriteFast.h:25:0: warning: "digitalPinToTimer" redefined

#define digitalPinToTimer(P) \

In file included from C:\Users\Documents\Arduino\libraries\arduino-polytone-master\src\Polytone.h:10:0,

             from C:\Users\Documents\Arduino\libraries\arduino-polytone-master\src\Polytone.cpp:7:

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:180:0: note: this is the location of the previous definition

#define digitalPinToTimer(P) ( pgm_read_byte( digital_pin_to_timer_PGM + (P) ) )

libraries\arduino-polytone-master\Polytone.cpp.o (symbol from plugin): In function `Polytone::begin()':

(.text+0x0): multiple definition of `t'

sketch\polytonetest.ino.cpp.o (symbol from plugin):(.text+0x0): first defined here

C:\Users\Documents\Arduino\libraries\arduino-polytone-master\src\Polytone.cpp:18:15: warning: type of 't' does not match original declaration [-Wlto-type-mismatch]

unsigned long t = 0;

           ^

C:\Users\Documents\Arduino\polytonetest\polytonetest.ino:12:8: note: type 'double' should match type 'long unsigned int'

double t,tx,tf,pitch,roll;

    ^

C:\Users\Documents\Arduino\polytonetest\polytonetest.ino:12:8: note: 't' was previously declared here

C:\Users\Documents\Arduino\polytonetest\polytonetest.ino:12:8: note: code may be misoptimized unless -fno-strict-aliasing is used

collect2.exe: error: ld returned 1 exit status

Kaytee
  • 21
  • 2

0 Answers0