Ardupilot board 2.5.1 SONAR

Hello everyone, I have a small issue with the code of the SONAR sensor. When I am using the analog ports of the board, I get a signal and it outputs the correct values. However, when I try to use the digital inputs to read the PW signal, I get no readings whatsoever. Here is the code:

#include <stdio.h>
//#include <AP_ADC.h>
#define SONAR 5
#define SONARPIN 17//60
#define STATE_LEN 37

boolean loggingIsOn = false;
double state[STATE_LEN];

// Uncomment defines below to display corresponding info
//#define DISPLAY_INPUTS

void setup()
{
//Serial.begin(57600);
Serial.begin(9600);
setupServo();

// digitalWrite(LEDPIN, HIGH);
}

void loop()
{
#ifdef DISPLAY_INPUTS
// Displays input from transmitter to console
loopServo();
#endif

/************************************
Sonar PW signal test on pin SONARPIN
*************************************/
long pulse, inches, cm;

pinMode(SONARPIN, OUTPUT);
digitalWrite(SONARPIN, LOW);
delayMicroseconds(2);
digitalWrite(SONARPIN, HIGH);
delayMicroseconds(5);
digitalWrite(SONARPIN, LOW);

pinMode(SONARPIN, INPUT);

//Used to read in the pulse that is being sent by the MaxSonar device.
//Pulse Width representation with a scale factor of 147 uS per Inch.

pulse = pulseIn(SONARPIN, HIGH);
//147uS per inch
inches = pulse/147;
//change inches to centimetres
cm = inches * 2.54;

Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print(“cm”);
Serial.println();

delay(100);
//*/

PLease let me know if someone had the same issue. Thanks

I don't see why it shouldnt work. (Except all the #define etc, I dont have enough skills to understand those. Can you try with only the loop program, to see if it works alone?).

What are you pointing your sonar towards? Should be the wall or something hard, something soft doesn't work.

edit: SONARPIN 17? Try using another pin, and a pure sonar-program. It should work. The sonar does not use PWM signal btw.

I will take your advice and put everything in one loop and see if it works but I think the issue is that I am not naming the digital pins correctly. I couldn't find a proper pin mapping of the board...so I am just guessing. I will keep it posted and if I find a solution I will post it for everyone.

duvkin: I will take your advice and put everything in one loop and see if it works but I think the issue is that I am not naming the digital pins correctly. I couldn't find a proper pin mapping of the board...so I am just guessing. I will keep it posted and if I find a solution I will post it for everyone.

Does it matter what you name the digital pins?

Try this code:

const int pingPin = 7;

void setup() {
  // initialize serial communication:
  Serial.begin(9600);
}

void loop()
{
  // establish variables for duration of the ping,
  // and the distance result in inches and centimeters:
  long duration, inches, cm;

  // The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
  pinMode(pingPin, OUTPUT);
  digitalWrite(pingPin, LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(5);
  digitalWrite(pingPin, LOW);

  // The same pin is used to read the signal from the PING))): a HIGH
  // pulse whose duration is the time (in microseconds) from the sending
  // of the ping to the reception of its echo off of an object.
  pinMode(pingPin, INPUT);
  duration = pulseIn(pingPin, HIGH);

  // convert the time into a distance
  inches = microsecondsToInches(duration);
  cm = microsecondsToCentimeters(duration);

  Serial.print(inches);
  Serial.print("in, ");
  Serial.print(cm);
  Serial.print("cm");
  Serial.println();

  delay(100);
}

long microsecondsToInches(long microseconds)
{
  // According to Parallax's datasheet for the PING))), there are
  // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
  // second).  This gives the distance travelled by the ping, outbound
  // and return, so we divide by 2 to get the distance of the obstacle.
  // See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
  return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{
  // The speed of sound is 340 m/s or 29 microseconds per centimeter.
  // The ping travels out and back, so to find the distance of the
  // object we take half of the distance travelled.
  return microseconds / 29 / 2;
}

@duvkin: Please use code tags.

Read this before posting a programming question