|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
|
|
Thread Tools | Rate Thread | Display Modes |
|
|
|
#1
|
|||
|
|||
|
Re: Control a vex with a laptop?
Thanks. I loaded the latest firmware and the controller is working now, at least with the default code. Unfortunately, I wasn't able to control the PWMs using Kevin's code. I've read on the forum somewhere that components of Kevin's FRC code can be dropped into the regular Vex code easily enough, so I'll try that next.
Unrelated, I'm having trouble using mplab 8.10 with the 2.40 compiler... I guess I'll start another thread to fix that issue. Looks like another long night of delicious code. ![]() |
|
#2
|
|||
|
|||
|
Re: Control a vex with a laptop?
I tried using Kevin's serial_ports.c/h with the default Vex code and I got it to compile and run, but whenever I call Read_Serial_Port_One(), the bot stops working, the "PGRM STATUS" LED flashes red, and the serial port doesn't work at all.
So right now it looks like I get to choose between either being able to move the bot by using the default Vex code, or being able to communicate with it by using Kevin's FRC code. I haven't gotten moving and communication working at the same time yet. Oh, and btw, when running Kevin's FRC code, the program LED is always flashing red, but at least the serial port works. Maybe that will help to diagnose the problem. |
|
#3
|
||||
|
||||
|
Re: Control a vex with a laptop?
Quote:
Now as for adding his serial port drivers, yes it is possible. In fact, I highly recommend it. I currently have his: Interrupt, ADC, Gyro, IR receiver and serial port code added into the default 2007 FVC code. It is not that difficult to do and it really adds some great functionality. For one, I can now get real-time telemetry from the Vex via Serial port 2 and my BlueSMiRF from Sparkfun. I also have an adapter that allows the same from Serial port 1, but it is not as convenient to use. I do not believe Kevin's PWM code will work with Vex without some major modifications. Vex only has 8 PWMs while FRC has 16. Kevin's code is written to work with PWM's 13-16 and use the CCP hardware to generate the PWM signals, bypassing the need to use interrupts. |
|
#4
|
|||
|
|||
|
Re: Control a vex with a laptop?
Okay, I was working on my idea of controlling the robot over SSH with kermit and I hacked up a Perl script that can control the PWMs with my joystick. Disclaimer: this code is a dirty hack. First of all, I wrote it. Secondly, using Expect to control a robot through a makeshift Perl script is probably not the most ideal solution.
Code:
#!/usr/bin/perl
# Copyright 2008 Jonathan Glines
# auntieNeo@gmail.com
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
use Expect;
use Linux::Input::Joystick;
my $login = "myLogin";
my $password = "myPassword";
my $address = "192.168.1.106"; # the address of my laptop connected to the Vex via serial
# connect via ssh
my $exp = Expect->spawn("ssh -l $login $address");
my $patidx = $exp->expect(20, 'password:');
if($patidx == 1)
{
$exp->send("$password\n"); # ssh password
}
# open the serial interface with kermit
$patidx = $exp->expect(10, '~$ '); # '~$ ' is the prompt my laptop happens to give
if($patidx == 1)
{
$exp->send("sudo kermit ~/code/scripts/vex\n"); # ~/code/scripts/vex is a simple kermit script that sets the serial connection settings
}
# enter the sudo password
$patidx = $exp->expect(5, "password for $login:");
if($patidx == 1)
{
$exp->send("$password\n"); # sudo password
}
sleep(2);
$exp->send("\r"); # send the vex a return so that we get a prompt
my $js = Linux::Input::Joystick->new('/dev/input/js0');
my $jsConstant = 0.003875; # constant that reduces Linux joystick values (32767 through -32767) to Vex joystick values (127 through -127)
while(true)
{
my @event = $js->poll(0.01);
foreach(@event)
{
my %test = %{ $_ };
if($test{'type'} == 2) # if it's a joystick axis event
{
if($test{'number'} == 1) # if the axis in question is y of the left stick (on my PSX controller)
{
$patidx = $exp->expect(5, '>'); # wait for a prompt from the Vex
if($patidx == 1)
{
$exp->send('p01' . round(($test{'value'} * $jsConstant) + 127) . "\r"); # set pwm01 to the left joystick
}
}
elsif($test{'number'} == 2) # if the axis in question is y of the right stick (on my PSX controller)
{
$patidx = $exp->expect(2, '>'); # wait for a prompt from the Vex
if($patidx == 1)
{
$exp->send('p02' . round(($test{'value'} * $jsConstant) + 127) . "\r"); # set pwm02 to the right joystick
}
}
}
}
}
$exp->soft_close();
sub round {
my($number) = shift;
return int($number + .5 * ($number <=> 0));
}
![]() Btw, this thing actually works. Here's a screenshot of my desktop (which the joystick is connected to) sending messages to my laptop (which the vex is connected to). My laptop is connected to the network with wifi, so this is all wireless. ![]() |
|
#5
|
|||
|
|||
|
Re: Control a vex with a laptop?
I've been trying for a few hours to get the serial drivers working with the 04-23-08 Vex code, but I always wind up with the blinkey red light of death. Can anyone give me any insight into what this red light implies? And are there any tricks to getting the serial drivers working with this code? I've just been commenting out blocks of code trying to see what breaks it. This embedded stuff is confusing; I'm really in the dark here...
![]() |
|
#6
|
|||
|
|||
|
Re: Control a vex with a laptop?
Haha! I just discovered something totally by accident that I should have checked before. When using Kevin's FRC code with the Vex, motor ports 1 through 4 are controlled by pwms 13 through 16. That solves my problem. I still don't know how to control ports 5 through 8, but four motors is enough for now.
Oh, and it works perfectly. I'm controlling the Vex with the PSX controller attached to my desktop, over wifi. Now I just need to mount my laptop to the robot... Only I'm not that good with the mechanical aspect of robotics. Ah well... I'll have pictures and a video up soon. ![]() |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Using a VEX Receiver with Non-Vex Equipment | akaria | VEX | 26 | 06-09-2008 00:55 |
| The poor serial port less laptop owners with a ExpressCard Slot | Kingofl337 | Programming | 8 | 11-03-2008 22:25 |
| Laptop Controlled VEX robot | John Gutmann | Technical Discussion | 0 | 11-04-2007 00:51 |
| PC Control of Vex processor | tacman1123 | Programming | 1 | 06-06-2006 10:47 |
| What to do with an old Windows 3.10 laptop? | Elgin Clock | IT / Communications | 13 | 14-07-2005 17:45 |