Subject:
|
Re: Q: Multitasking, and reacting to sensors
|
Newsgroups:
|
lugnet.robotics.rcx.nqc
|
Date:
|
Tue, 6 Feb 2001 13:12:00 GMT
|
Viewed:
|
2001 times
|
| |
| |
Hej Tobias!
Tobias Möller <tobias.moller@telia.com> writes:
>
> In NQC, I've tried to use the "If" statement, but it doesn't work
> correctly... It doesn't react to the sensor!
>
> Does this kind of procedure need to involve multitasking to work right?
> I put the if statement inside task main{} or whatever it's called.
No, rather you need a While or Until loop.
Normal programming languages are different from the RCX code.
In RCX code the watchers are running all the time, in NQC
you need to program the repetition yourself.
A program for simple rover could look like this:
#define BUMPER SENSOR_1
task main()
{
SetSensor(BUMPER, SENSOR_TOUCH);
while(true){
// go forward
OnFwd(OUT_A+OUT_C);
// wait for bumper
until(BUMPER==1);
// back up and turn
OnRev(OUT_A+OUT_C);
Wait(50);
OnFwd(OUT_A);
Wait(50);
}
}
(no guarantees for correctness, I just wrote it without any testing)
> This leads me to the second question...
> Although I already may have the answer...
> Could someone give me a simple example of multitasking? I've read the
> documentation, I know what it does, I just don't know how to use it.
If you have to things that should be done simultaneously and
are rather independent (e.g. one task to drive around and
one to operate a complicated sensor like a light scanner)
then it is best to use separate tasks.
If tasks need to communicate you can use global variables.
> Can I define a task in the beginning of the program, then run it only
> under certain circumstances (like light reading <50),
No, it runs all the time (in RCX2 there are events that can
do this, but they are more complicated to use).
You just need to use a loop to wait for the circumstances,
then do what you want to do.
> or at a certain point in the program?
This is what function or subroutines are good for.
Hoppas det hjälper
Jürgen
--
Jürgen Stuber <stuber@loria.fr>
http://www.loria.fr/~stuber/
|
|
Message has 1 Reply: | | Re: Q: Multitasking, and reacting to sensors
|
| (...) Sorry Juergen, but that's not quite right. You can start and stop tasks as often as you wish to do. like this int do_s_s = 0; int condition = 0; task main() { while (1) { if (condition && !do_s_s) { start do_something_special; do_s_s = 1; } if (...) (24 years ago, 6-Feb-01, to lugnet.robotics.rcx.nqc)
|
Message is in Reply To:
| | Q: Multitasking, and reacting to sensors
|
| I've downloaded NQC, and got it running. I have been able to make the motors run, to make them run backwards, then forward, etc. However... I can't get the sensor thing to work right. I want to make a program for a robot that backs up and turns when (...) (24 years ago, 5-Feb-01, to lugnet.robotics.rcx.nqc)
|
9 Messages in This Thread:
- Entire Thread on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
This Message and its Replies on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
|
|
|
|