Log in

View Full Version : WPILib and Ultrasonic sensors


DanielR.
16-06-2008, 18:27
Ok, I have an easy one.

I am trying to get ultrasonic sensors to work on a Vex using WPILib.

This is my code:#define _VEX_BOARD
#include "API.h"
#include "BuiltIns.h"

#define UltraOnePing 1
#define UltraOneEcho 1

int sonicValue;

void main(void){

StartUltrasonic(UltraOneEcho, UltraOnePing);
PrintToScreen("Start");
while(1==1)
{
sonicValue = GetUltrasonic(UltraOneEcho, UltraOnePing);
PrintToScreen("Ultra returns %d. \n", sonicValue);

}
}



I get nothing. I have tried also with RobotC and had success, so I know the sensor works. I cannot figure out what is wrong.

Do I need to set port direction (tried that, didn't work, maybe I did it wrong)?

Does it have something to do with DefineControllerIO()?

Is it a conspiracy? I just don't know.

EHaskins
16-06-2008, 18:39
Assuming you're using the Vex Ultrasonic sensor, then the input(echo, sensor output) and output(ping, sensor input) ports should be different.

If you're using non-vex sensors you may need to use the analog input, and bypass the wpilib functions.

DanielR.
16-06-2008, 18:51
Thank you for the response. Using vex sensors. The echo is on (interrupt port 1), and the ping is on (analog/digital port 1). Also, I have tried it with echo=1 and ping = 1 -11.

The current configuration is the one that worked in RobotC. I have not changed the sensor's wiring.

EHaskins
16-06-2008, 22:42
Thank you for the response. Using vex sensors. The echo is on (interrupt port 1), and the ping is on (analog/digital port 1). Also, I have tried it with echo=1 and ping = 1 -11.

The current configuration is the one that worked in RobotC. I have not changed the sensor's wiring.

I forgot the Vex has the interupts and the digital I/O pins seperated.

I don't see any obvious problems with the code. Hopefully someone who has more experiance with WPILib/RobotC can answer your question.

Kingofl337
18-06-2008, 08:58
By default
Ports 1-4 Are Assigned to Analog Inputs
Ports 5-10 Are Assigned Digital Inputs
Ports 11-16 Are Assigned Digital Ouputs

So you either need to re-assign that port (see documentation) or move the
pulse port to I/O Port 11 or higher.

DanielR.
18-06-2008, 15:27
By default
Ports 1-4 Are Assigned to Analog Inputs
Ports 5-10 Are Assigned Digital Inputs
Ports 11-16 Are Assigned Digital Ouputs

So you either need to re-assign that port (see documentation) or move the
pulse port to I/O Port 11 or higher.

{ The following is the post I was in the process of writing when I had an idea I felt the need to verify. }
Thanks, I guess I didn't see that in the documentation. However, I did try moving the input connection to Digital Output 11 and 16, with no change in results.

Well, not exactly . . . once when I turned the Vex back on to upload a code modification it started outputting the Ultrasonic value to the terminal. It did it really fast as well, instead of the slow crawl it does when it is not working.

I really wish I knew what was going on here.
{End post}

Umm, what ... I am now confused and mystified.

It works now. Sort of. Here is what happened...
1) changed #define UltraOnePing from '1' to '11'
2) moved 'input' from port 1 to port 11
3) uploaded code
4) nuthin'
...
5) changed #define UltraPingOne from '11' to '16'
6) moved 'input' from port 11 to port 16
7) uploaded code -->terminal popped up while uploading and Vex was outputting expected values, upload completed, no more good output.
8) Wrote response on CD...had a thought.
9)changed #define UltraPingOne back to '11'
10) left 'input' plugged into port 16
11) uploaded code
12) Now it works.

If I set the Ping port to 11 and plug the wire into port 16 it works. The echo (output) wire is still plugged in to interrupt port 1.

I have nothing more to say about that.

Kingofl337
18-06-2008, 16:44
Try this.

#define _VEX_BOARD
#include "API.h"
#include "BuiltIns.h"

#define UltraOnePing 11
#define UltraOneEcho 1

int sonicValue;

void main(void){

DefineControllerIO ( 4, 1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ) ;

StartUltrasonic(UltraOneEcho, UltraOnePing);
PrintToScreen("Start");
while(1==1)
{
sonicValue = GetUltrasonic(UltraOneEcho, UltraOnePing);
Wait(1);
PrintToScreen("Ultra returns %d. \n", sonicValue);

}
}




DefineControllerIO ( 4, 1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ) ;
4 = Number Of Analog Ports //First ports are always analog
1 = Input
0 = Output

DanielR.
18-06-2008, 17:31
Thanks again. I still am reading off of port 16 when port 11 is what is in the code. Also, it seems that is the only configuration I can find that works.

It is odd.