Hello, I am trying to use an Ulrasonic range finder, SRF01, with SoftwareSerial, but I cannot seem to get it to work. Here is the product, SRF01 Ultrasonic range finder
I get this error when I try to upload this code to my Arduino 2560.
c:/users/MYNAME/desktop/stuff/arduino-1.0.1/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr6/crtm2560.o: In function `__vector_default':
(.vectors+0xcc): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_51' defined in .text.__vector_51 section in core.a(HardwareSerial.cpp.o)
I am running Windows 7 (64 bit) and here is my code. From this page Arduino Forum
// Code modified and developed by Will Myers and Justin Miller
#include <SoftwareSerial.h>
#define txrxPin 10 // Defines Pin 10 to be used as both rx and tx for the SRF01
#define srfAddress 0x01 // Address of the SFR01
#define getSoft 0x5D // Byte to tell SRF01 we wish to read software version
#define getRange 0x53 // Byte used to get range from SRF01 in inches
#define getStatus 0x5F // Byte used to get the status of the transducer
SoftwareSerial UltrasonicBus(txrxPin, txrxPin); // Sets up the SoftwareSerial with Digital Pin 10 and sets the name to "UltrasonicBus"
void setup(){
Serial.begin(19200);
UltrasonicBus.begin(9600);
delay(200); // Waits some time to make sure that SRF01 is powered up
Serial.println("SRF01 Test");
SRF01_Cmd(srfAddress, getSoft); // Calls a function to get the SRF01 software version
while (UltrasonicBus.available() < 1); // Waits to get good data
int softVer = UltrasonicBus.read(); // Read software version from SRF01
Serial.print("V:");
Serial.println(softVer); // Prints the software version to LCD03
delay(200);
Serial.println("Initialization Complete"); // After inititalization is complete you should see the correct version of your device printed to the serial monitor
}
void loop(){
int max = 1; // Setup so that you can averaqe readings
int sum = 0; // Currently I am not taking an average.. Max = 1
for (int count = 0; count < max; count++) {
sum = sum + doRange(); // Calls a function to get range from SRF01 and sums the ranges up so that you can take an avg
}
int range = sum / max;
Serial.print("Range avg = ");
Serial.print(range); // Print range result to the screen
Serial.println(" "); // Print some spaces to the screen to make sure space direcly after the result is clear
checkLock(); // Calls a function to check if the transducer is locked or unlocked
}
void SRF01_Cmd(byte Address, byte cmd){ // Function to send commands to the SRF01
pinMode(txrxPin, OUTPUT); // Set pin to output and send break by sending pin low, waiting 2ms and sending it high again for 1
digitalWrite(txrxPin, LOW);
delay(2);
digitalWrite(txrxPin, HIGH);
delay(1);
UltrasonicBus.write(Address); // Send the address of the SRF01
UltrasonicBus.write(cmd); // Send commnd byte to SRF01
pinMode(txrxPin, INPUT); // Make input ready for Rx
int availableJunk = UltrasonicBus.available(); // Filter out the junk data
for(int x = 0; x < availableJunk; x++){
byte junk = UltrasonicBus.read();
}
}
void checkLock() {
SRF01_Cmd(srfAddress, getStatus); // Call to a function that checks if the trancducer is locked or unlocked
byte statusByte = UltrasonicBus.read(); // Reads the SRF01 status, The least significant bit tells us if it is locked or unlocked
int status = statusByte & 0x01; // Get status of lease significan bit
if(status == 0)
{
Serial.println("Unlocked"); // Prints the word unlocked followd by a couple of spaces to make sure space after has nothing in
}
else
{
Serial.println("Locked "); // Prints the word locked followd by a couple of spaces to make sure that the space after has nothing in
}
}
int doRange() {
SRF01_Cmd(srfAddress, getRange); // Calls a function to get range from SRF01
while (UltrasonicBus.available() < 2); // Waits to get good data
byte highByte = UltrasonicBus.read(); // Get high byte
byte lowByte = UltrasonicBus.read(); // Get low byte
int dist = ((highByte<<8)+lowByte); // Put them together
return dist;
}
All it says is error compiling, I have checked for syntax, or undefined variables, and I have all the required code. All my other sketches upload fine.
Any help is GREATLY appreciated! Thanks