View unanswered posts | View active topics It is currently Wed Oct 22, 2014 6:13 am






Reply to topic  [ 5 posts ] 
Different tasks? 
Author Message
Rookie

Joined: Wed Feb 08, 2012 8:28 pm
Posts: 13
Post Different tasks?
Hey everyone, im sorry if i bug you with all my questions. I am very interested in robotc and want to learn as much as possible.
My question for today is;
What is a way to run two things at once. I have my program that is the important part with all the functions and acions and stuff, I also want to run a second program that make the nxt beep out music by playing timed beeps at different frequencies. I have all the code but i dont know how to integrate them. I need to be able to drive and do everything else while the nxt plays music. I have to make it so the music doesnt effect the main task at all; but i also want the music to play and if it switched tasks or something the timeing would be off. I need to like run the music in the bacground but have it not effect the code. Any suggestions, also when i get the code done i will post it on here so everyone can see :)
Thanks
Thekid986


Tue Feb 14, 2012 4:22 pm
Profile
Moderator
Moderator
User avatar

Joined: Tue Sep 14, 2010 9:19 pm
Posts: 496
Post Re: Different tasks?
I'm sure that you're not bugging anyone with questions. After all, that's what these forums are here for. If you want an introductory tutorial in multitasking, you may want to look at this compilation in the VEX forums: http://www.vexforum.com/showthread.php?t=53551

_________________
sudo rm -rf /


Tue Feb 14, 2012 7:04 pm
Profile
Guru
User avatar

Joined: Sun Nov 15, 2009 5:46 am
Posts: 1347
Post Re: Different tasks?
I seldom play with the NXT tone functions except for playing warning sounds. But if I remember it correctly, the PlayTone function in RobotC will queue up the tones to be played. I don't have RobotC in front of me at the moment so I can't verify it. In theory, you can just execute the PlayTone functions one after the other so they will be queued up and executed in a timely manner. Having said that, I don't know how big is the RobotC tone queue. If you play a long song, it may overflow the queue. On the other hand, it is not really that difficult to write a task to play songs in the background. For example:
Code:
#define ARRAYSIZE(a)            (sizeof(a)/sizeof((a)[0]))
int Notes[] = {
    988, 988, 0, 988, 784, 988, 1175, 0, 783, 0, 784, 0, 783, 0, 659, 0, 880, 987, 932, 880, ...
};
int Durations[] = {
    14, 14, 7, 27, 14, 27, 27, 27, 27, 27, 27, 14, 27, 14, 27, 14, 27, 27, 14, 27, ...
};
int index = 0;

task SongTask()
{
    while (index < ARRAYSIZE(Notes))
    {
        if (!bSoundActive)
        {
            PlayTone(Notes[index], Durations[index]);
            index++;
        }
    }
}

task main()
{
    StartTask(SongTask);
    while (true)
    {
        //
        // do other robot tasks here.
        //
    }
}

EDIT: Thanks Xander, I have corrected the bSoundActive variable.


Last edited by MHTS on Wed Feb 15, 2012 6:51 am, edited 2 times in total.



Tue Feb 14, 2012 9:39 pm
Profile
Moderator
Moderator
User avatar

Joined: Wed Mar 05, 2008 8:14 am
Posts: 3225
Location: Rotterdam, The Netherlands
Post Re: Different tasks?
It's bSoundActive and it's a boolean variable :)

- Xander

_________________
| Professional Conduit of Reasonableness
| (Title bestowed upon on the 8th day of November, 2013)
| My Blog: I'd Rather Be Building Robots
| ROBOTC 3rd Party Driver Suite: [Project Page]


Wed Feb 15, 2012 6:17 am
Profile WWW
Rookie

Joined: Wed Feb 08, 2012 8:28 pm
Posts: 13
Post Re: Different tasks?
Thank you guys so much I think i got the kinks worked out now!
Thekid986


Wed Feb 15, 2012 11:28 am
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 5 posts ] 

Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  



Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.