View unanswered posts | View active topics It is currently Thu Nov 23, 2017 4:26 pm






Reply to topic  [ 2 posts ] 
Why my tasks/program is not running? 
Author Message
Rookie

Joined: Fri Jan 30, 2015 9:58 pm
Posts: 3
Post Why my tasks/program is not running?
Hi guys, I cannot figure out why my program is not running. I made a robot to go forward, find an object, pick it up, then turn around and come back. The debugger in robotc kind of sucks so it is hard to tell what exactly is wrong. It seems like something is blocking. anyway, here is my code:

Code:
#pragma config(Sensor, S2,     soundSensor,    sensorSoundDB)
#pragma config(Sensor, S4,     sonarSensor,    sensorSONAR)
#pragma config(Motor,  motorA,          gripclaw,      tmotorNXT, PIDControl, encoder)
#pragma config(Motor,  motorB,          rightMotor,    tmotorNXT, PIDControl, encoder)
#pragma config(Motor,  motorC,          leftMotor,     tmotorNXT, PIDControl, encoder)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//

/*--------------------------------------------------------------------------------------------------------*\
|*                                                                                                        *|
|*                                            - Gripper Bot -                                             *|
|*                                            ROBOTC on NXT                                               *|
|*                                                                  Jorge Cantu                                                                           *|
|*                                                                                                        *|
|*  This program finds an object, grips it when a clap is heard, and returns the object                              *|
|*   back to its starting position.                                                                                                            *|
|*                                                                                                        *|
|*                                        ROBOT CONFIGURATION                                             *|
|*    NOTES:                                                                                              *|
|*    1)  The 1 second delay is needed to avoid obtaining inaccurate initial readings.                    *|
|*                                                                                                        *|
|*    MOTORS & SENSORS:                                                                                   *|
|*    [I/O Port]              [Name]              [Type]              [Description]                       *|
|*    Port C                  motorC              NXT                 Right motor                         *|
|*    Port B                  motorB              NXT                 Left motor                          *|
|*      Port A                            motorA                     NXT                           Rotate Sonar Sensor                           *| 
|*    Port 1                  soundSensor         Sound Sensor        Sound DbA                           *|
|*      Port 4                           sonarSensor               Sonar Sensor            Sonar                                                *|
\*--------------------------------------------------------------------------------------------------------*/
/*---------------------------------------------GLOBAL VARIABLES-------------------------------------------*/
int detectflag = 0;                     // flag used to detect the object
int movecount = 0;                     // flag used to keep track of movement
int soundflag = 0;                     // flag used to detect clap
//int distance_in_cm = 30;            // threshold to detect object
/*-----------------------------------------------------------------------*/
/* Movement Task - This task moves the robot until an object is detected.*/
/*                      - Moves between a certain distance                                  */
/*-----------------------------------------------------------------------*/
task MoveTask(){
   while(true){
      //nMotorEncoder[motorB] = 0; // Initialize motor encoders
      //nMotorEncoder[motorC] = 0;
      wait1Msec(300);
      while(detectflag == 0){       // While object is not detected
         soundflag = 0;                // Flag not set while moving
         // Foward
         motor[motorB] = 35;      // Motor B is run at a 35 power level
         motor[motorC] = 35;      // Motor C is run at a 35 power level
         wait1Msec(300);
         //nMotorEncoderTarget[motorB] = motorB;   // Track degree movement;
         //nMotorEncoderTarget[motorC] = motorC;

         // Point Turn Left
         motor[motorB] = -35;      // Motor B is run at a 35 power level
         motor[motorC] = 35;       // Motor C is run at a 35 power level
         wait1Msec(300);
         //nMotorEncoderTarget[motorB] = motorB;   // Track degree movement;
         //nMotorEncoderTarget[motorC] = motorC;

         // Point Turn Right
         motor[motorB] = 35;       // Motor B is run at a 35 power level
         motor[motorC] = -35;      // Motor C is run at a 35 power level
         wait1Msec(300);
         //nMotorEncoderTarget[motorB] = motorB;   // Track degree movement;
         //nMotorEncoderTarget[motorC] = motorC;

         movecount++;      // Increment counter to keep track of distance
      }
      // Else the object is detected
      while(detectflag == 1){
         motor[motorB] = 0;       // Motor B is run at a 35 power level
         motor[motorC] = 0;      // Motor C is run at a 35 power level
         if(soundflag == 1){               // Clap heard?
            motor[motorA] = 45;            // Grip object
            wait1Msec(300);
            }else{
            // do nothing
         }
         // Turn Around
         motor[motorB] = -60;      // Motor B is run at a 35 power level
         motor[motorC] = 60;       // Motor C is run at a 35 power level
         wait1Msec(300);

         //motor[motorB] = nMotorEncoderTarget[motorB];      // Bring robot back to start
         //motor[motorC] = nMotorEncoderTarget[motorC];      // Bring robot back to start
         wait1Msec(300);
      }
   }
   return;
}
/*-----------------------------------------------------------------------*/
/* Detect Task - This task sets a flag once an object is detected.          */
/*-----------------------------------------------------------------------*/
task DetectTask(){
   while(true){
      wait1Msec(500);                  // Initialize Sensor readings
      while(SensorValue[sonarSensor] > 30)   // While readings are less than 'distance_in_cm':
      {
         detectflag = 0;          // No detection, so detect flag is null
      }
      detectflag = 1;             // Object detected, set detect flag
   }
   return;
}
/*-----------------------------------------------------------------------*/
/* Sound Task - This task sets a flag once a clap/sound is detected  .   */
/*-----------------------------------------------------------------------*/
task SoundTask(){
   while(true){
      wait1Msec(500);                   // Initialize Sensor readings
      while(SensorValue(soundSensor) < 70)    // While the Sound Sensor is less than 70 (quiet):
      {
         soundflag = 0;                                    // No clap, so sound flag is null
      }
      soundflag = 1;                                       // Clap heard, set sound flag
   }
   return;
}
/*-----------------------------------------------------------------------*/
/* Main Task - Runs the other tasks                                                       */
/*-----------------------------------------------------------------------*/
task main()
{
   //while(true){      
      startTask(MoveTask);
      startTask(DetectTask);
      startTask(SoundTask);
//   }
   return;
}


Mon Mar 16, 2015 3:10 pm
Profile
Rookie

Joined: Wed Sep 10, 2014 9:53 am
Posts: 20
Post Re: Why my tasks/program is not running?
Other tasks will only run for as long as task main is running. Since you return from task main immediately after starting the other tasks, they do not have time to do anything.

You can solve this problem by having task main wait until you actual want to end your program. If you don't want the program to end, you can use the following code.

Code:
task main()
{
  startTask(MoveTask);
  startTask(DetectTask);
  startTask(SoundTask);
 
  while (true)
  {
    wait1MSec(1000);
  }
}


Tue Mar 17, 2015 1:32 pm
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 2 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.