Subject:
|
Re: [Q] Remote control code ?
|
Newsgroups:
|
lugnet.robotics
|
Date:
|
Wed, 31 Mar 2004 04:31:40 GMT
|
Viewed:
|
4059 times
|
| |
| |
In lugnet.robotics, Jordan Bradford wrote:
|
Im lazy . . . would someone please write a version of the program that works
with the LEGO remote control? Using the remote control is cooler than driving
it with a flashlight. And with a flashlight you cant make it turn.
|
Okay, I tried writing it anyway. It doesnt work, and I think its because Im
not changing the motor speeds. All Im doing is changing motor directions. Help
me out, please, since I spent the time to install BrickOS in BricxCC and learn
the remote.h and dsound.h APIs. Thanks!
#include <conio.h>
#include <unistd.h>
#include <dmotor.h>
#include <dsensor.h>
#include <dbutton.h>
#include <remote.h>
#include <rom/lcd.h>
#include <dsound.h>
int directionA, directionC;
int remote(unsigned int etype, unsigned int key)
{
if(etype == LREVT_KEYON)
{
switch(key)
{
case LRKEY_BEEP:
dsound_system(DSOUND_BEEP);
break;
case LRKEY_A1:
directionA = fwd;
break;
case LRKEY_A2:
directionA = rev;
break;
case LRKEY_C1:
directionC = fwd;
break;
case LRKEY_C2:
directionC = rev;
break;
case LRKEY_STOP:
break;
}
}
return 1;
}
int main(int argc, char **argv) {
long offset;
long err, err_diff, err_int = 0, err_old;
long pid;
int Kd = 210, Kp = 180, Ki = 10;
ds_active(&SENSOR_1);
ds_active(&SENSOR_3);
msleep(20);
offset = (long)SENSOR_1 - (long)SENSOR_3;
cputs("yal1");
sleep(2);
err_old = 0;
lr_init();
lr_startup();
lr_set_handler(remote);
while(1)
{
err = (long)SENSOR_1 - (long)SENSOR_3 - offset;
err_int = err_int + err + err_old;
err_diff = (err - err_old);
err_old = err;
pid = (Kd * err_diff + Kp * err + Ki * err_int) /3000l;
if (pid > 255) pid = 255;
if (pid < -255) pid = -255;
if (pid < 0)
{
directionA = rev;
directionC = rev;
pid = -pid;
}
else
{
directionA = fwd;
directionC = fwd;
pid = pid;
}
if (pid < 5)
{
directionA = brake;
directionC = brake;
}
lcd_int(pid);
lcd_refresh();
motor_a_dir(directionA);
motor_a_speed(pid);
motor_c_dir(directionC);
motor_c_speed(pid);
if(PRESSED(dbutton(), BUTTON_PROGRAM))
{
motor_a_dir(brake);
motor_c_dir(brake);
ds_passive(&SENSOR_1);
ds_passive(&SENSOR_3);
cputs("stop");
msleep(300);
while (PRESSED(dbutton(), BUTTON_PROGRAM));
motor_a_dir(off);
motor_c_dir(off);
cls();
lr_shutdown();
return(0);
}
msleep(20);
}
}
|
|
Some other things:
-Is there any reason the Prgm button is being used to stop the program? Why not
just press the Run button again, like in the normal firmware? -How can I make
the Stop button on the remote do what the program currently does when Prgm is
pressed? Maybe Ill cheat and use a goto.
Thanks again!
|
|
Message is in Reply To:
| | Re: [Q] Remote control code ?
|
| I'm lazy . . . would someone please write a version of the program that works with the LEGO remote control? Using the remote control is cooler than driving it with a flashlight. And with a flashlight you can't make it turn. (21 years ago, 31-Mar-04, to lugnet.robotics, FTX)
|
14 Messages in This Thread:
- Entire Thread on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
|
|
|
Active threads in Robotics
|
|
|
|