Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   Programming (http://www.chiefdelphi.com/forums/forumdisplay.php?f=51)
-   -   WPILib and Ultrasonic sensors (http://www.chiefdelphi.com/forums/showthread.php?t=68094)

DanielR. 16-06-2008 18:27

WPILib and Ultrasonic sensors
 
Ok, I have an easy one.

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

This is my code:
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

Re: WPILib and Ultrasonic sensors
 
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

Re: WPILib and Ultrasonic sensors
 
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

Re: WPILib and Ultrasonic sensors
 
Quote:

Originally Posted by DanielR. (Post 752982)
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

Re: WPILib and Ultrasonic sensors
 
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

Re: WPILib and Ultrasonic sensors
 
Quote:

Originally Posted by Kingofl337 (Post 753285)
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

Re: WPILib and Ultrasonic sensors
 
Try this.
Code:

#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

Re: WPILib and Ultrasonic sensors
 
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.


All times are GMT -5. The time now is 21:46.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi